Merge branch 'shf_rename' of github.com:webnotes/erpnext into shf_rename

Conflicts:
	css/all-app.css
	version.num
This commit is contained in:
Anand Doshi
2012-04-17 11:19:15 +05:30
40 changed files with 3046 additions and 3520 deletions

5
.gitignore vendored
View File

@@ -1,11 +1,10 @@
*.pyc *.pyc
*.comp.js *.comp.js
.DS_Store .DS_Store
server_tools
services
user_files user_files
patch.log patch.log
lib lib
versions-local.db conf.py
version.num
user_files user_files
*.sql* *.sql*

View File

@@ -1,181 +1,19 @@
[ {
{ "css/all-web.css": [
"lib/js/core.min.js": [ "erpnext/startup/startup.css",
"lib/js/wn/class.js", "erpnext/website/css/website.css"
"lib/js/wn/provide.js", ],
"lib/js/wn/versions.js", "css/all-app.css": [
"lib/js/wn/assets.js", "erpnext/startup/startup.css"
"lib/js/wn/require.js", ],
"lib/js/wn/dom.js", "js/all-web.js": [
"lib/js/wn/model.js", "erpnext/startup/startup.js",
"lib/js/wn/misc/tools.js", "erpnext/website/js/topbar.js"
"lib/js/wn/misc/user.js", ],
"lib/js/lib/json2.js", "js/all-app.js": [
"lib/js/wn/router.js", "erpnext/startup/startup.js",
"lib/js/wn/ui/listing.js", "erpnext/startup/js/modules.js",
"lib/js/wn/views/container.js", "erpnext/startup/js/toolbar.js",
"lib/js/wn/views/doclistview.js", "erpnext/startup/js/feature_setup.js"
"lib/js/wn/views/pageview.js", ]
"lib/js/wn/views/formview.js", }
"lib/js/wn/views/reportview.js",
"lib/js/wn/request.js",
"lib/js/core.js"
]
},
{
"lib/js/wn/ui/toolbar.min.js": [
"lib/js/wn/ui/toolbar/selector_dialog.js",
"lib/js/wn/ui/toolbar/new.js",
"lib/js/wn/ui/toolbar/search.js",
"lib/js/wn/ui/toolbar/report.js",
"lib/js/wn/ui/toolbar/recent.js",
"lib/js/wn/ui/toolbar/toolbar.js"
]
},
{
"lib/js/legacy/report.compressed.js": [
"lib/js/legacy/widgets/report_builder/report_builder.js",
"lib/js/legacy/widgets/report_builder/datatable.js",
"lib/js/legacy/widgets/report_builder/calculator.js"
]
},
{
"css/all-web.css": [
"lib/css/legacy/body.css",
"lib/css/legacy/messages.css",
"lib/css/legacy/dialog.css",
"lib/css/bootstrap/headings.css",
"lib/css/bootstrap/buttons.css",
"lib/css/bootstrap/navbar.css",
"lib/css/bootstrap/dropdown.css",
"lib/css/bootstrap/tooltip.css",
"lib/css/ui/fonts.css",
"lib/css/ui/list.css",
"erpnext/startup/startup.css",
"erpnext/website/css/website.css"
]
},
{
"css/all-app.css": [
"lib/css/legacy/body.css",
"lib/css/legacy/messages.css",
"lib/css/legacy/forms.css",
"lib/css/legacy/grid.css",
"lib/css/legacy/listing.css",
"lib/css/legacy/report.css",
"lib/css/legacy/dialog.css",
"lib/css/legacy/tabs.css",
"lib/css/legacy/sidebar.css",
"lib/css/Aristo/aristo.selected.css",
"lib/css/ui/list.css",
"lib/css/ui/views.css",
"lib/css/ui/fonts.css",
"lib/css/bootstrap/headings.css",
"lib/css/bootstrap/buttons.css",
"lib/css/bootstrap/navbar.css",
"lib/css/bootstrap/dropdown.css",
"lib/css/bootstrap/tooltip.css",
"lib/css/bootstrap/label.css",
"lib/css/bootstrap/icons.css",
"lib/css/bootstrap/popover.css",
"erpnext/startup/startup.css"
]
},
{
"js/all-web.js": [
"lib/js/lib/history/history.min.js:concat",
"lib/js/lib/bootstrap.min.js:concat",
"lib/js/core.min.js:concat",
"lib/js/legacy/globals.js",
"lib/js/legacy/utils/datatype.js",
"lib/js/legacy/utils/datetime.js",
"lib/js/legacy/utils/dom.js",
"lib/js/legacy/utils/handler.js",
"lib/js/legacy/utils/msgprint.js",
"lib/js/wn/ui/appframe.js",
"lib/js/wn/ui/dialog.js",
"lib/js/legacy/widgets/dialog.js",
"lib/js/wn/ui/listing.js",
"lib/js/legacy/webpage/page_header.js",
"lib/js/legacy/webpage/spinner.js",
"lib/js/legacy/webpage/loaders.js",
"lib/js/legacy/wn/widgets/footer.js",
"lib/js/legacy/model/local_data.js",
"lib/js/legacy/model/doclist.js",
"lib/js/legacy/app.js",
"js/app.js",
"erpnext/startup/startup.js",
"erpnext/website/js/topbar.js"
]
},
{
"js/all-app.js": [
"lib/js/lib/history/history.min.js:concat",
"lib/js/lib/jquery/jquery.ui.core.js:concat",
"lib/js/lib/jquery/jquery.ui.datepicker.js:concat",
"lib/js/lib/jquery/jquery.ui.autocomplete.js:concat",
"lib/js/lib/tiny_mce_33/jquery.tinymce.js:concat",
"lib/js/lib/bootstrap.min.js:concat",
"lib/js/lib/sprintf.js",
"lib/js/core.min.js:concat",
"lib/js/legacy/globals.js",
"lib/js/legacy/utils/datatype.js",
"lib/js/legacy/utils/datetime.js",
"lib/js/legacy/utils/dom.js",
"lib/js/legacy/utils/handler.js",
"lib/js/legacy/utils/msgprint.js",
"lib/js/legacy/utils/printElement.js",
"lib/js/legacy/widgets/form/fields.js",
"lib/js/wn/ui/appframe.js",
"lib/js/wn/ui/dialog.js",
"lib/js/wn/ui/button.js",
"lib/js/legacy/widgets/dialog.js",
"lib/js/legacy/widgets/layout.js",
"lib/js/legacy/widgets/tabbedpage.js",
"lib/js/legacy/webpage/page_header.js",
"lib/js/legacy/widgets/tags.js",
"lib/js/legacy/widgets/export_query.js",
"lib/js/legacy/webpage/search.js",
"lib/js/legacy/webpage/spinner.js",
"lib/js/legacy/webpage/error_console.js",
"lib/js/legacy/webpage/loaders.js",
"lib/js/legacy/webpage/uploader.js",
"lib/js/legacy/wn/page_layout.js",
"lib/js/legacy/wn/widgets/page_sidebar.js",
"lib/js/legacy/wn/widgets/footer.js",
"lib/js/legacy/model/local_data.js",
"lib/js/legacy/model/doclist.js",
"lib/js/wn/ui/toolbar.min.js:concat",
"lib/js/wn/views/breadcrumbs.js",
"lib/js/legacy/widgets/form/fields.js",
"lib/js/legacy/widgets/form/form_dialog.js",
"lib/js/legacy/widgets/form/form_header.js",
"lib/js/legacy/widgets/form/form.js",
"lib/js/legacy/widgets/form/form_fields.js",
"lib/js/legacy/widgets/form/grid.js",
"lib/js/legacy/widgets/form/form_grid.js",
"lib/js/legacy/widgets/form/print_format.js",
"lib/js/legacy/widgets/form/email.js",
"lib/js/legacy/widgets/form/clientscriptAPI.js",
"lib/js/legacy/widgets/form/form_comments.js",
"lib/js/legacy/wn/widgets/form/sidebar.js",
"lib/js/legacy/wn/widgets/form/comments.js",
"lib/js/legacy/wn/widgets/form/attachments.js",
"lib/js/legacy/wn/widgets/form/assign_to.js",
"lib/js/legacy/app.js",
"js/app.js",
"erpnext/startup/startup.js",
"erpnext/startup/js/modules.js",
"erpnext/startup/js/toolbar.js",
"erpnext/startup/js/feature_setup.js"
]
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -1,415 +1,4 @@
/*
* lib/css/legacy/body.css
*/
html {
margin: 0px;
padding: 0px;
}
body {
margin: 0px;
padding: 0px;
font-family: Arial, Helvetica, Sans;
font-size: 14px;
color: #000;
background-color: #e2e2e2;
}
pre { margin: 0px; padding: 0px; }
button { margin: 2px; margin-left: 0px; }
label {
padding-top: 15px;
color: #404040;
}
select, input, textarea {
border: 1px solid #ccc;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
font-size: inherit;
padding: 4px;
color: #444;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
textarea {
font-family: inherit;
height: 120px;
width: 90%;
font-size: inherit;
white-space: normal;
}
table { padding: 0px; border-collapse: 'collapse'}
td {
padding:0px;
margin: 0px;
vertical-align: top;
}
p {
margin: 0px 0px 9px 0px;
line-height: 1.5em;
}
li {
line-height: 1.5em;
}
hr {
margin: 18px 0;
border: 0;
border-top: 1px solid #e5e5e5;
border-bottom: 1px solid #ffffff;
}
/* links */
a:active { outline:none; }
a {
color: #0088cc;
text-decoration: none;
}
a:hover {
color: #005580;
text-decoration: underline;
}
.link_type {
padding:2px;
color: #0088cc;
cursor: pointer;
}
.link_type:hover {
color: #005580;
text-decoration: underline;
}
:focus { -moz-outline-style:none; }
table.simpletable { border-collapse: collapse; margin-bottom: 10px;}
table.simpletable td {border: 1pt solid #000; vertical-align: top; padding: 2px; }
div.fix_ff_cursor { overflow: auto; }
/* --- Layout --- */
div.comment { color: #444; }
.small {
font-size: 11px;
}
.help {
margin-bottom: 3px;
color: #888;
}
div#body_div {
display: none;
padding-right: 7px;
width: 900px;
margin: auto;
margin-top: 56px;
}
.content {
width: 900px;
}
.background-fade-in {
-webkit-transition: background 1s ease-in; /* property duration timing-function delay */
-moz-transition: background 1s ease-in;
-o-transition: background 1s ease-in;
transition: background 1s ease-in;
}
footer {
width: 900px;
margin: auto;
}
header .container {
width: 900px;
margin: auto;
}
@media (max-width: 1200px) {
div#body_div, header .container, .content, #opened-page-selector, footer {
width: 900px;
}
}
@media (min-width: 1200px) {
div#body_div, header .container, .content, #opened-page-selector, footer {
width: 1100px;
}
}
div.no_script {
display: none;
}
div.loading_div {
background-color: #FFFFCC;
z-index: 1999;
right: 5px;
width: 90px;
display: none;
text-align: center;
padding: 2px;
border: 1px solid #FF4;
}
div.std-footer {
margin: 13px -15px;
border-top: 1px solid #AAA;
padding: 13px;
}
div.std-footer-item {
margin: 0px 13px 13px 0px;
}
.shadow {
-moz-box-shadow: 0px 2px 2px #888;
-webkit-box-shadow: 0px 2px 2px #888;
box-shadow: 0px 2px 2px #888;
}
.round {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.layout_wrapper, .layout-wrapper {
-moz-box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
-webkit-box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
background-color: #fff;
padding: 15px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
margin-bottom: 30px;
overflow: hidden;
}
.layout-wrapper-appframe {
padding: 0px;
}
.layout-wrapper-background {
background-color: #fafafa !important;
padding: 0px;
}
.layout-main-section {
width: 71%;
float: left;
padding: 15px;
background-color: #FFF;
min-height: 600px;
-moz-box-shadow: 2px 0px 1px #ddd;
-webkit-box-shadow: 2px 0px 1px #ddd;
box-shadow: 2px 0px 1px #ddd;
}
.layout-side-section {
width: 22%;
/*float: right;*/
color: #606060;
overflow-x: hidden;
padding: 15px;
min-height: 600px;
}
/* from bootstrap */
.container {
margin-left: auto;
margin-right: auto;
zoom: 1;
}
.container:before, .container:after {
display: table;
content: "";
zoom: 1;
}
.container:after {
clear: both;
}
.well {
min-height: 20px;
padding: 19px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #eee;
border: 1px solid rgba(0, 0, 0, 0.05);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.avatar-small {
display: inline-block;
width: 24px;
height: 20px;
vertical-align: middle;
overflow: hidden;
margin: 0px 3px;
}
.avatar-small img {
width: 24px;
}
/*
* lib/css/legacy/messages.css
*/
/* FLOATING MESSAGE */
.btn-img { cursor: pointer; }
div.fetching { color: #888; text-align:right; }
div.notice {
postion: absolute;
background-color: #000;
-moz-border-radius: 5px; -webkit-border-radius: 5px;
opacity: 0.6;
right: 0;
top: 0;
margin-top: 8px;
z-index: -1;
padding: 8px;
}
/** help **/
.info-box {
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
line-height: 1.6em;
overflow: auto;
padding: 6px 10px;
margin-bottom: 9px;
}
.help_box, .help-box {
background-color:#FFC;
font-size: 13px;
color: #864;
padding: 7px;
margin: 11px 0px;
border: 1px solid #EEB;
}
.help_box_big {
background-color:#FFC;
color: #864;
padding: 7px;
margin: 7px 0px;
border: 1px solid #EEB;
text-align: center;
font-size: 14px;
}
/*
* lib/css/legacy/dialog.css
*/
/***** Dialogs *******/
div.dialog_wrapper {
position: absolute;
width: 440px;
display: none;
z-index: 90;
background-color: #FFF;
box-shadow:1px 1px 8px #444;
-moz-box-shadow: 1px 1px 8px #444;
-webkit-box-shadow: 1px 1px 8px #444;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
overflow: hidden;
}
div.dialog_head {
height: 22px;
padding: 4px;
background-color: #222;
color: #FFF;
}
div.dialog_body {
padding: 8px 8px 16px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
div.dialog_back {
position: fixed;
display: none;
top: 0px;
left: 0px;
bottom: 0px;
right: 0px;
background-color: #aaa;
opacity: 0.6;
z-index: 50;
text-align: center;
}
div.dialog_message {
display: none;
position: absolute;
width: 250px;
font-size: 12px;
z-index: 91;
background-color:#FFF;
padding: 12px;
border: 1px solid #444;
}
div.dialog_row {
padding: 8px 8px 0px 8px;
}
div.dialog_row table {
width: 100%;
}
div.dialog_row table td {
}
div.dialog_row input[type="text"], div.dialog_row input[type="password"], div.dialog_row textarea, div.dialog_row select {
width: 80%;
font-size: 14px;
}
div.dialog_row table td textarea {
width: 80%;
height: 200px;
font-size: 12px;
}
/* /*
* lib/css/bootstrap/headings.css * lib/css/bootstrap/headings.css
*/ */
@@ -1606,6 +1195,456 @@ button.btn.small, input[type="submit"].btn.small {
margin-bottom: 0; margin-bottom: 0;
} }
/*
* lib/css/legacy/body.css
*/
html {
margin: 0px;
padding: 0px;
}
body {
margin: 0px;
padding: 0px;
font-size: 14px;
color: #000;
background-color: #e2e2e2;
}
/* font settings */
h1, h2, h3, h4, h5 {
font-family: "Helvetica Neue", Helvetica, "Helvetica Neue", sans-serif;
font-weight: normal;
margin-top: 0.2em;
}
body {
font-family: "Helvetica Neue", Helvetica, "Helvetica Neue", sans-serif;
font-size: 13px;
}
span, div, td, input, textarea, button, select {
font-family: inherit;
}
pre { margin: 0px; padding: 0px; }
button { margin: 2px; margin-left: 0px; }
label {
padding-top: 15px;
color: #404040;
}
select, input, textarea {
border: 1px solid #ccc;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
font-size: inherit;
padding: 4px;
color: #444;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
textarea {
font-family: inherit;
height: 120px;
width: 90%;
font-size: inherit;
white-space: normal;
}
table { padding: 0px; border-collapse: 'collapse'}
td {
padding:0px;
margin: 0px;
vertical-align: top;
}
p {
margin: 0px 0px 9px 0px;
line-height: 1.5em;
}
li {
line-height: 1.5em;
}
hr {
margin: 18px 0;
border: 0;
border-top: 1px solid #e5e5e5;
border-bottom: 1px solid #ffffff;
}
/* links */
a:active { outline:none; }
a {
color: #0088cc;
text-decoration: none;
}
a:hover {
color: #005580;
text-decoration: underline;
}
.link_type {
padding:2px;
color: #0088cc;
cursor: pointer;
}
.link_type:hover {
color: #005580;
text-decoration: underline;
}
:focus { -moz-outline-style:none; }
table.simpletable { border-collapse: collapse; margin-bottom: 10px;}
table.simpletable td {border: 1pt solid #000; vertical-align: top; padding: 2px; }
div.fix_ff_cursor { overflow: auto; }
/* --- Layout --- */
div.comment { color: #444; }
.small {
font-size: 11px;
}
.help {
margin-bottom: 3px;
color: #888;
}
div#body_div {
display: none;
padding-right: 7px;
width: 900px;
margin: auto;
margin-top: 56px;
}
.content {
width: 900px;
}
.background-fade-in {
-webkit-transition: background 1s ease-in; /* property duration timing-function delay */
-moz-transition: background 1s ease-in;
-o-transition: background 1s ease-in;
transition: background 1s ease-in;
}
footer {
width: 900px;
margin: auto;
}
header .container {
width: 900px;
margin: auto;
}
@media (max-width: 1200px) {
div#body_div, header .container, .content, #opened-page-selector, footer {
width: 900px;
}
}
@media (min-width: 1200px) {
div#body_div, header .container, .content, #opened-page-selector, footer {
width: 1100px;
}
}
div.no_script {
display: none;
}
div.loading_div {
background-color: #FFFFCC;
z-index: 1999;
right: 5px;
width: 90px;
display: none;
text-align: center;
padding: 2px;
border: 1px solid #FF4;
}
div.std-footer {
margin: 13px -15px;
border-top: 1px solid #AAA;
padding: 13px;
}
div.std-footer-item {
margin: 0px 13px 13px 0px;
}
.shadow {
-moz-box-shadow: 0px 2px 2px #888;
-webkit-box-shadow: 0px 2px 2px #888;
box-shadow: 0px 2px 2px #888;
}
.round {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.layout_wrapper, .layout-wrapper {
-moz-box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
-webkit-box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
background-color: #fff;
padding: 15px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
margin-bottom: 30px;
overflow: hidden;
}
.layout-wrapper-appframe {
padding: 0px;
}
.layout-wrapper-background {
background-color: #fafafa !important;
padding: 0px;
}
.layout-section {
padding: 15px;
}
.layout-main-section {
width: 71%;
float: left;
padding: 15px;
background-color: #FFF;
min-height: 600px;
-moz-box-shadow: 2px 0px 1px #ddd;
-webkit-box-shadow: 2px 0px 1px #ddd;
box-shadow: 2px 0px 1px #ddd;
}
.layout-side-section {
width: 22%;
/*float: right;*/
color: #606060;
overflow-x: hidden;
padding: 15px;
min-height: 600px;
}
/* from bootstrap */
.container {
margin-left: auto;
margin-right: auto;
zoom: 1;
}
.container:before, .container:after {
display: table;
content: "";
zoom: 1;
}
.container:after {
clear: both;
}
.well {
min-height: 20px;
padding: 19px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #eee;
border: 1px solid rgba(0, 0, 0, 0.05);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.avatar-small {
display: inline-block;
width: 24px;
height: 20px;
vertical-align: middle;
overflow: hidden;
margin: 0px 3px;
}
.avatar-small img {
width: 24px;
}
/*
* lib/css/legacy/messages.css
*/
/* FLOATING MESSAGE */
.btn-img { cursor: pointer; }
div.fetching { color: #888; text-align:right; }
div.notice {
postion: absolute;
background-color: #000;
-moz-border-radius: 5px; -webkit-border-radius: 5px;
opacity: 0.6;
right: 0;
top: 0;
margin-top: 8px;
z-index: -1;
padding: 8px;
}
/** help **/
.info-box {
background-color: #F8F8F8;
border: 1px solid #CCCCCC;
border-radius: 3px 3px 3px 3px;
line-height: 1.6em;
overflow: auto;
padding: 6px 10px;
margin-bottom: 9px;
}
.help_box, .help-box {
background-color:#FFC;
font-size: 13px;
color: #864;
padding: 7px;
margin: 11px 0px;
border: 1px solid #EEB;
}
.help_box_big {
background-color:#FFC;
color: #864;
padding: 7px;
margin: 7px 0px;
border: 1px solid #EEB;
text-align: center;
font-size: 14px;
}
/*
* lib/css/legacy/dialog.css
*/
/***** Dialogs *******/
div.dialog_wrapper {
position: absolute;
width: 440px;
display: none;
z-index: 90;
background-color: #FFF;
box-shadow:1px 1px 8px #444;
-moz-box-shadow: 1px 1px 8px #444;
-webkit-box-shadow: 1px 1px 8px #444;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
overflow: hidden;
}
div.dialog_head {
height: 22px;
padding: 4px;
background-color: #222;
color: #FFF;
}
div.dialog_body {
padding: 8px 8px 16px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
div.dialog_back {
position: fixed;
display: none;
top: 0px;
left: 0px;
bottom: 0px;
right: 0px;
background-color: #aaa;
opacity: 0.6;
z-index: 50;
text-align: center;
}
div.dialog_message {
display: none;
position: absolute;
width: 250px;
font-size: 12px;
z-index: 91;
background-color:#FFF;
padding: 12px;
border: 1px solid #444;
}
div.dialog_row {
padding: 8px 8px 0px 8px;
}
div.dialog_row table {
width: 100%;
}
div.dialog_row table td {
}
div.dialog_row input[type="text"], div.dialog_row input[type="password"], div.dialog_row textarea, div.dialog_row select {
width: 80%;
font-size: 14px;
}
div.dialog_row table td textarea {
width: 80%;
height: 200px;
font-size: 12px;
}
/*
* lib/css/ui/common.css
*/
.navbar-icon-home {
vertical-align: middle;
opacity: 0.4;
Filter:alpha(opacity=40); /* For IE8 and earlier */
}
.navbar-icon-home:hover,
.navbar-icon-home:focus,
.navbar-icon-home:active,
.navbar-icon-home-hover{
opacity:1;
Filter:alpha(opacity=100); /* For IE8 and earlier */
}
/* /*
* lib/css/ui/fonts.css * lib/css/ui/fonts.css
*/ */
@@ -1811,17 +1850,50 @@ div.stat-bar {
/*
* lib/css/ui/views.css
*/
.breadcrumbs {
color: #000000;
}
.breadcrumbs a {
color: #000000;
}
div.appframe-titlebar {
padding: 6px;
background: #eeeeee; /* Old browsers */
background: -moz-linear-gradient(top, #eeeeee 0%, #cccccc 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(100%,#cccccc)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #eeeeee 0%,#cccccc 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #eeeeee 0%,#cccccc 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #eeeeee 0%,#cccccc 100%); /* IE10+ */
background: linear-gradient(top, #eeeeee 0%,#cccccc 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#cccccc',GradientType=0 ); /* IE6-9 */
border-bottom: 1px solid #aaa;
min-height: 1.2em;
}
div.appframe-toolbar {
padding: 4px;
background: #eeeeee;
border-top: 1px solid #f8f8f8;
border-bottom: 1px solid #ccc;
}
/* /*
* erpnext/startup/startup.css * erpnext/startup/startup.css
*/ */
h1, h2, h3, h4, h5 { h1, h2, h3, h4, h5 {
font-family: "Open Sans", Helvetica, "Helvetica Neue", sans-serif; font-family: "Helvetica Neue", "Open Sans", Helvetica, sans-serif;
font-weight: normal; font-weight: normal;
margin-top: 0.2em; margin-top: 0.2em;
} }
body { body {
font-family: "Open Sans", Helvetica, "Helvetica Neue", sans-serif; font-family: "Helvetica Neue", "Open Sans", Helvetica, sans-serif;
font-size: 13px; font-size: 13px;
} }
@@ -1860,26 +1932,11 @@ body {
color: #fff; color: #fff;
} }
.navbar-new-comments-true { .navbar-new-comments-true {
color: #fff; color: #fff;
background-color: #B00D07; background-color: #B00D07;
} }
.navbar-icon-home {
vertical-align: middle;
opacity:0.4;
Filter:alpha(opacity=40); /* For IE8 and earlier */
}
.navbar-icon-home:hover,
.navbar-icon-home:focus,
.navbar-icon-home:active,
.navbar-icon-home-hover{
opacity:1;
Filter:alpha(opacity=100); /* For IE8 and earlier */
}
/*extra size menus for recent*/ /*extra size menus for recent*/
.dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{ .dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{
min-width: 160px !important; min-width: 160px !important;

View File

@@ -35,12 +35,6 @@ class DocType:
self.doc, self.doclist = d, dl self.doc, self.doclist = d, dl
self.entries = [] self.entries = []
# Get Company List
# ----------------
def get_companies(self,arg=''):
ret = webnotes.conn.sql("select name, abbr from tabCompany where docstatus != 2")
return {'cl':[r[0] for r in ret]}
def get_company_currency(self,arg=''): def get_company_currency(self,arg=''):
dcc = TransactionBase().get_company_currency(arg) dcc = TransactionBase().get_company_currency(arg)
return dcc return dcc

View File

@@ -1,9 +1,20 @@
h1 { padding: 8px 0px; margin: 0px; } select.accbrowser-company-select {
#ledger_area { padding: 16px;} width: 200px;
.ac_head { display: none; } margin-top: 2px;
.ac_head div { padding: 2px; } margin-left: 10px;
.ac_ledger { display: none; padding: 8px; margin-top: 8px; border-top: 1px solid #DDD; } }
.ac_balance { margin-left: 4px; font-size: 16px; font-weight: bold; background-color: #FFFAB0; }
.ac_page_sel_tab { width:90%; background-color: #EEE; margin-bottom: 8px } span.accbrowser-node-toolbar {
.ac_page_sel_tab td { vertical-align: middle; padding: 3px; } padding: 2px;
margin-left: 15px;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
background-color: #ddd;
}
.tree-area a.selected {
font-weight: bold;
text-decoration: underline;
}

View File

@@ -1,7 +1,12 @@
<div class="layout-wrapper layout-wrapper-appframe"> <div class="layout-wrapper layout-wrapper-background">
<div class="appframe-area"></div> <div class="appframe-area"></div>
<div style="padding: 15px;"> <div class="layout-main-section">
<div id="ab_header"></div> <div class="tree-area"></div>
<div id="ab_body" style="margin: 16px;"></div>
</div> </div>
<div class="layout-side-section">
<div class="help">1. To add child nodes, explore tree and click on the node under which you want to add more nodes.<br><br>
2. Please do NOT create accounts (ledgers) for Customers and Suppliers. They are created directly from the Customer / Supplier masters.<br>
</div>
</div>
<div class="clear"></div>
</div> </div>

View File

@@ -14,37 +14,235 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
pscript['onshow_Accounts Browser'] = function(wrapper){ // tree of chart of accounts / cost centers
wn.require('lib/js/legacy/widgets/tree.js'); // multiple companies
// add node
// edit node
// see ledger
pscript['onload_Accounts Browser'] = function(wrapper){
wn.require('lib/js/wn/ui/tree.js');
wrapper.appframe = new wn.ui.AppFrame($(wrapper).find('.appframe-area')); wrapper.appframe = new wn.ui.AppFrame($(wrapper).find('.appframe-area'));
wrapper.appframe.add_button('New Company', function() { newdoc('Company'); }, 'icon-plus'); wrapper.appframe.add_button('New Company', function() { newdoc('Company'); }, 'icon-plus');
wrapper.appframe.add_button('Refresh', function() {
wrapper.$company_select.change();
}, 'icon-refresh');
var route = decodeURIComponent(location.hash); // company-select
if(route.indexOf('/')!=-1) { wrapper.$company_select = $('<select class="accbrowser-company-select"></select>')
var chart_type = route.split('/')[1]; .change(function() {
pscript.make_chart(chart_type); var ctype = wn.get_route()[1] || 'Account';
return; erpnext.account_chart = new erpnext.AccountsChart(ctype, $(this).val(), wrapper);
})
.appendTo(wrapper.appframe.$w.find('.appframe-toolbar'));
// default company
if(sys_defaults.company) {
$('<option>')
.html(sys_defaults.company)
.attr('value', sys_defaults.company)
.appendTo(wrapper.$company_select);
wrapper.$company_select
.val(sys_defaults.company).change();
} }
// if the user directly loads the page, ask to select the chart // load up companies
var parent = $i('ab_body'); wn.call({
parent.innerHTML = 'Please select your chart: ' method:'accounts.page.accounts_browser.accounts_browser.get_companies',
var sel = $a(parent,'select'); callback: function(r) {
add_sel_options(sel, ['Account', 'Cost Center'], 'Account'); wrapper.$company_select.empty();
var btn = $btn(parent, 'Go', function() { pscript.make_chart(sel_val(sel)); }, {marginTop:'8px'}); $.each(r.message, function(i, v) {
$('<option>').html(v).attr('value', v).appendTo(wrapper.$company_select);
});
wrapper.$company_select.val(sys_defaults.company || r[0]);
}
});
} }
pscript.make_chart = function(b) { pscript['onshow_Accounts Browser'] = function(wrapper){
pscript.chart_type = b; // set route
$i('ab_header').innerHTML =''; var ctype = wn.get_route()[1] || 'Account';
$i('ab_body').innerHTML =''; wrapper.appframe.title('Chart of '+ctype+'s');
//===============comment area======================================== if(erpnext.account_chart && erpnext.account_chart.ctype != ctype) {
var comment = $a($i('ab_body'),'div','comment',{marginBottom:"8px"}); wrapper.$company_select.change();
comment.innerHTML = "Note: Explore and click on the tree node to add a new child"; }
var select_area = $a('ab_body', 'div', '', {margin:'8px 0px'}); }
erpnext.AccountsChart = Class.extend({
init: function(ctype, company, wrapper) {
$(wrapper).find('.tree-area').empty();
var me = this;
me.ctype = ctype;
me.company = company;
this.tree = new wn.ui.Tree({
parent: $(wrapper).find('.tree-area'),
label: company,
args: {ctype: ctype},
method: 'accounts.page.accounts_browser.accounts_browser.get_children',
click: function(link) {
if(me.cur_toolbar)
$(me.cur_toolbar).toggle(false);
if(!link.toolbar)
me.make_link_toolbar(link);
if(link.toolbar) {
me.cur_toolbar = link.toolbar;
$(me.cur_toolbar).toggle(true);
}
}
});
this.tree.rootnode.$a.click();
},
make_link_toolbar: function(link) {
var data = $(link).data('node-data');
if(!data) return;
link.toolbar = $('<span class="accbrowser-node-toolbar"></span>').insertAfter(link);
// edit
$('<a href="#!Form/'+encodeURIComponent(this.ctype)+'/'
+encodeURIComponent(data.value)+'">Edit</a>').appendTo(link.toolbar);
if(data.expandable) {
link.toolbar.append(' | <a onclick="erpnext.account_chart.new_node();">Add Child</a>');
} else if(this.ctype=='Account') {
link.toolbar.append(' | <a onclick="erpnext.account_chart.show_ledger();">View Ledger</a>');
}
},
show_ledger: function() {
var me = this;
var node = me.selected_node();
wn.set_route('Report', 'GL Entry', 'General Ledger',
this.ctype + '=' + node.data('label'));
},
new_node: function() {
if(this.ctype=='Account') {
this.new_account();
} else {
this.new_cost_center();
}
},
selected_node: function() {
return this.tree.$w.find('.tree-link.selected');
},
new_account: function() {
var me = this;
// the dialog
var d = new wn.ui.Dialog({
title:'New Account',
fields: [
{fieldtype:'Data', fieldname:'account_name', label:'New Account Name', reqd:true},
{fieldtype:'Select', fieldname:'group_or_ledger', label:'Group or Ledger',
options:'Group\nLedger'},
{fieldtype:'Select', fieldname:'account_type', label:'Account Type',
options: ['', 'Fixed Asset Account', 'Bank or Cash', 'Expense Account', 'Tax',
'Income Account', 'Chargeable'].join('\n') },
{fieldtype:'Float', fieldname:'tax_rate', label:'Tax Rate'},
{fieldtype:'Select', fieldname:'master_type', label:'Master Type',
options: ['NA', 'Supplier', 'Customer', 'Employee'].join('\n') },
{fieldtype:'Button', fieldname:'create_new', label:'Create New' }
]
})
var fd = d.fields_dict;
// account type if ledger
$(fd.group_or_ledger.input).change(function() {
if($(this).val()=='Group') {
$(fd.account_type.wrapper).toggle(false);
$(fd.master_type.wrapper).toggle(false);
$(fd.tax_rate.wrapper).toggle(false);
} else {
$(fd.account_type.wrapper).toggle(true);
$(fd.master_type.wrapper).toggle(true);
if(fd.account_type.get_value()=='Tax') {
$(fd.tax_rate.wrapper).toggle(true);
}
}
});
// tax rate if tax
$(fd.account_type.input).change(function() {
if($(this).val()=='Tax') {
$(fd.tax_rate.wrapper).toggle(true);
} else {
$(fd.tax_rate.wrapper).toggle(false);
}
})
// create
$(fd.create_new.input).click(function() {
var btn = this;
$(btn).set_working();
var v = d.get_values();
if(!v) return;
var node = me.selected_node();
v.parent_account = node.data('label');
v.company = me.company;
$c_obj('GL Control', 'add_ac', v,
function(r,rt) {
$(btn).done_working();
d.hide();
node.trigger('reload');
});
});
// show
d.onshow = function() {
$(fd.group_or_ledger.input).change();
}
d.show();
},
new_cost_center: function(){
var me = this;
// the dialog
var d = new wn.ui.Dialog({
title:'New Cost Center',
fields: [
{fieldtype:'Data', fieldname:'cost_center_name', label:'New Cost Center Name', reqd:true},
{fieldtype:'Select', fieldname:'group_or_ledger', label:'Group or Ledger',
options:'Group\nLedger'},
{fieldtype:'Button', fieldname:'create_new', label:'Create New' }
]
})
// create
$(d.fields_dict.create_new.input).click(function() {
var btn = this;
$(btn).set_working();
var v = d.get_values();
if(!v) return;
var node = me.selected_node();
v.parent_cost_center = node.data('label');
v.company_name = me.company;
$c_obj('GL Control', 'add_cc', v,
function(r,rt) {
$(btn).done_working();
d.hide();
node.trigger('reload');
});
});
d.show();
}
});
/*
pscript.make_chart = function(b, wrapper) {
pscript.ctype = b;
$(wrapper).find('.tree-area').empty()
$(wrapper).find('.layout-sidesection').empty()
//================== table body====================================== //================== table body======================================
var ac_main_grid = make_table($i('ab_body'),1,2,'100%',['60%','40%'],{border:"0px", padding:"4px",tableLayout: "fixed", borderCollapse: "collapse"}); var ac_main_grid = make_table($i('ab_body'),1,2,'100%',['60%','40%'],{border:"0px", padding:"4px",tableLayout: "fixed", borderCollapse: "collapse"});
@@ -55,7 +253,7 @@ pscript.make_chart = function(b) {
pscript.acc_period_bal = $a($td(ac_main_grid,0,1),'div'); pscript.acc_period_bal = $a($td(ac_main_grid,0,1),'div');
//=====================footer area ================================== //=====================footer area ==================================
if (pscript.chart_type == 'Account') { if (pscript.ctype == 'Account') {
var footer = $a($i('ab_body'),'div','',{backgroundColor: "#FFD", padding: "8px", color: "#444", fontSize: "12px", marginTop: "14px"}); var footer = $a($i('ab_body'),'div','',{backgroundColor: "#FFD", padding: "8px", color: "#444", fontSize: "12px", marginTop: "14px"});
var help1 = $a(footer,'span'); var help1 = $a(footer,'span');
@@ -65,12 +263,7 @@ pscript.make_chart = function(b) {
// header and toolbar // header and toolbar
// ------------------ // ------------------
wrapper.appframe.$titlebar.find('.appframe-title').html('Chart of '+pscript.ctype+'s');
var h1 = 'Chart of '+pscript.chart_type+'s';
if(pscript.chart_type == 'Account') var d = 'accounting';
else var d = 'cost center';
var desc = 'Manage multiple companies and the '+d+' structures of each company.';
$i('ab_body').page_head = new PageHeader('ab_header',h1,desc);
// select company // select company
// -------------- // --------------
@@ -115,8 +308,8 @@ pscript.make_chart = function(b) {
} }
pscript.make_ac_tree = function() { pscript.make_ac_tree = function() {
//var type= sel_val($i('chart_type')) //var type= sel_val($i('ctype'))
var type= pscript.chart_type; var type= pscript.ctype;
var tree = new Tree(pscript.account_tree, '90%'); var tree = new Tree(pscript.account_tree, '90%');
pscript.ac_tree = tree; pscript.ac_tree = tree;
@@ -171,9 +364,9 @@ pscript.make_ac_tree = function() {
} }
if (type=='Account'){ if (type=='Account'){
var arg = [node.rec.name, node.rec.account_name, sel_val(pscript.ab_company_sel), pscript.chart_type]; var arg = [node.rec.name, node.rec.account_name, sel_val(pscript.ab_company_sel), pscript.ctype];
} else{ } else{
var arg = [node.rec.name, node.rec.cost_center_name,sel_val(pscript.ab_company_sel), pscript.chart_type]; var arg = [node.rec.name, node.rec.cost_center_name,sel_val(pscript.ab_company_sel), pscript.ctype];
} }
$c_obj('GL Control','get_cl',arg.join(','),callback); $c_obj('GL Control','get_cl',arg.join(','),callback);
@@ -338,10 +531,6 @@ pscript.make_ledger_area = function() {
pscript.gl_rep.innerHTML = '<img src="lib/images/icons/report.png" style="margin-right: 8px"><span class="link_type">Open Ledger</span>'; pscript.gl_rep.innerHTML = '<img src="lib/images/icons/report.png" style="margin-right: 8px"><span class="link_type">Open Ledger</span>';
pscript.gl_rep.onclick = function(){ pscript.make_report('gl'); } pscript.gl_rep.onclick = function(){ pscript.make_report('gl'); }
//Budget report link
/*pscript.cc_rep = $a(pscript.ledger_area, 'div','', {fontSize: '14px',marginBottom: '8px', fontWeight: 'bold'});
pscript.cc_rep.innerHTML = '<img src="images/icons/report.png" style="margin-right: 8px"><span class="link_type">Budget vs Actual Analysis Report</span>';
pscript.cc_rep.onclick = function(){ pscript.make_report('budget'); }*/
} }
pscript.make_report = function(flag){ pscript.make_report = function(flag){
@@ -352,12 +541,6 @@ pscript.make_report = function(flag){
} }
loadreport('GL Entry','General Ledger',callback); loadreport('GL Entry','General Ledger',callback);
} }
/*else {
loadreport('Budget Detail','Periodical Budget Report',function(f){
f.set_filter('Cost Center','ID',pscript.cur_node.rec.name);
f.dt.run();
});
}*/
} }
// New Account // New Account
@@ -435,3 +618,4 @@ pscript.make_new_cost_center_dialog = function(){
pscript.new_cost_center_dialog = pscript.cc_dialog; pscript.new_cost_center_dialog = pscript.cc_dialog;
} }
*/

View File

@@ -0,0 +1,31 @@
import webnotes
@webnotes.whitelist()
def get_companies():
return [r[0] for r in webnotes.conn.sql("""select name from tabCompany where docstatus!=2""")]
@webnotes.whitelist()
def get_children():
args = webnotes.form_dict
ctype = args['ctype']
company_field = ctype=='Account' and 'company' or 'company_name'
# root
if args['parent'] in get_companies():
return webnotes.conn.sql("""select
name as value, if(group_or_ledger='Group', 1, 0) as expandable
from `tab%s`
where ifnull(parent_%s,'') = ''
and %s = %s
and docstatus<2
order by name""" % (ctype, ctype.lower().replace(' ','_'), company_field, '%s'),
args['parent'], as_dict=1)
# other
return webnotes.conn.sql("""select
name as value, if(group_or_ledger='Group', 1, 0) as expandable
from `tab%s`
where ifnull(parent_%s,'') = %s
and docstatus<2
order by name""" % (ctype, ctype.lower().replace(' ','_'), '%s'),
args['parent'], as_dict=1)

View File

@@ -71,15 +71,7 @@ class DocType:
pr.save(1) pr.save(1)
# Update Membership Type at Gateway # Update Membership Type at Gateway
import webnotes.defs
from webnotes.utils import cint from webnotes.utils import cint
if hasattr(webnotes.defs, 'sync_with_gateway') and \
cint(webnotes.defs.sync_with_gateway) or 0:
if 'System Manager' in role_list : membership_type = 'Administrator'
else : membership_type = 'Member'
import server_tools.gateway_utils
server_tools.gateway_utils.update_membership_type(cstr(arg['usr']), membership_type)
sql("delete from __SessionCache where user=%s", cstr(arg['usr'])) sql("delete from __SessionCache where user=%s", cstr(arg['usr']))

View File

@@ -28,13 +28,6 @@ def change_password(arg):
if not webnotes.conn.sql('select name from tabProfile where name=%s and password=password(%s)', (webnotes.session['user'], arg['old_password'])): if not webnotes.conn.sql('select name from tabProfile where name=%s and password=password(%s)', (webnotes.session['user'], arg['old_password'])):
webnotes.msgprint('Old password is not correct', raise_exception=1) webnotes.msgprint('Old password is not correct', raise_exception=1)
import webnotes.defs
from webnotes.utils import cint
if hasattr(webnotes.defs, 'sync_with_gateway') and \
cint(webnotes.defs.sync_with_gateway) or 0:
import server_tools.gateway_utils
webnotes.msgprint(server_tools.gateway_utils.change_password(arg['old_password'], arg['new_password'])['message'])
from webnotes.utils import nowdate from webnotes.utils import nowdate
webnotes.conn.sql("update tabProfile set password=password(%s), modified=%s where name=%s",(arg['new_password'], nowdate(), webnotes.session['user'])) webnotes.conn.sql("update tabProfile set password=password(%s), modified=%s where name=%s",(arg['new_password'], nowdate(), webnotes.session['user']))
webnotes.msgprint('Password Updated'); webnotes.msgprint('Password Updated');

View File

@@ -59,48 +59,15 @@ class DocType:
msgprint("Employee's attendance already marked.") msgprint("Employee's attendance already marked.")
raise Exception raise Exception
#validation - leave_type is mandatory for status absent/ half day else not required to entered.
def validate_status(self):
if self.doc.status == 'Present' and self.doc.leave_type:
msgprint("You can not enter leave type for attendance status 'Present'")
raise Exception
elif (self.doc.status == 'Absent' or self.doc.status == 'Half Day') and not self.doc.leave_type:
msgprint("Please enter leave type for attendance status 'Absent'")
raise Exception
#check for already record present in leave transaction for same date #check for already record present in leave transaction for same date
def check_leave_record(self): def check_leave_record(self):
if self.doc.status == 'Present': if self.doc.status == 'Present':
chk = sql("select name from `tabLeave Transaction` where employee=%s and (from_date <= %s and to_date >= %s) and status = 'Submitted' and leave_transaction_type = 'Deduction' and docstatus!=2", (self.doc.employee, self.doc.att_date, self.doc.att_date)) chk = sql("select name from `tabLeave Application` where employee=%s and (from_date <= %s and to_date >= %s) and docstatus!=2", (self.doc.employee, self.doc.att_date, self.doc.att_date))
if chk: if chk:
msgprint("Leave Application created for employee "+self.doc.employee+" whom you are trying to mark as 'Present' ") msgprint("Leave Application created for employee "+self.doc.employee+" whom you are trying to mark as 'Present' ")
raise Exception raise Exception
#For absent/ half day record - check for leave balances of the employees
def validate_leave_type(self):
if not self.doc.status =='Present' and self.doc.leave_type not in ('Leave Without Pay','Compensatory Off'):
#check for leave allocated to employee from leave transaction
ret = sql("select name from `tabLeave Transaction` where employee = '%s' and leave_type = '%s' and leave_transaction_type = 'Allocation' and fiscal_year = '%s'"%(self.doc.employee,self.doc.leave_type,self.doc.fiscal_year))
#if leave allocation is present then calculate leave balance i.e. sum(allocation) - sum(deduction)
if ret:
q1 = 'SUM(CASE WHEN leave_transaction_type = "Allocation" THEN total_leave ELSE 0 END)-SUM(CASE WHEN leave_transaction_type = "Deduction" THEN total_leave ELSE 0 END)'
q2 = "select %s from `tabLeave Transaction` where employee = '%s' and leave_type = '%s' and fiscal_year = '%s' and docstatus = 1"
res = sql(q2%(q1,self.doc.employee,self.doc.leave_type,self.doc.fiscal_year))
if res:
if self.doc.status == 'Absent' and flt(res[0][0]) < 1:
msgprint("%s balances are insufficient to cover a day absence, please select other leave type."%self.doc.leave_type)
raise Exception
if self.doc.status == 'Half Day' and flt(res[0][0]) < 0.5:
msgprint("%s balances are insufficient to cover a half day absence, please select other leave type."%self.doc.leave_type)
raise Exception
else:
msgprint("Leave Allocation for employee %s not done.\n You can allocate leaves from HR -> Leave Transaction OR HR -> Leave Control Panel."%self.doc.employee)
raise Exception
def validate_fiscal_year(self): def validate_fiscal_year(self):
fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"% self.doc.fiscal_year) fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"% self.doc.fiscal_year)
@@ -129,7 +96,6 @@ class DocType:
def validate(self): def validate(self):
self.validate_fiscal_year() self.validate_fiscal_year()
self.validate_att_date() self.validate_att_date()
#self.validate_leave_type()
self.validate_duplicate_record() self.validate_duplicate_record()
#self.validate_status() #self.validate_status()
self.check_leave_record() self.check_leave_record()

View File

@@ -8,11 +8,11 @@
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# Please edit this list and import only required elements # Please edit this list and import only required elements
import webnotes import webnotes
@@ -34,126 +34,126 @@ convert_to_lists = webnotes.conn.convert_to_lists
class DocType: class DocType:
def __init__(self, doc, doclist=[]): def __init__(self, doc, doclist=[]):
self.doc = doc self.doc = doc
self.doclist = doclist self.doclist = doclist
def get_employee_name(self): def get_employee_name(self):
emp_dtl = sql("select employee_name,company_email from `tabEmployee` where name=%s", self.doc.employee) emp_dtl = sql("select employee_name,company_email from `tabEmployee` where name=%s", self.doc.employee)
emp_nm = emp_dtl and emp_dtl[0][0] or '' emp_nm = emp_dtl and emp_dtl[0][0] or ''
self.doc.employee_name = emp_nm self.doc.employee_name = emp_nm
self.doc.email_id = emp_dtl and emp_dtl[0][1] or '' self.doc.email_id = emp_dtl and emp_dtl[0][1] or ''
return cstr(emp_nm) return cstr(emp_nm)
def get_approver_lst(self): def get_approver_lst(self):
approver_lst =[] approver_lst =[]
approver_lst1 = get_obj('Authorization Control').get_approver_name(self.doc.doctype,0,self) approver_lst1 = get_obj('Authorization Control').get_approver_name(self.doc.doctype,0,self)
if approver_lst1: if approver_lst1:
approver_lst=approver_lst1 approver_lst=approver_lst1
else: else:
approver_lst = [x[0] for x in sql("select distinct name from `tabProfile` where enabled=1 and name!='Administrator' and name!='Guest' and docstatus!=2")] approver_lst = [x[0] for x in sql("select distinct name from `tabProfile` where enabled=1 and name!='Administrator' and name!='Guest' and docstatus!=2")]
return approver_lst return approver_lst
def set_approver(self): def set_approver(self):
ret={} ret={}
approver_lst =[] approver_lst =[]
emp_nm = self.get_employee_name() emp_nm = self.get_employee_name()
approver_lst = self.get_approver_lst() approver_lst = self.get_approver_lst()
ret = {'app_lst':"\n" + "\n".join(approver_lst), 'emp_nm':cstr(emp_nm)} ret = {'app_lst':"\n" + "\n".join(approver_lst), 'emp_nm':cstr(emp_nm)}
return ret return ret
def update_voucher(self): def update_voucher(self):
sql("delete from `tabExpense Claim Detail` where parent = '%s'"%self.doc.name) sql("delete from `tabExpense Claim Detail` where parent = '%s'"%self.doc.name)
for d in getlist(self.doclist, 'expense_voucher_details'): for d in getlist(self.doclist, 'expense_voucher_details'):
if not d.expense_type or not d.claim_amount: if not d.expense_type or not d.claim_amount:
msgprint("Please remove the extra blank row added") msgprint("Please remove the extra blank row added")
raise Exception raise Exception
d.save(1) d.save(1)
if self.doc.total_sanctioned_amount: if self.doc.total_sanctioned_amount:
set(self.doc,'total_sanctioned_amount',self.doc.total_sanctioned_amount) set(self.doc,'total_sanctioned_amount',self.doc.total_sanctioned_amount)
if self.doc.remark: if self.doc.remark:
set(self.doc, 'remark', self.doc.remark) set(self.doc, 'remark', self.doc.remark)
def approve_voucher(self): def approve_voucher(self):
for d in getlist(self.doclist, 'expense_voucher_details'): for d in getlist(self.doclist, 'expense_voucher_details'):
if not d.sanctioned_amount: if not d.sanctioned_amount:
msgprint("Please add 'Sanctioned Amount' for all expenses") msgprint("Please add 'Sanctioned Amount' for all expenses")
return cstr('Incomplete') return cstr('Incomplete')
if not self.doc.total_sanctioned_amount: if not self.doc.total_sanctioned_amount:
msgprint("Please calculate total sanctioned amount using button 'Calculate Total Amount'") msgprint("Please calculate total sanctioned amount using button 'Calculate Total Amount'")
return cstr('No Amount') return cstr('No Amount')
self.update_voucher() self.update_voucher()
set(self.doc, 'approval_status', 'Approved') set(self.doc, 'approval_status', 'Approved')
# on approval notification # on approval notification
#get_obj('Notification Control').notify_contact('Expense Claim Approved', self.doc.doctype, self.doc.name, self.doc.email_id, self.doc.employee_name) #get_obj('Notification Control').notify_contact('Expense Claim Approved', self.doc.doctype, self.doc.name, self.doc.email_id, self.doc.employee_name)
return cstr('Approved') return cstr('Approved')
def reject_voucher(self): def reject_voucher(self):
if self.doc.remark: if self.doc.remark:
set(self.doc, 'remark', self.doc.remark) set(self.doc, 'remark', self.doc.remark)
set(self.doc, 'approval_status', 'Rejected') set(self.doc, 'approval_status', 'Rejected')
# on approval notification # on approval notification
#get_obj('Notification Control').notify_contact('Expense Claim Rejected', self.doc.doctype, self.doc.name, self.doc.email_id, self.doc.employee_name) #get_obj('Notification Control').notify_contact('Expense Claim Rejected', self.doc.doctype, self.doc.name, self.doc.email_id, self.doc.employee_name)
return cstr('Rejected') return cstr('Rejected')
def validate_curr_exp(self): def validate_curr_exp(self):
for d in getlist(self.doclist, 'expense_voucher_details'): for d in getlist(self.doclist, 'expense_voucher_details'):
if flt(d.sanctioned_amount) > 0: if flt(d.sanctioned_amount) > 0:
if self.doc.approval_status == 'Draft': if self.doc.approval_status == 'Draft':
msgprint("Sanctioned amount can be added by Approver person only for submitted Expense Claim") msgprint("Sanctioned amount can be added by Approver person only for submitted Expense Claim")
raise Exception raise Exception
elif self.doc.approval_status == 'Submitted' and session['user'] != self.doc.exp_approver: elif self.doc.approval_status == 'Submitted' and session['user'] != self.doc.exp_approver:
msgprint("Sanctioned amount can be added only by expense voucher Approver") msgprint("Sanctioned amount can be added only by expense voucher Approver")
raise Exception raise Exception
def validate_fiscal_year(self): def validate_fiscal_year(self):
fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year) fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%self.doc.fiscal_year)
ysd=fy and fy[0][0] or "" ysd=fy and fy[0][0] or ""
yed=add_days(str(ysd),365) yed=add_days(str(ysd),365)
if str(self.doc.posting_date) < str(ysd) or str(self.doc.posting_date) > str(yed): if str(self.doc.posting_date) < str(ysd) or str(self.doc.posting_date) > str(yed):
msgprint("Posting Date is not within the Fiscal Year selected") msgprint("Posting Date is not within the Fiscal Year selected")
raise Exception raise Exception
def validate(self): def validate(self):
self.validate_curr_exp() self.validate_curr_exp()
self.validate_fiscal_year() self.validate_fiscal_year()
def on_update(self): def on_update(self):
set(self.doc, 'approval_status', 'Draft') set(self.doc, 'approval_status', 'Draft')
def validate_exp_details(self): def validate_exp_details(self):
if not getlist(self.doclist, 'expense_voucher_details'): if not getlist(self.doclist, 'expense_voucher_details'):
msgprint("Please add expense voucher details") msgprint("Please add expense voucher details")
raise Exception raise Exception
if not self.doc.total_claimed_amount: if not self.doc.total_claimed_amount:
msgprint("Please calculate Total Claimed Amount") msgprint("Please calculate Total Claimed Amount")
raise Exception raise Exception
if not self.doc.exp_approver: if not self.doc.exp_approver:
msgprint("Please select Expense Claim approver") msgprint("Please select Expense Claim approver")
raise Exception raise Exception
def validate_approver(self): def validate_approver(self):
app_lst = self.get_approver_lst() app_lst = self.get_approver_lst()
if self.doc.exp_approver and self.doc.exp_approver not in app_lst: if self.doc.exp_approver and self.doc.exp_approver not in app_lst:
msgprint("Approver "+self.doc.exp_approver+" is not authorized to approve this expense voucher. Please select another approver") msgprint("Approver "+self.doc.exp_approver+" is not authorized to approve this expense voucher. Please select another approver")
valid_app = 'No' valid_app = 'No'
else: else:
valid_app = 'Yes' valid_app = 'Yes'
ret = {'app_lst':("\n" + "\n".join(app_lst)), 'valid_approver':valid_app} ret = {'app_lst':("\n" + "\n".join(app_lst)), 'valid_approver':valid_app}
return ret return ret
def on_submit(self): def on_submit(self):
self.validate_exp_details() self.validate_exp_details()
set(self.doc, 'approval_status', 'Submitted') set(self.doc, 'approval_status', 'Submitted')
def on_cancel(self): def on_cancel(self):
set(self.doc, 'approval_status', 'Cancelled') set(self.doc, 'approval_status', 'Cancelled')

View File

@@ -29,7 +29,6 @@ cur_frm.cscript.onload = function(doc, dt, dn){
//======================================================================= //=======================================================================
cur_frm.cscript.refresh = function(doc, dt, dn){ cur_frm.cscript.refresh = function(doc, dt, dn){
if((!doc.__islocal) && (doc.is_active == 'Yes')){ if((!doc.__islocal) && (doc.is_active == 'Yes')){
cur_frm.add_custom_button('Make IT Checklist', cur_frm.cscript['Make IT Checklist']);
cur_frm.add_custom_button('Make Salary Slip', cur_frm.cscript['Make Salary Slip']); cur_frm.add_custom_button('Make Salary Slip', cur_frm.cscript['Make Salary Slip']);
get_field(doc.doctype, 'employee', doc.name).permlevel = 1; get_field(doc.doctype, 'employee', doc.name).permlevel = 1;
@@ -37,16 +36,6 @@ cur_frm.cscript.refresh = function(doc, dt, dn){
} }
} }
// Make IT checklist
//=======================================================================
cur_frm.cscript['Make IT Checklist']=function(){
var itc = LocalDB.create('IT Checklist');
itc = locals['IT Checklist'][itc];
itc.employee = cur_frm.doc.employee;
itc.fiscal_year = sys_defaults.fiscal_year;
itc.is_cheklist_active='Yes';
loaddoc('IT Checklist', itc.name);
}
// Make Salry Slip // Make Salry Slip
//======================================================================= //=======================================================================

View File

@@ -57,7 +57,7 @@
<div class="section-item"> <div class="section-item">
<a class="section-link" <a class="section-link"
title = "List of holidays" title = "List of holidays"
href="#!List/Leave Allocation">Holiday List</a> href="#!List/Holiday List">Holiday List</a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -43,8 +43,8 @@ for r in res:
for d1 in li: for d1 in li:
d2 = '%s'%d1 d2 = '%s'%d1
earn_ret=convert_to_lists(sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%r[col_idx['ID']])) earn_ret=convert_to_lists(sql("select e_type,e_amount from `tabSalary Slip Earning` where parent = '%s'"%r[col_idx['ID']]))
ded_ret=convert_to_lists(sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%r[col_idx['ID']])) ded_ret=convert_to_lists(sql("select d_type,d_amount from `tabSalary Slip Deduction` where parent = '%s'"%r[col_idx['ID']]))
for e in earn_ret: for e in earn_ret:
@@ -78,7 +78,7 @@ for lst in earn_type_lst:
for r in res: for r in res:
lst0 = '%s'%lst[0] lst0 = '%s'%lst[0]
total_ear += r[col_idx[lst0]] total_ear += flt(r[col_idx[lst0]])
total.append(total_ear) total.append(total_ear)
@@ -87,7 +87,7 @@ for lst in ded_type_lst:
total_ded = 0 total_ded = 0
for r in res: for r in res:
lst0 = '%s'%lst[0] lst0 = '%s'%lst[0]
total_ded += r[col_idx[lst0]] total_ded += flt(r[col_idx[lst0]])
total.append(total_ded) total.append(total_ded)

View File

@@ -1,4 +1,5 @@
import webnotes import webnotes
import conf
from webnotes.model import rename, delete_doc from webnotes.model import rename, delete_doc
from webnotes.model.code import get_obj from webnotes.model.code import get_obj
from wnf import replace_code from wnf import replace_code
@@ -54,7 +55,7 @@ def execute():
#for d in webnotes.conn.sql("""select name, module from #for d in webnotes.conn.sql("""select name, module from
# `tabSearch Criteria` where ifnull(standard, 'No') = 'Yes' and ifnull(disabled, 0) = 0"""): # `tabSearch Criteria` where ifnull(standard, 'No') = 'Yes' and ifnull(disabled, 0) = 0"""):
# #
for path, folders, files in os.walk(webnotes.defs.modules_path): for path, folders, files in os.walk(conf.modules_path):
if not path.endswith('search_criteria'): continue if not path.endswith('search_criteria'): continue
module = path.split(os.sep)[-2] module = path.split(os.sep)[-2]
for sc in folders: for sc in folders:
@@ -128,7 +129,8 @@ def delete_search_criteria():
'periodic_sales_summary', 'monthly_despatched_trend', 'sales', 'sales_order', 'periodic_sales_summary', 'monthly_despatched_trend', 'sales', 'sales_order',
'sales_order1', 'sales_agentwise_commission', 'test_report', 'sales_order1', 'sales_agentwise_commission', 'test_report',
'territory_wise_sales_-_target_vs_actual_', 'territory_wise_sales_-_target_vs_actual_',
'pending_po_items_to_bill1', 'pending_po_items_to_receive1')""") 'pending_po_items_to_bill1', 'pending_po_items_to_receive1',
'expense_vouchers', 'pending_expense_vouchers', 'shortage_to_indent')""")
webnotes.conn.sql(""" webnotes.conn.sql("""
DELETE FROM `tabSearch Criteria` DELETE FROM `tabSearch Criteria`
@@ -142,7 +144,7 @@ def delete_search_criteria():
def change_report_module(): def change_report_module():
reports = {'itemwise_receipt_details': 'Stock'} reports = {'itemwise_receipt_details': 'Stock'}
for k in reports: for k in reports:
sql("update `tabSearch Criteria` set module = %s where name = %s", (reports[k], k)) webnotes.conn.sql("update `tabSearch Criteria` set module = %s where name = %s", (reports[k], k))
def rename_in_db(ren_data, data_type, is_doctype): def rename_in_db(ren_data, data_type, is_doctype):
for d in ren_data: for d in ren_data:
@@ -420,7 +422,7 @@ def prepare_dict_of_label_fieldname(module_path):
modules_list = folders modules_list = folders
for f in files: for f in files:
if f.endswith(".txt"): if f.endswith(".txt"):
rel_path = os.path.relpath(path, webnotes.defs.modules_path) rel_path = os.path.relpath(path, conf.modules_path)
path_tuple = rel_path.split(os.sep) path_tuple = rel_path.split(os.sep)
if (len(path_tuple)==3 and path_tuple[0] in modules_list and if (len(path_tuple)==3 and path_tuple[0] in modules_list and
path_tuple[1] == 'doctype'): path_tuple[1] == 'doctype'):

View File

@@ -195,7 +195,7 @@ class DocType:
"""Update workstation rate and calculates totals""" """Update workstation rate and calculates totals"""
total_op_cost = 0 total_op_cost = 0
for d in getlist(self.doclist, 'bom_operations'): for d in getlist(self.doclist, 'bom_operations'):
hour_rate = sql("select hour_rate from `tabWorkstation` where name = %s", d.workstation) hour_rate = sql("select hour_rate from `tabWorkstation` where name = %s", cstr(d.workstation))
d.hour_rate = hour_rate and flt(hour_rate[0][0]) or 0 d.hour_rate = hour_rate and flt(hour_rate[0][0]) or 0
d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60 d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60
total_op_cost += d.operating_cost total_op_cost += d.operating_cost

View File

@@ -52,4 +52,4 @@ cur_frm.cscript.project_value = function(doc, cdt, cdn){
//--------- calculate gross profit -------------------------------- //--------- calculate gross profit --------------------------------
cur_frm.cscript.est_material_cost = function(doc, cdt, cdn){ cur_frm.cscript.est_material_cost = function(doc, cdt, cdn){
get_server_fields('get_gross_profit','','',doc, cdt, cdn, 1); get_server_fields('get_gross_profit','','',doc, cdt, cdn, 1);
} }

View File

@@ -119,4 +119,4 @@ cur_frm.cscript.declare_completed = function(){
cur_frm.cscript.refresh(cur_frm.doc, cur_frm.doc.doctype, cur_frm.doc.name); cur_frm.cscript.refresh(cur_frm.doc, cur_frm.doc.doctype, cur_frm.doc.name);
} }
}); });
} }

View File

@@ -51,7 +51,7 @@ class DocType:
def get_allocated_to_name(self): def get_allocated_to_name(self):
as_em = sql("select first_name, last_name from `tabProfile` where name=%s",str(self.doc.allocated_to)) as_em = sql("select first_name, last_name from `tabProfile` where name=%s",str(self.doc.allocated_to))
ret = { 'allocated_to_name' : as_em and (as_em[0][0] + ' ' + as_em[0][1]) or ''} ret = { 'allocated_to_name' : as_em and (cstr(as_em[0][0]) + ' ' + cstr(as_em[0][1])) or ''}
return ret return ret
# validate # validate
@@ -95,7 +95,7 @@ class DocType:
sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name) sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name)
self.add_calendar_event() self.add_calendar_event()
else: else:
msgprint("An Expeted start date has not been set for this task.Please set a, 'Expected Start date'\ msgprint("An Expeted start date has not been set for this task.Please set 'Expected Start date'\
to add an event to allocated persons calender.You can save a task without this also.") to add an event to allocated persons calender.You can save a task without this also.")

View File

@@ -47,7 +47,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
//--------------- //---------------
cur_frm.clear_custom_buttons() cur_frm.clear_custom_buttons()
if(!doc.__islocal && !in_list(['Converted', 'Lead Lost'], doc.status)) { if(!doc.__islocal && !in_list(['Converted', 'Lead Lost'], doc.status)) {
cur_frm.add_custom_button('Create Customer', cur_frm.cscript['Create Customer']); if (doc.source != 'Existing Customer') cur_frm.add_custom_button('Create Customer', cur_frm.cscript['Create Customer']);
cur_frm.add_custom_button('Create Opportunity', cur_frm.cscript['Create Opportunity']); cur_frm.add_custom_button('Create Opportunity', cur_frm.cscript['Create Opportunity']);
cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms); cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
} }

View File

@@ -86,15 +86,10 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
// stop // stop
if(doc.per_delivered < 100 || doc.per_billed < 100) if(doc.per_delivered < 100 || doc.per_billed < 100)
cur_frm.add_custom_button('Stop!', cur_frm.cscript['Stop Sales Order']); cur_frm.add_custom_button('Stop!', cur_frm.cscript['Stop Sales Order']);
} else { } else {
// un-stop // un-stop
cur_frm.add_custom_button('Unstop', cur_frm.cscript['Unstop Sales Order']); cur_frm.add_custom_button('Unstop', cur_frm.cscript['Unstop Sales Order']);
} }
unhide_field(['Send SMS', 'message', 'customer_mobile_no'])
} else {
hide_field(['Send SMS', 'message', 'customer_mobile_no'])
} }
} }

View File

@@ -15,25 +15,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import webnotes import webnotes
import webnotes.defs
from webnotes.utils import cint from webnotes.utils import cint
import home import home
def on_login(login_manager):
"""
called from login manager, before login
"""
if login_manager.user not in ('Guest', None, '') and webnotes.conn.cur_db_name!='accounts' and webnotes.conn.get_value('Control Panel', 'Control Panel', 'account_id')!='s5u011':
try:
login_manager = login_as(login_manager)
if hasattr(webnotes.defs, 'sync_with_gateway') and \
cint(webnotes.defs.sync_with_gateway) or 0:
update_account_details()
import server_tools.gateway_utils
server_tools.gateway_utils.check_login(login_manager.user)
except ImportError:
pass
def on_login_post_session(login_manager): def on_login_post_session(login_manager):
""" """
@@ -99,6 +83,11 @@ def boot_session(bootinfo):
bootinfo['user_background'] = webnotes.conn.get_value("Profile", webnotes.session['user'], 'background_image') or '' bootinfo['user_background'] = webnotes.conn.get_value("Profile", webnotes.session['user'], 'background_image') or ''
import conf
bootinfo['sync_with_gateway'] = hasattr(conf, 'sync_with_gateway') and \
cint(conf.sync_with_gateway) or 0
def get_letter_heads(): def get_letter_heads():
"""load letter heads with startup""" """load letter heads with startup"""
import webnotes import webnotes
@@ -123,45 +112,9 @@ def login_as(login_manager):
login_manager.user_fullname = (first_name and first_name or "") + (last_name and " " + last_name or "") login_manager.user_fullname = (first_name and first_name or "") + (last_name and " " + last_name or "")
if hasattr(webnotes.defs, 'validate_ip'):
msg = getattr(webnotes.defs, 'validate_ip')()
if msg: webnotes.msgprint(msg, raise_exception=1)
# alisaing here... so check if the user is disabled # alisaing here... so check if the user is disabled
if not webnotes.conn.sql("select ifnull(enabled,0) from tabProfile where name=%s", user)[0][0]: if not webnotes.conn.sql("select ifnull(enabled,0) from tabProfile where name=%s", user)[0][0]:
# throw execption # throw execption
webnotes.msgprint("Authentication Failed", raise_exception=1) webnotes.msgprint("Authentication Failed", raise_exception=1)
return login_manager return login_manager
#
# update account details
#
def update_account_details():
# additional details (if from gateway)
if webnotes.form_dict.get('is_trial'):
webnotes.conn.set_global('is_trial', cint(webnotes.form_dict.get('is_trial')))
if webnotes.form_dict.get('days_to_expiry'):
webnotes.conn.set_global('days_to_expiry', webnotes.form_dict.get('days_to_expiry'))
if webnotes.form_dict.get('first_name'):
from server_tools.gateway_utils import update_user_details
update_user_details()
if webnotes.form_dict.get('xpassword') and webnotes.form_dict.get('login_as')!='Administrator':
webnotes.conn.sql("""update tabProfile set password=password(%(xpassword)s) where name=%(login_as)s""", (webnotes.form_dict))
if webnotes.form_dict.get('url_name'):
from webnotes.utils import set_default
set_default('account_url', 'http://'+webnotes.form_dict.get('url_name'))
#
# logout the user from SSO
#
def on_logout(login_manager):
import webnotes.defs
if hasattr(webnotes.defs, 'sync_with_gateway') and \
cint(webnotes.defs.sync_with_gateway) or 0:
from server_tools.gateway_utils import logout_sso
logout_sso(user=login_manager.user)

View File

@@ -1,11 +1,11 @@
h1, h2, h3, h4, h5 { h1, h2, h3, h4, h5 {
font-family: "Open Sans", Helvetica, "Helvetica Neue", sans-serif; font-family: "Helvetica Neue", "Open Sans", Helvetica, sans-serif;
font-weight: normal; font-weight: normal;
margin-top: 0.2em; margin-top: 0.2em;
} }
body { body {
font-family: "Open Sans", Helvetica, "Helvetica Neue", sans-serif; font-family: "Helvetica Neue", "Open Sans", Helvetica, sans-serif;
font-size: 13px; font-size: 13px;
} }
@@ -44,26 +44,11 @@ body {
color: #fff; color: #fff;
} }
.navbar-new-comments-true { .navbar-new-comments-true {
color: #fff; color: #fff;
background-color: #B00D07; background-color: #B00D07;
} }
.navbar-icon-home {
vertical-align: middle;
opacity:0.4;
Filter:alpha(opacity=40); /* For IE8 and earlier */
}
.navbar-icon-home:hover,
.navbar-icon-home:focus,
.navbar-icon-home:active,
.navbar-icon-home-hover{
opacity:1;
Filter:alpha(opacity=100); /* For IE8 and earlier */
}
/*extra size menus for recent*/ /*extra size menus for recent*/
.dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{ .dropdown-menu#toolbar-recent, .dropdown-menu#toolbar-options, .dropdown-menu#toolbar-help{
min-width: 160px !important; min-width: 160px !important;

View File

@@ -39,6 +39,7 @@ erpnext.modules = {
} }
erpnext.startup.set_globals = function() { erpnext.startup.set_globals = function() {
wn.control_panel.sync_with_gateway = wn.boot.sync_with_gateway
pscript.is_erpnext_saas = cint(wn.control_panel.sync_with_gateway) pscript.is_erpnext_saas = cint(wn.control_panel.sync_with_gateway)
if(inList(user_roles,'System Manager')) is_system_manager = 1; if(inList(user_roles,'System Manager')) is_system_manager = 1;
} }

View File

@@ -78,10 +78,7 @@ class DocType:
msg = """Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store msg = """Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store
for item: '%s' and warehouse: '%s'""" % \ for item: '%s' and warehouse: '%s'""" % \
(self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse) (self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse)
if getattr(webnotes.defs,'admin_email_notification',1):
sendmail(['developers@iwebnotes.com'], sender='automail@webnotestech.com', \
subject='Serial No Count vs Bin Actual Qty', parts=[['text/plain', msg]])
msgprint(msg, raise_exception=1) msgprint(msg, raise_exception=1)
# -------------------------------- # --------------------------------

View File

@@ -63,12 +63,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
if(doc.per_installed < 100 && doc.docstatus==1) cur_frm.add_custom_button('Make Installation Note', cur_frm.cscript['Make Installation Note']); if(doc.per_installed < 100 && doc.docstatus==1) cur_frm.add_custom_button('Make Installation Note', cur_frm.cscript['Make Installation Note']);
if (doc.docstatus!=1) { if (doc.docstatus==1) cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
hide_field(['Send SMS', 'message', 'customer_mobile_no');
} else {
cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
unhide_field(['Send SMS', 'message', 'customer_mobile_no');
}
if(doc.docstatus==0 && !doc.__islocal) { if(doc.docstatus==0 && !doc.__islocal) {
cur_frm.add_custom_button('Make Packing Slip', cur_frm.cscript['Make Packing Slip']); cur_frm.add_custom_button('Make Packing Slip', cur_frm.cscript['Make Packing Slip']);

View File

@@ -3,9 +3,9 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2009-05-12 16:46:45', 'creation': '2012-04-16 15:08:16',
'docstatus': 0, 'docstatus': 0,
'modified': '2012-04-13 14:12:02', 'modified': '2012-04-16 15:54:45',
'modified_by': u'Administrator', 'modified_by': u'Administrator',
'owner': u'Administrator' 'owner': u'Administrator'
}, },
@@ -41,7 +41,7 @@
'subject': u'%(remarks)s', 'subject': u'%(remarks)s',
'tag_fields': u'purpose', 'tag_fields': u'purpose',
'use_template': 0, 'use_template': 0,
'version': 263 'version': 264
}, },
# These values are common for all DocField # These values are common for all DocField
@@ -69,18 +69,6 @@
'name': u'Stock Entry' 'name': u'Stock Entry'
}, },
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Material User',
'submit': 1,
'write': 1
},
# DocPerm # DocPerm
{ {
'amend': 1, 'amend': 1,
@@ -93,30 +81,6 @@
'write': 1 'write': 1
}, },
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Production User',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Production Manager',
'submit': 1,
'write': 1
},
# DocPerm # DocPerm
{ {
'amend': 0, 'amend': 0,
@@ -124,11 +88,54 @@
'create': 0, 'create': 0,
'doctype': u'DocPerm', 'doctype': u'DocPerm',
'permlevel': 1, 'permlevel': 1,
'role': u'All', 'role': u'Material Manager',
'submit': 0, 'submit': 0,
'write': 0 'write': 0
}, },
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Material User',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Material User',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Production User',
'submit': 1,
'write': 1
},
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Production User'
},
# DocPerm # DocPerm
{ {
'create': 0, 'create': 0,
@@ -138,6 +145,25 @@
'write': 1 'write': 1
}, },
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Production Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'Production Manager'
},
# DocPerm # DocPerm
{ {
'doctype': u'DocPerm', 'doctype': u'DocPerm',
@@ -149,6 +175,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'warehouse_section',
'fieldtype': u'Section Break', 'fieldtype': u'Section Break',
'label': u'Warehouse', 'label': u'Warehouse',
'oldfieldtype': u'Section Break', 'oldfieldtype': u'Section Break',
@@ -158,6 +185,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'col1',
'fieldtype': u'Column Break', 'fieldtype': u'Column Break',
'oldfieldtype': u'Column Break', 'oldfieldtype': u'Column Break',
'permlevel': 0, 'permlevel': 0,
@@ -498,6 +526,7 @@
{ {
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'warehouse_html',
'fieldtype': u'HTML', 'fieldtype': u'HTML',
'label': u'Warehouse HTML', 'label': u'Warehouse HTML',
'no_copy': 0, 'no_copy': 0,
@@ -568,6 +597,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'col2',
'fieldtype': u'Column Break', 'fieldtype': u'Column Break',
'oldfieldtype': u'Column Break', 'oldfieldtype': u'Column Break',
'permlevel': 0, 'permlevel': 0,
@@ -773,6 +803,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'items_section',
'fieldtype': u'Section Break', 'fieldtype': u'Section Break',
'label': u'Items', 'label': u'Items',
'oldfieldtype': u'Section Break', 'oldfieldtype': u'Section Break',
@@ -782,6 +813,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'get_stock_and_rate',
'fieldtype': u'Button', 'fieldtype': u'Button',
'label': u'Get Stock and Rate', 'label': u'Get Stock and Rate',
'oldfieldtype': u'Button', 'oldfieldtype': u'Button',
@@ -793,6 +825,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'col3',
'fieldtype': u'Column Break', 'fieldtype': u'Column Break',
'oldfieldtype': u'Column Break', 'oldfieldtype': u'Column Break',
'permlevel': 0 'permlevel': 0
@@ -803,6 +836,7 @@
'allow_on_submit': 0, 'allow_on_submit': 0,
'colour': u'White:FFF', 'colour': u'White:FFF',
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'get_items',
'fieldtype': u'Button', 'fieldtype': u'Button',
'hidden': 0, 'hidden': 0,
'in_filter': 0, 'in_filter': 0,
@@ -820,6 +854,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'item_section',
'fieldtype': u'Section Break', 'fieldtype': u'Section Break',
'oldfieldtype': u'Section Break', 'oldfieldtype': u'Section Break',
'options': u'Simple', 'options': u'Simple',
@@ -869,6 +904,7 @@
# DocField # DocField
{ {
'doctype': u'DocField', 'doctype': u'DocField',
'fieldname': u'other_details_section',
'fieldtype': u'Section Break', 'fieldtype': u'Section Break',
'label': u'Other Details', 'label': u'Other Details',
'oldfieldtype': u'Section Break', 'oldfieldtype': u'Section Break',

View File

@@ -3,9 +3,9 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2012-04-03 12:49:53', 'creation': '2012-04-16 11:42:44',
'docstatus': 0, 'docstatus': 0,
'modified': '2012-04-03 12:49:53', 'modified': '2012-04-16 16:00:35',
'modified_by': u'Administrator', 'modified_by': u'Administrator',
'owner': u'Administrator' 'owner': u'Administrator'
}, },
@@ -15,13 +15,16 @@
'add_col': u'`tabItem`.`item_name`\n`tabItem`.`description`', 'add_col': u'`tabItem`.`item_name`\n`tabItem`.`description`',
'add_cond': u'`tabItem`.`name` = `tabStock Ledger Entry`.`item_code`', 'add_cond': u'`tabItem`.`name` = `tabStock Ledger Entry`.`item_code`',
'add_tab': u'`tabItem`', 'add_tab': u'`tabItem`',
'columns': u'Stock Ledger Entry\x01Item Code,Stock Ledger Entry\x01Warehouse,Stock Ledger Entry\x01Posting Date,Stock Ledger Entry\x01Voucher Detail No,Stock Ledger Entry\x01Actual Quantity,Stock Ledger Entry\x01Bin Actual Qty After Transaction', 'columns': u'Stock Ledger Entry\x01Item Code,Stock Ledger Entry\x01Warehouse,Stock Ledger Entry\x01Posting Date,Stock Ledger Entry\x01Posting Time,Stock Ledger Entry\x01Actual Quantity,Stock Ledger Entry\x01Bin Actual Qty After Transaction,Stock Ledger Entry\x01Voucher Type,Stock Ledger Entry\x01Voucher No',
'criteria_name': u'Stock Ledger', 'criteria_name': u'Stock Ledger',
'doc_type': u'Stock Ledger Entry', 'doc_type': u'Stock Ledger Entry',
'doctype': 'Search Criteria', 'doctype': 'Search Criteria',
'filters': u"{'Stock Ledger Entry\x01Is Cancelled':'','Stock Ledger Entry\x01Is Stock Entry':''}", 'filters': u'{"Stock Ledger Entry\\u0001Warehouse Type":[""],"Stock Ledger Entry\\u0001Company":[""],"Stock Ledger Entry\\u0001Is Cancelled":[""],"Stock Ledger Entry\\u0001Is Stock Entry":[""]}',
'module': u'Stock', 'module': u'Stock',
'name': '__common__', 'name': '__common__',
'page_len': 50,
'sort_by': u'`tabStock Ledger Entry`.`item_code`',
'sort_order': u'DESC',
'standard': u'Yes' 'standard': u'Yes'
}, },

View File

@@ -1,213 +0,0 @@
# DocType, ToDo
[
# These values are common in all dictionaries
{
'creation': '2012-03-27 14:36:47',
'docstatus': 0,
'modified': '2012-03-27 14:36:47',
'modified_by': u'Administrator',
'owner': u'Administrator'
},
# These values are common for all DocType
{
'allow_attach': 0,
'allow_copy': 0,
'allow_email': 0,
'allow_print': 0,
'allow_rename': 0,
'allow_trash': 0,
'autoname': u'TDI.########',
'colour': u'White:FFF',
'doctype': 'DocType',
'hide_heading': 0,
'hide_toolbar': 0,
'in_create': 1,
'in_dialog': 0,
'is_transaction_doc': 0,
'issingle': 0,
'max_attachments': 0,
'module': u'Utilities',
'name': '__common__',
'read_only': 1,
'read_only_onload': 0,
'section_style': u'Simple',
'server_code_error': u' ',
'show_in_menu': 0,
'use_template': 0,
'version': 5
},
# These values are common for all DocField
{
'doctype': u'DocField',
'name': '__common__',
'parent': u'ToDo',
'parentfield': u'fields',
'parenttype': u'DocType',
'permlevel': 0
},
# These values are common for all DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'name': '__common__',
'parent': u'ToDo',
'parentfield': u'permissions',
'parenttype': u'DocType',
'permlevel': 0,
'read': 1,
'role': u'All',
'write': 1
},
# DocType, ToDo
{
'doctype': 'DocType',
'name': u'ToDo'
},
# DocPerm
{
'doctype': u'DocPerm'
},
# DocField
{
'allow_on_submit': 0,
'doctype': u'DocField',
'fieldname': u'description',
'fieldtype': u'Text',
'hidden': 0,
'in_filter': 0,
'label': u'Description',
'no_copy': 0,
'oldfieldname': u'description',
'oldfieldtype': u'Text',
'print_hide': 0,
'report_hide': 0,
'reqd': 0,
'search_index': 0,
'width': u'300px'
},
# DocField
{
'allow_on_submit': 0,
'doctype': u'DocField',
'fieldname': u'date',
'fieldtype': u'Date',
'hidden': 0,
'in_filter': 0,
'label': u'Date',
'no_copy': 0,
'oldfieldname': u'date',
'oldfieldtype': u'Date',
'print_hide': 0,
'report_hide': 0,
'reqd': 0,
'search_index': 0
},
# DocField
{
'allow_on_submit': 0,
'doctype': u'DocField',
'fieldname': u'priority',
'fieldtype': u'Data',
'hidden': 0,
'in_filter': 0,
'label': u'Priority',
'no_copy': 0,
'oldfieldname': u'priority',
'oldfieldtype': u'Data',
'print_hide': 0,
'report_hide': 0,
'reqd': 0,
'search_index': 0
},
# DocField
{
'allow_on_submit': 0,
'doctype': u'DocField',
'fieldname': u'reference_type',
'fieldtype': u'Data',
'hidden': 0,
'in_filter': 0,
'label': u'Reference Type',
'no_copy': 0,
'oldfieldname': u'reference_type',
'oldfieldtype': u'Data',
'print_hide': 0,
'report_hide': 0,
'reqd': 0,
'search_index': 0
},
# DocField
{
'allow_on_submit': 0,
'doctype': u'DocField',
'fieldname': u'reference_name',
'fieldtype': u'Data',
'hidden': 0,
'in_filter': 0,
'label': u'Reference Name',
'no_copy': 0,
'oldfieldname': u'reference_name',
'oldfieldtype': u'Data',
'print_hide': 0,
'report_hide': 0,
'reqd': 0,
'search_index': 0
},
# DocField
{
'allow_on_submit': 0,
'doctype': u'DocField',
'fieldname': u'checked',
'fieldtype': u'Check',
'hidden': 0,
'in_filter': 0,
'label': u'Checked',
'no_copy': 0,
'oldfieldname': u'checked',
'oldfieldtype': u'Check',
'print_hide': 0,
'report_hide': 0,
'reqd': 0,
'search_index': 0
},
# DocField
{
'allow_on_submit': 0,
'doctype': u'DocField',
'fieldname': u'role',
'fieldtype': u'Link',
'hidden': 0,
'in_filter': 0,
'label': u'Role',
'no_copy': 0,
'oldfieldname': u'role',
'oldfieldtype': u'Link',
'options': u'Role',
'print_hide': 0,
'report_hide': 0,
'reqd': 0,
'search_index': 0
},
# DocField
{
'doctype': u'DocField',
'fieldname': u'assigned_by',
'fieldtype': u'Link',
'label': u'Assigned By',
'options': u'Profile'
}
]

View File

@@ -83,15 +83,7 @@ def update_security(args=''):
webnotes.conn.set_value('Profile', args['user'], 'enabled', int(args.get('enabled',0)) or 0) webnotes.conn.set_value('Profile', args['user'], 'enabled', int(args.get('enabled',0)) or 0)
if args.get('new_password') and args.get('sys_admin_pwd'): if args.get('new_password') and args.get('sys_admin_pwd'):
import webnotes.defs
from webnotes.utils import cint from webnotes.utils import cint
if hasattr(webnotes.defs, 'sync_with_gateway') and \
cint(webnotes.defs.sync_with_gateway) or 0:
import server_tools.gateway_utils
res = server_tools.gateway_utils.change_password('', args['new_password'],
args['user'], args['sys_admin_pwd'])
if 'Traceback' not in res['message']:
webnotes.msgprint(res['message'])
webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s", webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s",
(args['new_password'], args['user'])) (args['new_password'], args['user']))
else: else:
@@ -106,14 +98,6 @@ def update_security(args=''):
@webnotes.whitelist() @webnotes.whitelist()
def add_user(args): def add_user(args):
args = json.loads(args) args = json.loads(args)
# erpnext-saas
import webnotes.defs
from webnotes.utils import cint
if hasattr(webnotes.defs, 'sync_with_gateway') and \
cint(webnotes.defs.sync_with_gateway) or 0:
from server_tools.gateway_utils import add_user_gateway
add_user_gateway(args)
add_profile(args) add_profile(args)
@webnotes.whitelist() @webnotes.whitelist()
@@ -174,14 +158,6 @@ def delete(arg=None):
"""delete user""" """delete user"""
webnotes.conn.sql("update tabProfile set enabled=0, docstatus=2 where name=%s", webnotes.conn.sql("update tabProfile set enabled=0, docstatus=2 where name=%s",
webnotes.form_dict['uid']) webnotes.form_dict['uid'])
# erpnext-saas
import webnotes.defs
from webnotes.utils import cint
if hasattr(webnotes.defs, 'sync_with_gateway') and \
cint(webnotes.defs.sync_with_gateway) or 0:
from server_tools.gateway_utils import remove_user_gateway
remove_user_gateway(webnotes.form_dict['uid'])
webnotes.login_manager.logout(user=webnotes.form_dict['uid']) webnotes.login_manager.logout(user=webnotes.form_dict['uid'])
welcome_txt = """ welcome_txt = """

View File

@@ -3,9 +3,9 @@
# These values are common in all dictionaries # These values are common in all dictionaries
{ {
'creation': '2012-03-27 14:36:48', 'creation': '2012-04-02 16:02:43',
'docstatus': 0, 'docstatus': 0,
'modified': '2012-03-27 14:36:48', 'modified': '2012-04-16 13:36:48',
'modified_by': u'Administrator', 'modified_by': u'Administrator',
'owner': u'Administrator' 'owner': u'Administrator'
}, },
@@ -23,7 +23,7 @@
'name': '__common__', 'name': '__common__',
'section_style': u'Simple', 'section_style': u'Simple',
'show_in_menu': 0, 'show_in_menu': 0,
'version': 18 'version': 19
}, },
# These values are common for all DocField # These values are common for all DocField
@@ -95,7 +95,7 @@
'fieldname': u'font', 'fieldname': u'font',
'fieldtype': u'Select', 'fieldtype': u'Select',
'label': u'Font', 'label': u'Font',
'options': u'\nLucida Grande\nVerdana\nArial\nGeorgia\nTahoma\nLato\nOpen Sans', 'options': u'\nHelvetica Neue\nLucida Grande\nVerdana\nArial\nGeorgia\nTahoma\nLato\nOpen Sans',
'permlevel': 0 'permlevel': 0
}, },
@@ -115,7 +115,7 @@
'fieldname': u'heading_font', 'fieldname': u'heading_font',
'fieldtype': u'Select', 'fieldtype': u'Select',
'label': u'Heading Font', 'label': u'Heading Font',
'options': u'\nLucida Grande\nVerdana\nArial\nGeorgia\nTahoma\nLato\nOpen Sans', 'options': u'\nHelvetica Neue\nLucida Grande\nVerdana\nArial\nGeorgia\nTahoma\nLato\nOpen Sans',
'permlevel': 0 'permlevel': 0
}, },
@@ -153,4 +153,4 @@
'permlevel': 0, 'permlevel': 0,
'print_hide': 1 'print_hide': 1
} }
] ]

View File

@@ -1,33 +1,42 @@
#!/usr/bin/python #!/usr/bin/env python
# ERPNext - web based ERP (http://erpnext.com) # Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com)
# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
# #
# This program is free software: you can redistribute it and/or modify # MIT License (MIT)
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # Permission is hereby granted, free of charge, to any person obtaining a
# but WITHOUT ANY WARRANTY; without even the implied warranty of # copy of this software and associated documentation files (the "Software"),
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # to deal in the Software without restriction, including without limitation
# GNU General Public License for more details. # the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# #
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import cgi, cgitb, os, sys import cgi, cgitb, os, sys
cgitb.enable() cgitb.enable()
# import libs # import libs
sys.path.append('.')
import conf
sys.path.append('lib/py') sys.path.append('lib/py')
sys.path.append('erpnext') sys.path.append(conf.modules_path)
import webnotes import webnotes
import webnotes.handler import webnotes.handler
import webnotes.auth import webnotes.auth
import webnotes.defs
def init(): def init():
# make the form_dict # make the form_dict
@@ -42,7 +51,7 @@ def init():
except webnotes.AuthenticationError, e: except webnotes.AuthenticationError, e:
return True return True
except webnotes.UnknownDomainError, e: except webnotes.UnknownDomainError, e:
print "Location: " + (webnotes.defs.redirect_404) print "Location: " + (conf.redirect_404)
except webnotes.SessionStopped, e: except webnotes.SessionStopped, e:
if 'cmd' in webnotes.form_dict: if 'cmd' in webnotes.form_dict:
webnotes.handler.print_json() webnotes.handler.print_json()

View File

@@ -188,7 +188,7 @@ $(ele).css('-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')}
/* /*
* lib/js/wn/model.js * lib/js/wn/model.js
*/ */
wn.provide('wn.model');wn.model={no_value_type:['Section Break','Column Break','HTML','Table','Button','Image'],new_names:{},with_doctype:function(doctype,callback){if(locals.DocType[doctype]){callback();}else{wn.call({method:'webnotes.widgets.form.load.getdoctype',args:{doctype:doctype},callback:callback});}},with_doc:function(doctype,name,callback){if(!name)name=doctype;if(locals[doctype]&&locals[doctype][name]){callback(name);}else{if(name&&name.indexOf('New '+doctype)!=-1){name=LocalDB.create(doctype);callback(name);}else{wn.call({method:'webnotes.widgets.form.load.getdoc',args:{doctype:doctype,name:name},callback:function(r){callback(name);}});}}},can_delete:function(doctype){if(!doctype)return false;return locals.DocType[doctype].allow_trash&&wn.boot.profile.can_cancel.indexOf(doctype)!=-1;}} wn.provide('wn.model');wn.model={no_value_type:['Section Break','Column Break','HTML','Table','Button','Image'],new_names:{},with_doctype:function(doctype,callback){if(locals.DocType[doctype]){callback();}else{wn.call({method:'webnotes.widgets.form.load.getdoctype',args:{doctype:doctype},callback:callback});}},with_doc:function(doctype,name,callback){if(!name)name=doctype;if(locals[doctype]&&locals[doctype][name]){callback(name);}else{wn.call({method:'webnotes.widgets.form.load.getdoc',args:{doctype:doctype,name:name},callback:function(r){callback(name);}});}},can_delete:function(doctype){if(!doctype)return false;return locals.DocType[doctype].allow_trash&&wn.boot.profile.can_cancel.indexOf(doctype)!=-1;}}
/* /*
* lib/js/wn/misc/tools.js * lib/js/wn/misc/tools.js
*/ */
@@ -236,11 +236,13 @@ throw new SyntaxError('JSON.parse');};}}());
/* /*
* lib/js/wn/router.js * lib/js/wn/router.js
*/ */
wn.route=function(){wn._cur_route=window.location.hash;route=wn.get_route();switch(route[0]){case"List":wn.views.doclistview.show(route[1]);break;case"Form":if(route.length>3){route[2]=route.splice(2).join('/');} wn.re_route={}
wn.route=function(){if(wn.re_route[window.location.hash]){window.location.hash=wn.re_route[window.location.hash];}
wn._cur_route=window.location.hash;route=wn.get_route();switch(route[0]){case"List":wn.views.doclistview.show(route[1]);break;case"Form":if(route.length>3){route[2]=route.splice(2).join('/');}
wn.views.formview.show(route[1],route[2]);break;case"Report":wn.views.reportview.show(route[1],route[2]);break;default:wn.views.pageview.show(route[0]);}} wn.views.formview.show(route[1],route[2]);break;case"Report":wn.views.reportview.show(route[1],route[2]);break;default:wn.views.pageview.show(route[0]);}}
wn.get_route=function(route){if(!route) wn.get_route=function(route){if(!route)
route=window.location.hash;if(route.substr(0,1)=='#')route=route.substr(1);if(route.substr(0,1)=='!')route=route.substr(1);return $.map(route.split('/'),function(r){return decodeURIComponent(r);});} route=window.location.hash;if(route.substr(0,1)=='#')route=route.substr(1);if(route.substr(0,1)=='!')route=route.substr(1);return $.map(route.split('/'),function(r){return decodeURIComponent(r);});}
wn.set_route=function(){route=$.map(arguments,function(a){return encodeURIComponent(a)}).join('/');window.location.hash=route;set_favicon();} wn.set_route=function(){route=$.map(arguments,function(a){return encodeURIComponent(a)}).join('/');window.location.hash=route;wn.app.set_favicon();}
wn._cur_route=null;$(window).bind('hashchange',function(){if(location.hash==wn._cur_route) wn._cur_route=null;$(window).bind('hashchange',function(){if(location.hash==wn._cur_route)
return;wn.route();if(wn.boot.analytics_code){try{eval(wn.boot.analytics_code);}catch(e){console.log(e);}}}); return;wn.route();if(wn.boot.analytics_code){try{eval(wn.boot.analytics_code);}catch(e){console.log(e);}}});
/* /*
@@ -262,7 +264,7 @@ this.prepare_opts();$.extend(this,this.opts);$(this.parent).html(repl('\
</div>\ </div>\
</div>\ </div>\
\ \
<div style="height: 37px; margin-bottom:9px" class="list-toolbar-wrapper">\ <div style="margin-bottom:9px" class="list-toolbar-wrapper">\
<div class="list-toolbar" style="display:inline-block; margin-right: 10px;">\ <div class="list-toolbar" style="display:inline-block; margin-right: 10px;">\
</div>\ </div>\
<div style="display:inline-block; width: 24px; margin-left: 4px">\ <div style="display:inline-block; width: 24px; margin-left: 4px">\
@@ -288,15 +290,16 @@ if(this.show_filters){this.make_filters();}},add_button:function(label,click,ico
if(icon){$('<i>').addClass(icon).appendTo($button);} if(icon){$('<i>').addClass(icon).appendTo($button);}
$button.html(label).click(click);return $button}},show_view:function($btn,$div,$btn_unsel,$div_unsel){$btn_unsel.removeClass('btn-info');$btn_unsel.find('i').removeClass('icon-white');$div_unsel.toggle(false);$btn.addClass('btn-info');$btn.find('i').addClass('icon-white');$div.toggle(true);},set_events:function(){var me=this;this.$w.find('.btn-more').click(function(){me.run({append:true});});if(this.title){this.$w.find('h3').html(this.title).toggle(true);} $button.html(label).click(click);return $button}},show_view:function($btn,$div,$btn_unsel,$div_unsel){$btn_unsel.removeClass('btn-info');$btn_unsel.find('i').removeClass('icon-white');$div_unsel.toggle(false);$btn.addClass('btn-info');$btn.find('i').addClass('icon-white');$div.toggle(true);},set_events:function(){var me=this;this.$w.find('.btn-more').click(function(){me.run({append:true});});if(this.title){this.$w.find('h3').html(this.title).toggle(true);}
if(!(this.hide_refresh||this.no_refresh)){this.add_button('Refresh',function(){me.run();},'icon-refresh');} if(!(this.hide_refresh||this.no_refresh)){this.add_button('Refresh',function(){me.run();},'icon-refresh');}
if(this.new_doctype){this.add_button('New '+this.new_doctype,function(){newdoc(me.new_doctype)},'icon-plus');} if(this.new_doctype){this.add_button('New '+this.new_doctype,function(){wn.views.formview.create(me.new_doctype)},'icon-plus');}
if(me.show_filters){this.add_button('Show Filters',function(){me.filter_list.show_filters();},'icon-search').addClass('btn-filter');}},make_filters:function(){this.filter_list=new wn.ui.FilterList({listobj:this,$parent:this.$w.find('.list-filters').toggle(true),doctype:this.doctype,filter_fields:this.filter_fields});},clear:function(){this.data=[];this.$w.find('.result-list').empty();this.$w.find('.result').toggle(true);this.$w.find('.no-result').toggle(false);this.start=0;},run:function(){var me=this;var a0=arguments[0];var a1=arguments[1];if(a0&&typeof a0=='function') if(me.show_filters){this.add_button('Show Filters',function(){me.filter_list.show_filters();},'icon-search').addClass('btn-filter');}
if(me.no_toolbar||me.hide_toolbar){me.$w.find('.list-toolbar-wrapper').toggle(false);}},make_filters:function(){this.filter_list=new wn.ui.FilterList({listobj:this,$parent:this.$w.find('.list-filters').toggle(true),doctype:this.doctype,filter_fields:this.filter_fields});},clear:function(){this.data=[];this.$w.find('.result-list').empty();this.$w.find('.result').toggle(true);this.$w.find('.no-result').toggle(false);this.start=0;},run:function(){var me=this;var a0=arguments[0];var a1=arguments[1];if(a0&&typeof a0=='function')
this.onrun=a0;if(a0&&a0.callback) this.onrun=a0;if(a0&&a0.callback)
this.onrun=a0.callback;if(!a1&&!(a0&&a0.append)) this.onrun=a0.callback;if(!a1&&!(a0&&a0.append))
this.start=0;me.set_working(true);wn.call({method:this.opts.method||'webnotes.widgets.query_builder.runquery',args:this.get_call_args(),callback:function(r){me.set_working(false);me.render_results(r)},no_spinner:this.opts.no_loading});},set_working:function(flag){this.$w.find('.img-load').toggle(flag);},get_call_args:function(){if(!this.method){this.query=this.get_query?this.get_query():this.query;this.add_limits();var args={query_max:this.query_max,as_dict:1} this.start=0;me.set_working(true);wn.call({method:this.opts.method||'webnotes.widgets.query_builder.runquery',args:this.get_call_args(a0),callback:function(r){me.set_working(false);me.render_results(r)},no_spinner:this.opts.no_loading});},set_working:function(flag){this.$w.find('.img-load').toggle(flag);},get_call_args:function(opts){if(!this.method){this.query=this.get_query?this.get_query():this.query;this.add_limits();var args={query_max:this.query_max,as_dict:1}
args.simple_query=this.query;}else{var args={limit_start:this.start,limit_page_length:this.page_length}} args.simple_query=this.query;}else{var args={limit_start:this.start,limit_page_length:this.page_length}}
if(this.args) if(this.args)
$.extend(args,this.args) $.extend(args,this.args)
if(this.get_args){$.extend(args,this.get_args());} if(this.get_args){$.extend(args,this.get_args(opts));}
return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}} return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}}
if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);} if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);}
this.start+=m;if(values.length>=this.page_length) this.start+=m;if(values.length>=this.page_length)
@@ -352,7 +355,7 @@ wn.views.add_list_btn=function(parent,doctype){$(parent).append(repl('<span clas
/* /*
* lib/js/wn/views/doclistview.js * lib/js/wn/views/doclistview.js
*/ */
wn.provide('wn.views.doclistview');wn.provide('wn.doclistviews');wn.views.doclistview.pages={};wn.views.doclistview.show=function(doctype){var pagename=doctype+' List';var doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(){var page=wn.views.doclistview.pages[pagename];if(!page){var page=wn.container.add_page(pagename);page.doclistview=new wn.views.DocListView(doctype,page);wn.views.doclistview.pages[pagename]=page;} wn.provide('wn.views.doclistview');wn.provide('wn.doclistviews');wn.views.doclistview.pages={};wn.views.doclistview.show=function(doctype){var pagename=doctype+' List';var doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(r){if(r&&r['403'])return;var page=wn.views.doclistview.pages[pagename];if(!page){var page=wn.container.add_page(pagename);page.doclistview=new wn.views.DocListView(doctype,page);wn.views.doclistview.pages[pagename]=page;}
document.title=page.doclistview.label;wn.container.change_to(pagename);})} document.title=page.doclistview.label;wn.container.change_to(pagename);})}
wn.views.DocListView=wn.ui.Listing.extend({init:function(doctype,page){this.doctype=doctype;this.$page=$(page);this.label=get_doctype_label(doctype);this.label=(this.label.toLowerCase().substr(-4)=='list')?this.label:(this.label+' List');this.make_page();this.setup();},make_page:function(){var me=this;this.$page.html(repl('<div class="layout-wrapper layout-wrapper-background">\ wn.views.DocListView=wn.ui.Listing.extend({init:function(doctype,page){this.doctype=doctype;this.$page=$(page);this.label=get_doctype_label(doctype);this.label=(this.label.toLowerCase().substr(-4)=='list')?this.label:(this.label+' List');this.make_page();this.setup();},make_page:function(){var me=this;this.$page.html(repl('<div class="layout-wrapper layout-wrapper-background">\
<div class="appframe-area"></div>\ <div class="appframe-area"></div>\
@@ -424,21 +427,30 @@ if(data.docstatus==0||data.docstatus==null){data.docstatus_icon='icon-pencil';da
/* /*
* lib/js/wn/views/pageview.js * lib/js/wn/views/pageview.js
*/ */
wn.provide('wn.views.pageview');wn.views.pageview={pages:{},with_page:function(name,callback){if(!locals.Page[name]){wn.call({method:'webnotes.widgets.page.getpage',args:{'name':name},callback:callback});}else{callback();}},show:function(name){wn.views.pageview.with_page(name,function(){if(!wn.pages[name]){wn.views.pageview.pages[name]=new wn.views.Page(name);} wn.provide('wn.views.pageview');wn.views.pageview={pages:{},with_page:function(name,callback){if(!locals.Page[name]){wn.call({method:'webnotes.widgets.page.getpage',args:{'name':name},callback:callback});}else{callback();}},show:function(name){if(!name)name=wn.boot.home_page;wn.views.pageview.with_page(name,function(r){if(r&&r.exc){if(!r['403'])wn.container.change_to('404');}else if(!wn.pages[name]){wn.views.pageview.pages[name]=new wn.views.Page(name);}
wn.container.change_to(name);});}} wn.container.change_to(name);});}}
wn.views.Page=Class.extend({init:function(name){this.name=name;var me=this;this.pagedoc=locals.Page[this.name];this.wrapper=wn.container.add_page(this.name);this.wrapper.label=this.pagedoc.title||this.pagedoc.name;this.wrapper.innerHTML=this.pagedoc.content;wn.dom.eval(this.pagedoc.__script||this.pagedoc.script||'');wn.dom.set_style(this.pagedoc.style);this.trigger('onload');$(this.wrapper).bind('show',function(){cur_frm=null;me.trigger('onshow');me.trigger('refresh');});},trigger:function(eventname){var me=this;try{if(pscript[eventname+'_'+this.name]){pscript[eventname+'_'+this.name](me.wrapper);}else if(me.wrapper[eventname]){me.wrapper[eventname](me.wrapper);}}catch(e){console.log(e);}}}) wn.views.Page=Class.extend({init:function(name){this.name=name;var me=this;this.pagedoc=locals.Page[this.name];this.wrapper=wn.container.add_page(this.name);this.wrapper.label=this.pagedoc.title||this.pagedoc.name;this.wrapper.innerHTML=this.pagedoc.content;wn.dom.eval(this.pagedoc.__script||this.pagedoc.script||'');wn.dom.set_style(this.pagedoc.style);this.trigger('onload');$(this.wrapper).bind('show',function(){cur_frm=null;me.trigger('onshow');me.trigger('refresh');});},trigger:function(eventname){var me=this;try{if(pscript[eventname+'_'+this.name]){pscript[eventname+'_'+this.name](me.wrapper);}else if(me.wrapper[eventname]){me.wrapper[eventname](me.wrapper);}}catch(e){console.log(e);}}})
wn.views.make_404=function(){var page=wn.container.add_page('404');$(page).html('<div class="layout-wrapper">\
<h1>Not Found</h1><br>\
<p>Sorry we were unable to find what you were looking for.</p>\
<p><a href="#">Go back to home</a></p>\
</div>').toggle(false);};wn.views.make_403=function(){var page=wn.container.add_page('403');$(page).html('<div class="layout-wrapper">\
<h1>Not Permitted</h1><br>\
<p>Sorry you are not permitted to view this page.</p>\
<p><a href="#">Go back to home</a></p>\
</div>').toggle(false);};
/* /*
* lib/js/wn/views/formview.js * lib/js/wn/views/formview.js
*/ */
wn.provide('wn.views.formview');wn.views.formview={show:function(dt,dn){if(wn.model.new_names[dn]) wn.provide('wn.views.formview');wn.views.formview={show:function(dt,dn){if(wn.model.new_names[dn])
dn=wn.model.new_names[dn];wn.model.with_doctype(dt,function(){wn.model.with_doc(dt,dn,function(dn){if(!wn.views.formview[dt]){wn.views.formview[dt]=wn.container.add_page('Form - '+dt);wn.views.formview[dt].frm=new _f.Frm(dt,wn.views.formview[dt]);} dn=wn.model.new_names[dn];wn.model.with_doctype(dt,function(){wn.model.with_doc(dt,dn,function(dn){if(!(locals[dt]&&locals[dt][dn])){wn.container.change_to('404');return;}
wn.container.change_to('Form - '+dt);wn.views.formview[dt].frm.refresh(dn);});})}} if(!wn.views.formview[dt]){wn.views.formview[dt]=wn.container.add_page('Form - '+dt);wn.views.formview[dt].frm=new _f.Frm(dt,wn.views.formview[dt]);}
wn.container.change_to('Form - '+dt);wn.views.formview[dt].frm.refresh(dn);});})},create:function(dt){var new_name=LocalDB.create(dt);wn.set_route('Form',dt,new_name);}}
/* /*
* lib/js/wn/views/reportview.js * lib/js/wn/views/reportview.js
*/ */
wn.views.reportview={show:function(dt,rep_name){wn.require('lib/js/legacy/report.compressed.js');dt=get_label_doctype(dt);if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();} wn.views.reportview={show:function(dt,rep_name){wn.require('lib/js/legacy/report.compressed.js');dt=get_label_doctype(dt);if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();}
_r.rb_con.set_dt(dt,function(rb){if(rep_name){var t=rb.current_loaded;rb.load_criteria(rep_name);if(onload) _r.rb_con.set_dt(dt,function(rb){if(rep_name){var t=rb.current_loaded;rb.load_criteria(rep_name);if((rb.dt)&&(!rb.dt.has_data()||rb.current_loaded!=t))
onload(rb);if((rb.dt)&&(!rb.dt.has_data()||rb.current_loaded!=t))
rb.dt.run();} rb.dt.run();}
if(!rb.forbidden){wn.container.change_to('Report Builder');}});}} if(!rb.forbidden){wn.container.change_to('Report Builder');}});}}
/* /*
@@ -446,9 +458,10 @@ if(!rb.forbidden){wn.container.change_to('Report Builder');}});}}
*/ */
wn.provide('wn.request');wn.request.url='index.cgi';wn.request.prepare=function(opts){if(opts.btn)$(opts.btn).set_working();if(opts.show_spinner)set_loading();if(opts.freeze)freeze();if(!opts.args.cmd){console.log(opts) wn.provide('wn.request');wn.request.url='index.cgi';wn.request.prepare=function(opts){if(opts.btn)$(opts.btn).set_working();if(opts.show_spinner)set_loading();if(opts.freeze)freeze();if(!opts.args.cmd){console.log(opts)
throw"Incomplete Request";}} throw"Incomplete Request";}}
wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(opts.show_spinner)hide_loading();if(opts.freeze)unfreeze();if(wn.boot.sid&&wn.get_cookie('sid')!=wn.boot.sid){msgprint('Session expired');setTimeout('redirect_to_login()',3000);return;} wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(opts.show_spinner)hide_loading();if(opts.freeze)unfreeze();if(wn.boot.sid&&wn.get_cookie('sid')!=wn.boot.sid){msgprint('Session expired');setTimeout('wn.app.redirect_to_login()',3000);return;}
if(r.server_messages)msgprint(r.server_messages) if(r.server_messages)msgprint(r.server_messages)
if(r.exc){errprint(r.exc);console.log(r.exc);};if(r.docs)LocalDB.sync(r.docs);} if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
if(r.docs)LocalDB.sync(r.docs);}
wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus) wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
if(opts.error)opts.error(xhr)}})} if(opts.error)opts.error(xhr)}})}
wn.call=function(opts){var args=$.extend({},opts.args) wn.call=function(opts){var args=$.extend({},opts.args)
@@ -458,14 +471,14 @@ wn.request.call({args:args,success:opts.callback,error:opts.error,btn:opts.btn,f
/* /*
* lib/js/core.js * lib/js/core.js
*/ */
if(!console){var console={log:function(txt){errprint(txt);}}} if(!console){var console={log:function(txt){alert(txt);}}}
wn.versions.check();$(document).bind('ready',function(){var base=window.location.href.split('#')[0];$.each($('a[softlink!="false"]'),function(i,v){if(v.href.substr(0,base.length)==base){var path=(v.href.substr(base.length));if(path.substr(0,1)!='#'){v.href=base+'#'+path;}}});if(!wn.settings.no_history&&window.location.hash){wn.page.set(window.location.hash.substr(1));}}); wn.versions.check();$(document).bind('ready',function(){wn.app=new wn.Application();});
/* /*
* lib/js/legacy/globals.js * lib/js/legacy/globals.js
*/ */
wn.provide('wn.widgets.form');wn.provide('wn.widgets.report');wn.provide('wn.utils');wn.provide('wn.model');wn.provide('wn.profile');wn.provide('wn.session');wn.provide('_f');wn.provide('_p');wn.provide('_r');wn.provide('_c');wn.provide('_e');wn.provide('_startup_data') wn.provide('wn.widgets.form');wn.provide('wn.widgets.report');wn.provide('wn.utils');wn.provide('wn.model');wn.provide('wn.profile');wn.provide('wn.session');wn.provide('_f');wn.provide('_p');wn.provide('_r');wn.provide('_c');wn.provide('_e');wn.provide('_startup_data')
wn.settings.no_history=1;var NEWLINE='\n';var login_file='';var version='v170';var profile=null;var session={};var is_testing=false;var user=null;var user_defaults=null;var user_roles=null;var user_fullname=null;var user_email=null;var user_img={};var home_page=null;var pscript={};var selector=null;var top_index=91;var _f={};var _p={};var _e={};var _r={};var FILTER_SEP='\1';var frms={};var cur_frm=null;var pscript={};var validated=true;var validation_message='';var tinymce_loaded=null; wn.settings.no_history=1;var NEWLINE='\n';var profile=null;var user=null;var user_defaults=null;var user_roles=null;var user_fullname=null;var user_email=null;var user_img={};var pscript={};var selector=null;var top_index=91;var _f={};var _p={};var _e={};var _r={};var FILTER_SEP='\1';var frms={};var cur_frm=null;var pscript={};var validated=true;var validation_message='';var tinymce_loaded=null;
/* /*
* lib/js/legacy/utils/datatype.js * lib/js/legacy/utils/datatype.js
*/ */
@@ -677,7 +690,8 @@ var t=make_table(msg_dialog.rows['Msg'],1,2,'100%',['20px','250px'],{padding:'2p
if(!msg_dialog.display)msg_dialog.show();var has_msg=msg_dialog.msg_area.innerHTML?1:0;var m=$a(msg_dialog.msg_area,'div','');if(has_msg)$y(m,{marginTop:'4px'});$dh(msg_dialog.msg_icon);if(msg.substr(0,6).toLowerCase()=='error:'){msg_dialog.msg_icon.src='lib/images/icons/error.gif';$di(msg_dialog.msg_icon);msg=msg.substr(6);}else if(msg.substr(0,8).toLowerCase()=='message:'){msg_dialog.msg_icon.src='lib/images/icons/application.gif';$di(msg_dialog.msg_icon);msg=msg.substr(8);}else if(msg.substr(0,3).toLowerCase()=='ok:'){msg_dialog.msg_icon.src='lib/images/icons/accept.gif';$di(msg_dialog.msg_icon);msg=msg.substr(3);} if(!msg_dialog.display)msg_dialog.show();var has_msg=msg_dialog.msg_area.innerHTML?1:0;var m=$a(msg_dialog.msg_area,'div','');if(has_msg)$y(m,{marginTop:'4px'});$dh(msg_dialog.msg_icon);if(msg.substr(0,6).toLowerCase()=='error:'){msg_dialog.msg_icon.src='lib/images/icons/error.gif';$di(msg_dialog.msg_icon);msg=msg.substr(6);}else if(msg.substr(0,8).toLowerCase()=='message:'){msg_dialog.msg_icon.src='lib/images/icons/application.gif';$di(msg_dialog.msg_icon);msg=msg.substr(8);}else if(msg.substr(0,3).toLowerCase()=='ok:'){msg_dialog.msg_icon.src='lib/images/icons/accept.gif';$di(msg_dialog.msg_icon);msg=msg.substr(3);}
m.innerHTML=replace_newlines(msg);if(m.offsetHeight>200){$y(m,{height:'200px',width:'400px',overflow:'auto'})} m.innerHTML=replace_newlines(msg);if(m.offsetHeight>200){$y(m,{height:'200px',width:'400px',overflow:'auto'})}
msg_dialog.custom_onhide=callback;} msg_dialog.custom_onhide=callback;}
var growl_area;function show_alert(txt,id){if(!growl_area){growl_area=$a(popup_cont,'div','',{position:'fixed',bottom:'8px',right:'8px',width:'320px',zIndex:10});} var growl_area;function show_alert(txt,id){if(!growl_area){if(!$('#dialog-container').length){$('<div id="dialog-container">').appendTo('body');}
growl_area=$a($i('dialog-container'),'div','',{position:'fixed',bottom:'8px',right:'8px',width:'320px',zIndex:10});}
var wrapper=$a(growl_area,'div','',{position:'relative'});var body=$a(wrapper,'div','notice');var c=$a(body,'i','icon-remove-sign',{cssFloat:'right',cursor:'pointer'});$(c).click(function(){$dh(this.wrapper)});c.wrapper=wrapper;var t=$a(body,'div','',{color:'#FFF'});$(t).html(txt);if(id){$(t).attr('id',id);} var wrapper=$a(growl_area,'div','',{position:'relative'});var body=$a(wrapper,'div','notice');var c=$a(body,'i','icon-remove-sign',{cssFloat:'right',cursor:'pointer'});$(c).click(function(){$dh(this.wrapper)});c.wrapper=wrapper;var t=$a(body,'div','',{color:'#FFF'});$(t).html(txt);if(id){$(t).attr('id',id);}
$(wrapper).hide().fadeIn(1000);} $(wrapper).hide().fadeIn(1000);}
/* /*
@@ -913,14 +927,15 @@ if(f.init)f.init();f.make_body();return f;}
wn.ui.AppFrame=Class.extend({init:function(parent){this.buttons={};this.$w=$('<div></div>').appendTo(parent);this.$titlebar=$('<div class="appframe-titlebar">\ wn.ui.AppFrame=Class.extend({init:function(parent){this.buttons={};this.$w=$('<div></div>').appendTo(parent);this.$titlebar=$('<div class="appframe-titlebar">\
<span class="appframe-title"></span>\ <span class="appframe-title"></span>\
<span class="close">&times;</span>\ <span class="close">&times;</span>\
</div>').appendTo(this.$w);this.$w.find('.close').click(function(){window.history.back();})},add_button:function(label,click,icon){if(!this.$w.find('.appframe-toolbar').length) </div>').appendTo(this.$w);this.$w.find('.close').click(function(){window.history.back();})},title:function(txt){this.$titlebar.find('.appframe-title').text(txt);},add_button:function(label,click,icon){if(!this.$w.find('.appframe-toolbar').length)
this.$w.append('<div class="appframe-toolbar"></div>');args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';} this.$w.append('<div class="appframe-toolbar"></div>');args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';}
this.buttons[label]=$(repl('<button class="btn btn-small">\ this.buttons[label]=$(repl('<button class="btn btn-small">\
%(icon)s %(label)s</button>',args)).click(click).appendTo(this.$w.find('.appframe-toolbar'));return this.buttons[label];},clear_buttons:function(){this.$w.find('.appframe-toolbar').empty();}}) %(icon)s %(label)s</button>',args)).click(click).appendTo(this.$w.find('.appframe-toolbar'));return this.buttons[label];},clear_buttons:function(){this.$w.find('.appframe-toolbar').empty();}})
/* /*
* lib/js/wn/ui/dialog.js * lib/js/wn/ui/dialog.js
*/ */
wn.widgets.FieldGroup=function(){this.first_button=false;this.make_fields=function(body,fl){$y(this.body,{padding:'11px'});this.fields_dict={};for(var i=0;i<fl.length;i++){var df=fl[i];var div=$a(body,'div','',{margin:'6px 0px'}) wn.widgets.FieldGroup=function(){this.first_button=false;this.make_fields=function(body,fl){if(!window.make_field){wn.require('lib/css/legacy/fields.css');wn.require('lib/js/legacy/widgets/form/fields.js');wn.require('lib/js/wn/ui/button.js');}
$y(this.body,{padding:'11px'});this.fields_dict={};for(var i=0;i<fl.length;i++){var df=fl[i];var div=$a(body,'div','',{margin:'6px 0px'})
f=make_field(df,null,div,null);f.not_in_form=1;this.fields_dict[df.fieldname]=f f=make_field(df,null,div,null);f.not_in_form=1;this.fields_dict[df.fieldname]=f
f.refresh();if(df.fieldtype=='Button'&&!this.first_button){$(f.input).addClass('btn-info');this.first_button=true;}}} f.refresh();if(df.fieldtype=='Button'&&!this.first_button){$(f.input).addClass('btn-info');this.first_button=true;}}}
this.get_values=function(){var ret={};var errors=[];for(var key in this.fields_dict){var f=this.fields_dict[key];var v=f.get_value?f.get_value():null;if(f.df.reqd&&!v) this.get_values=function(){var ret={};var errors=[];for(var key in this.fields_dict){var f=this.fields_dict[key];var v=f.get_value?f.get_value():null;if(f.df.reqd&&!v)
@@ -931,7 +946,8 @@ this.set_value=function(key,val){var f=this.fields_dict[key];if(f){f.set_input(v
this.set_values=function(dict){for(var key in dict){if(this.fields_dict[key]){this.set_value(key,dict[key]);}}} this.set_values=function(dict){for(var key in dict){if(this.fields_dict[key]){this.set_value(key,dict[key]);}}}
this.clear=function(){for(key in this.fields_dict){var f=this.fields_dict[key];if(f){f.set_input(f.df['default']||'');}}}} this.clear=function(){for(key in this.fields_dict){var f=this.fields_dict[key];if(f){f.set_input(f.df['default']||'');}}}}
wn.widgets.Dialog=function(opts){this.opts=opts;this.display=false;this.make=function(opts){if(opts) wn.widgets.Dialog=function(opts){this.opts=opts;this.display=false;this.make=function(opts){if(opts)
this.opts=opts;if(!this.opts.width)this.opts.width=480;this.wrapper=$a(popup_cont,'div','dialog_wrapper');if(this.opts.width) this.opts=opts;if(!this.opts.width)this.opts.width=480;if(!$('#dialog-container').length){$('<div id="dialog-container">').appendTo('body');}
this.wrapper=$('<div class="dialog_wrapper">').appendTo('#dialog-container').get(0);if(this.opts.width)
this.wrapper.style.width=this.opts.width+'px';this.make_head();this.body=$a(this.wrapper,'div','dialog_body');if(this.opts.fields) this.wrapper.style.width=this.opts.width+'px';this.make_head();this.body=$a(this.wrapper,'div','dialog_body');if(this.opts.fields)
this.make_fields(this.body,this.opts.fields);} this.make_fields(this.body,this.opts.fields);}
this.make_head=function(){var me=this;this.appframe=new wn.ui.AppFrame(this.wrapper);this.appframe.$titlebar.find('.close').unbind('click').click(function(){if(me.oncancel)me.oncancel();me.hide();});this.set_title(this.opts.title);} this.make_head=function(){var me=this;this.appframe=new wn.ui.AppFrame(this.wrapper);this.appframe.$titlebar.find('.close').unbind('click').click(function(){if(me.oncancel)me.oncancel();me.hide();});this.set_title(this.opts.title);}
@@ -942,7 +958,8 @@ $ds(this.wrapper);freeze();this.display=true;cur_dialog=this;if(this.onshow)this
this.hide=function(){if(this.onhide)this.onhide();unfreeze();$dh(this.wrapper);this.display=false;cur_dialog=null;} this.hide=function(){if(this.onhide)this.onhide();unfreeze();$dh(this.wrapper);this.display=false;cur_dialog=null;}
this.no_cancel=function(){this.appframe.$titlebar.find('.close').toggle(false);} this.no_cancel=function(){this.appframe.$titlebar.find('.close').toggle(false);}
if(opts)this.make();} if(opts)this.make();}
wn.widgets.Dialog.prototype=new wn.widgets.FieldGroup();$(document).bind('keydown',function(e){if(cur_dialog&&!cur_dialog.no_cancel_flag&&e.which==27){cur_dialog.hide();}}); wn.widgets.Dialog.prototype=new wn.widgets.FieldGroup();wn.provide('wn.ui');wn.ui.Dialog=wn.widgets.Dialog
$(document).bind('keydown',function(e){if(cur_dialog&&!cur_dialog.no_cancel_flag&&e.which==27){cur_dialog.hide();}});
/* /*
* lib/js/wn/ui/button.js * lib/js/wn/ui/button.js
*/ */
@@ -1158,7 +1175,7 @@ function loadreport(dt,rep_name,onload){if(rep_name)
wn.set_route('Report',dt,rep_name);else wn.set_route('Report',dt,rep_name);else
wn.set_route('Report',dt);} wn.set_route('Report',dt);}
function loaddoc(doctype,name,onload){wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){_f.edit_record(doctype,name);}else{wn.set_route('Form',doctype,name);}})} function loaddoc(doctype,name,onload){wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){_f.edit_record(doctype,name);}else{wn.set_route('Form',doctype,name);}})}
var load_doc=loaddoc;function new_doc(doctype,onload,in_dialog,on_save_callback,cdt,cdn,cnic){doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){_f.edit_record(doctype,'New '+doctype);}else{wn.set_route('Form',doctype,'New '+doctype);}})} var load_doc=loaddoc;function new_doc(doctype,onload,in_dialog,on_save_callback,cdt,cdn,cnic){doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){var new_name=LocalDB.create(doctype);_f.edit_record(doctype,new_name);}else{wn.views.formview.create(doctype);}})}
var newdoc=new_doc;var pscript={};function loadpage(page_name,call_back,no_history){wn.set_route(page_name);} var newdoc=new_doc;var pscript={};function loadpage(page_name,call_back,no_history){wn.set_route(page_name);}
function loaddocbrowser(dt){wn.set_route('List',dt);} function loaddocbrowser(dt){wn.set_route('List',dt);}
/* /*
@@ -1257,14 +1274,8 @@ var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_docli
Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(fields[dt])var d=fields[dt][fn];if(d)return d;} Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(fields[dt])var d=fields[dt][fn];if(d)return d;}
return{};} return{};}
Meta.set_field_property=function(fn,key,val,doc){if(!doc&&(cur_frm.doc))doc=cur_frm.doc;try{local_dt[doc.doctype][doc.name][fn][key]=val;refresh_field(fn);}catch(e){alert("Client Script Error: Unknown values for "+doc.name+','+fn+'.'+key+'='+val);}} Meta.set_field_property=function(fn,key,val,doc){if(!doc&&(cur_frm.doc))doc=cur_frm.doc;try{local_dt[doc.doctype][doc.name][fn][key]=val;refresh_field(fn);}catch(e){alert("Client Script Error: Unknown values for "+doc.name+','+fn+'.'+key+'='+val);}}
function get_doctype_label(dt){if(session.dt_labels&&session.dt_labels[dt]) function get_doctype_label(dt){return dt}
return session.dt_labels[dt] function get_label_doctype(label){return label}
else
return dt}
function get_label_doctype(label){if(session.rev_dt_labels&&session.rev_dt_labels[label])
return session.rev_dt_labels[label]
else
return label}
var getchildren=LocalDB.getchildren;var get_field=Meta.get_field;var createLocal=LocalDB.create; var getchildren=LocalDB.getchildren;var get_field=Meta.get_field;var createLocal=LocalDB.create;
/* /*
* lib/js/legacy/model/doclist.js * lib/js/legacy/model/doclist.js
@@ -1278,8 +1289,10 @@ function expand_doclist(docs){var l=[];for(var i=0;i<docs._vl.length;i++)
l[l.length]=zip(docs._kl[docs._vl[i][0]],docs._vl[i]);return l;} l[l.length]=zip(docs._kl[docs._vl[i][0]],docs._vl[i]);return l;}
function zip(k,v){var obj={};for(var i=0;i<k.length;i++){obj[k[i]]=v[i];} function zip(k,v){var obj={};for(var i=0;i<k.length;i++){obj[k[i]]=v[i];}
return obj;} return obj;}
function save_doclist(dt,dn,save_action,onsave,onerr){var doc=locals[dt][dn];var doctype=locals['DocType'][dt];var tmplist=[];var doclist=make_doclist(dt,dn,1);var all_clear=true;if(save_action!='Cancel'){for(var n in doclist){var tmp=check_required(doclist[n].doctype,doclist[n].name,doclist[0].doctype);if(doclist[n].docstatus+''!='2'&&all_clear) function save_doclist(dt,dn,save_action,onsave,onerr){var doc=locals[dt][dn];var doctype=locals['DocType'][dt];var tmplist=[];var doclist=make_doclist(dt,dn,1);var all_reqd_ok=true;if(save_action!='Cancel'){for(var n in doclist){var reqd_ok=check_required(doclist[n].doctype,doclist[n].name,doclist[0].doctype);if(doclist[n].docstatus+''!='2'&&all_reqd_ok)
all_clear=tmp;}} all_reqd_ok=reqd_ok;}}
if(!all_reqd_ok){onerr()
return;}
var _save=function(){$c('webnotes.widgets.form.save.savedocs',{'docs':compress_doclist(doclist),'docname':dn,'action':save_action,'user':user},function(r,rtxt){if(f){f.savingflag=false;} var _save=function(){$c('webnotes.widgets.form.save.savedocs',{'docs':compress_doclist(doclist),'docname':dn,'action':save_action,'user':user},function(r,rtxt){if(f){f.savingflag=false;}
if(r.saved){if(onsave)onsave(r);}else{if(onerr)onerr(r);}},function(){if(f){f.savingflag=false;}},0,(f?'Saving...':''));} if(r.saved){if(onsave)onsave(r);}else{if(onerr)onerr(r);}},function(){if(f){f.savingflag=false;}},0,(f?'Saving...':''));}
if(doc.__islocal&&(doctype&&doctype.autoname&&doctype.autoname.toLowerCase()=='prompt')){var newname=prompt('Enter the name of the new '+dt,'');if(newname){doc.__newname=strip(newname);_save();}else{msgprint('Not Saved');onerr();}}else{_save();}} if(doc.__islocal&&(doctype&&doctype.autoname&&doctype.autoname.toLowerCase()=='prompt')){var newname=prompt('Enter the name of the new '+dt,'');if(newname){doc.__newname=strip(newname);_save();}else{msgprint('Not Saved');onerr();}}else{_save();}}
@@ -1343,7 +1356,7 @@ wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home()
</ul>\ </ul>\
</div>\ </div>\
</div>\ </div>\
</div>');},make_home:function(){$('.navbar .brand').attr('href',"#!"+home_page);},make_document:function(){wn.ui.toolbar.new_dialog=new wn.ui.toolbar.NewDialog();wn.ui.toolbar.search=new wn.ui.toolbar.Search();wn.ui.toolbar.report=new wn.ui.toolbar.Report();$('.navbar .nav:first').append('<li class="dropdown">\ </div>');},make_home:function(){$('.navbar .brand').attr('href',"#");},make_document:function(){wn.ui.toolbar.new_dialog=new wn.ui.toolbar.NewDialog();wn.ui.toolbar.search=new wn.ui.toolbar.Search();wn.ui.toolbar.report=new wn.ui.toolbar.Report();$('.navbar .nav:first').append('<li class="dropdown">\
<a class="dropdown-toggle" href="#" data-toggle="dropdown"\ <a class="dropdown-toggle" href="#" data-toggle="dropdown"\
onclick="return false;">Document<b class="caret"></b></a>\ onclick="return false;">Document<b class="caret"></b></a>\
<ul class="dropdown-menu" id="toolbar-document">\ <ul class="dropdown-menu" id="toolbar-document">\
@@ -1364,7 +1377,7 @@ wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home()
</ul>\ </ul>\
</li>');if(has_common(user_roles,['Administrator','System Manager'])){$('#toolbar-tools').append('<li><a href="#" \ </li>');if(has_common(user_roles,['Administrator','System Manager'])){$('#toolbar-tools').append('<li><a href="#" \
onclick="return wn.ui.toolbar.download_backup();">\ onclick="return wn.ui.toolbar.download_backup();">\
Download Backup</a></li>');}},set_user_name:function(){var fn=user_fullname;if(fn.length>15)fn=fn.substr(0,12)+'...';$('#toolbar-user-link').html(fn+'<b class="caret"></b>');},make_logout:function(){$('#toolbar-user').append('<li><a href="#" onclick="return logout();">Logout</a></li>');}});wn.ui.toolbar.clear_cache=function(){localStorage&&localStorage.clear();$c('webnotes.session_cache.clear',{},function(r,rt){show_alert(r.message);});return false;} Download Backup</a></li>');}},set_user_name:function(){var fn=user_fullname;if(fn.length>15)fn=fn.substr(0,12)+'...';$('#toolbar-user-link').html(fn+'<b class="caret"></b>');},make_logout:function(){$('#toolbar-user').append('<li><a href="#" onclick="return wn.app.logout();">Logout</a></li>');}});wn.ui.toolbar.clear_cache=function(){localStorage&&localStorage.clear();$c('webnotes.session_cache.clear',{},function(r,rt){show_alert(r.message);});return false;}
wn.ui.toolbar.download_backup=function(){$c('webnotes.utils.backups.get_backup',{},function(r,rt){});return false;} wn.ui.toolbar.download_backup=function(){$c('webnotes.utils.backups.get_backup',{},function(r,rt){});return false;}
wn.ui.toolbar.show_about=function(){try{wn.require('lib/js/wn/misc/about.js');wn.ui.misc.about();}catch(e){console.log(e);} wn.ui.toolbar.show_about=function(){try{wn.require('lib/js/wn/misc/about.js');wn.ui.misc.about();}catch(e){console.log(e);}
return false;} return false;}
@@ -1647,7 +1660,7 @@ c.appendChild(this.print_sel);c.cur_sel=this.print_sel;_e.dialog.widgets['Send W
_e.dialog.widgets['Subject'].value=get_doctype_label(this.meta.name)+': '+this.docname;_e.dialog.show();} _e.dialog.widgets['Subject'].value=get_doctype_label(this.meta.name)+': '+this.docname;_e.dialog.show();}
_f.Frm.prototype.rename_notify=function(dt,old,name){this.is_editable[name]=this.is_editable[old];delete this.is_editable[old];if(this.docname==old) _f.Frm.prototype.rename_notify=function(dt,old,name){this.is_editable[name]=this.is_editable[old];delete this.is_editable[old];if(this.docname==old)
this.docname=name;if(this&&this.opendocs[old]){local_dt[dt][name]=local_dt[dt][old];local_dt[dt][old]=null;} this.docname=name;if(this&&this.opendocs[old]){local_dt[dt][name]=local_dt[dt][old];local_dt[dt][old]=null;}
delete this.opendocs[old];this.opendocs[name]=true;} delete this.opendocs[old];this.opendocs[name]=true;wn.re_route[window.location.hash]='Form/'+encodeURIComponent(this.doctype)+'/'+encodeURIComponent(name);wn.set_route('Form',this.doctype,name);}
_f.Frm.prototype.setup_meta=function(){this.meta=get_local('DocType',this.doctype);this.perm=get_perm(this.doctype);if(this.meta.istable){this.meta.in_dialog=1} _f.Frm.prototype.setup_meta=function(){this.meta=get_local('DocType',this.doctype);this.perm=get_perm(this.doctype);if(this.meta.istable){this.meta.in_dialog=1}
this.setup_print();} this.setup_print();}
_f.Frm.prototype.setup_sidebar=function(){this.sidebar=new wn.widgets.form.sidebar.Sidebar(this);} _f.Frm.prototype.setup_sidebar=function(){this.sidebar=new wn.widgets.form.sidebar.Sidebar(this);}
@@ -1750,7 +1763,7 @@ this.copy_doc(fn,1);}
_f.get_value=function(dt,dn,fn){if(locals[dt]&&locals[dt][dn]) _f.get_value=function(dt,dn,fn){if(locals[dt]&&locals[dt][dn])
return locals[dt][dn][fn];} return locals[dt][dn][fn];}
_f.set_value=function(dt,dn,fn,v){var d=locals[dt][dn];if(!d){console.log('_f.set_value - '+fn+': "'+dt+','+dn+'" not found');return;} _f.set_value=function(dt,dn,fn,v){var d=locals[dt][dn];if(!d){console.log('_f.set_value - '+fn+': "'+dt+','+dn+'" not found');return;}
var changed=d[fn]!=v;if(changed&&(d[fn]==null||v==null)&&(cstr(d[fn])==cstr(v)))changed=0;if(changed){d[fn]=v;d.__unsaved=1;if(d.parent&&d.parenttype){locals[d.parenttype][d.parent].__unsaved=1;var frm=wn.views.formview[d.parenttype].frm;}else{locals[d.doctype][d.name].__unsaved=1;var frm=wn.views.formview[d.doctype].frm;} var changed=d[fn]!=v;if(changed&&(d[fn]==null||v==null)&&(cstr(d[fn])==cstr(v)))changed=0;if(changed){d[fn]=v;d.__unsaved=1;if(d.parent&&d.parenttype){locals[d.parenttype][d.parent].__unsaved=1;var frm=wn.views.formview[d.parenttype].frm;}else{locals[d.doctype][d.name].__unsaved=1;var frm=wn.views.formview[d.doctype]&&wn.views.formview[d.doctype].frm;}
if(frm&&frm==cur_frm&&frm.frm_head){frm.frm_head.refresh_labels();}}} if(frm&&frm==cur_frm&&frm.frm_head){frm.frm_head.refresh_labels();}}}
_f.Frm.prototype.show_comments=function(){if(!cur_frm.comments){cur_frm.comments=new Dialog(540,400,'Comments');cur_frm.comments.comment_body=$a(cur_frm.comments.body,'div','dialog_frm');$y(cur_frm.comments.body,{backgroundColor:'#EEE'});cur_frm.comments.list=new CommentList(cur_frm.comments.comment_body);} _f.Frm.prototype.show_comments=function(){if(!cur_frm.comments){cur_frm.comments=new Dialog(540,400,'Comments');cur_frm.comments.comment_body=$a(cur_frm.comments.body,'div','dialog_frm');$y(cur_frm.comments.body,{backgroundColor:'#EEE'});cur_frm.comments.list=new CommentList(cur_frm.comments.comment_body);}
cur_frm.comments.list.dt=cur_frm.doctype;cur_frm.comments.list.dn=cur_frm.docname;cur_frm.comments.show();cur_frm.comments.list.run();} cur_frm.comments.list.dt=cur_frm.doctype;cur_frm.comments.list.dn=cur_frm.docname;cur_frm.comments.show();cur_frm.comments.list.run();}
@@ -1909,6 +1922,15 @@ if(swap_row){var cidx=_f.cur_grid_cell.cellIndex;this.cell_deselect();var aidx=l
/* /*
* lib/js/legacy/widgets/form/print_format.js * lib/js/legacy/widgets/form/print_format.js
*/ */
_p.def_print_style_body="html, body, div, span, td { font-family: Arial, Helvetica; font-size: 12px; }"+"\npre { margin:0; padding:0;}"
_p.def_print_style_other="\n.simpletable, .noborder { border-collapse: collapse; margin-bottom: 10px;}"
+"\n.simpletable td {border: 1pt solid #000; vertical-align: top; padding: 2px; }"
+"\n.noborder td { vertical-align: top; }"
_p.go=function(html){var d=document.createElement('div')
d.innerHTML=html
$(d).printElement();}
_p.preview=function(html){var w=window.open('');w.document.write(html)
w.document.close();}
$.extend(_p,{show_dialog:function(){if(!_p.dialog){_p.make_dialog();} $.extend(_p,{show_dialog:function(){if(!_p.dialog){_p.make_dialog();}
_p.dialog.show();},make_dialog:function(){var d=new Dialog(360,140,'Print Formats',[['HTML','Select'],['Check','No Letterhead'],['HTML','Buttons']]);$btn(d.widgets.Buttons,'Print',function(){_p.build(sel_val(cur_frm.print_sel),_p.go,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px',marginLeft:'7px'},'green');$btn(d.widgets.Buttons,'Preview',function(){_p.build(sel_val(cur_frm.print_sel),_p.preview,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px'},'');d.onshow=function(){var c=_p.dialog.widgets['Select'];if(c.cur_sel&&c.cur_sel.parentNode==c){c.removeChild(c.cur_sel);} _p.dialog.show();},make_dialog:function(){var d=new Dialog(360,140,'Print Formats',[['HTML','Select'],['Check','No Letterhead'],['HTML','Buttons']]);$btn(d.widgets.Buttons,'Print',function(){_p.build(sel_val(cur_frm.print_sel),_p.go,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px',marginLeft:'7px'},'green');$btn(d.widgets.Buttons,'Preview',function(){_p.build(sel_val(cur_frm.print_sel),_p.preview,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px'},'');d.onshow=function(){var c=_p.dialog.widgets['Select'];if(c.cur_sel&&c.cur_sel.parentNode==c){c.removeChild(c.cur_sel);}
c.appendChild(cur_frm.print_sel);c.cur_sel=cur_frm.print_sel;} c.appendChild(cur_frm.print_sel);c.cur_sel=cur_frm.print_sel;}
@@ -1942,7 +1964,7 @@ jslist=container.getElementsByTagName('script');}},show_letterhead:function(cont
var finished=header var finished=header
+stat +stat
+container.innerHTML.replace(/<div/g,'\n<div').replace(/<td/g,'\n<td') +container.innerHTML.replace(/<div/g,'\n<div').replace(/<td/g,'\n<td')
+footer;return finished;},get_letter_head:function(){var cp=wn.control_panel;var lh='';if(cur_frm.doc.letter_head){lh=cstr(_p.letter_heads[cur_frm.doc.letter_head]);}else if(cp.letter_head){lh=cp.letter_head;} +footer;return finished;},get_letter_head:function(){var cp=wn.control_panel;var lh='';if(cur_frm.doc.letter_head){lh=cstr(wn.boot.letter_heads[cur_frm.doc.letter_head]);}else if(cp.letter_head){lh=cp.letter_head;}
return lh;},print_style:"\ return lh;},print_style:"\
.datalabelcell { \ .datalabelcell { \
padding: 2px 0px; \ padding: 2px 0px; \
@@ -2120,57 +2142,28 @@ for(var i=0;i<d.length;i++){$(this.body).append(repl('<div>%(owner)s \
$(this.body).find('a.close').click(function(){$c('webnotes.widgets.form.assign_to.remove',{doctype:me.doctype,name:me.name,assign_to:$(this).attr('data-owner')},function(r,rt){me.render(r.message);});return false;});},add:function(){var me=this;if(!me.dialog){me.dialog=new wn.widgets.Dialog({title:'Add to To Do',width:350,fields:[{fieldtype:'Link',fieldname:'assign_to',options:'Profile',label:'Assign To',description:'Add to To Do List of',reqd:true},{fieldtype:'Data',fieldname:'description',label:'Comment'},{fieldtype:'Date',fieldname:'date',label:'Complete By'},{fieldtype:'Select',fieldname:'priority',label:'Priority',options:'Low\nMedium\nHigh','default':'Medium'},{fieldtype:'Check',fieldname:'notify',label:'Notify By Email'},{fieldtype:'Button',label:'Add',fieldname:'add_btn'}]});me.dialog.fields_dict.add_btn.input.onclick=function(){var assign_to=me.dialog.fields_dict.assign_to.get_value();if(assign_to){$c('webnotes.widgets.form.assign_to.add',{doctype:me.doctype,name:me.name,assign_to:assign_to,description:me.dialog.fields_dict.description.get_value(),priority:me.dialog.fields_dict.priority.get_value(),date:me.dialog.fields_dict.date.get_value(),notify:me.dialog.fields_dict.notify.get_value()},function(r,rt){me.render(r.message);});}}} $(this.body).find('a.close').click(function(){$c('webnotes.widgets.form.assign_to.remove',{doctype:me.doctype,name:me.name,assign_to:$(this).attr('data-owner')},function(r,rt){me.render(r.message);});return false;});},add:function(){var me=this;if(!me.dialog){me.dialog=new wn.widgets.Dialog({title:'Add to To Do',width:350,fields:[{fieldtype:'Link',fieldname:'assign_to',options:'Profile',label:'Assign To',description:'Add to To Do List of',reqd:true},{fieldtype:'Data',fieldname:'description',label:'Comment'},{fieldtype:'Date',fieldname:'date',label:'Complete By'},{fieldtype:'Select',fieldname:'priority',label:'Priority',options:'Low\nMedium\nHigh','default':'Medium'},{fieldtype:'Check',fieldname:'notify',label:'Notify By Email'},{fieldtype:'Button',label:'Add',fieldname:'add_btn'}]});me.dialog.fields_dict.add_btn.input.onclick=function(){var assign_to=me.dialog.fields_dict.assign_to.get_value();if(assign_to){$c('webnotes.widgets.form.assign_to.add',{doctype:me.doctype,name:me.name,assign_to:assign_to,description:me.dialog.fields_dict.description.get_value(),priority:me.dialog.fields_dict.priority.get_value(),date:me.dialog.fields_dict.date.get_value(),notify:me.dialog.fields_dict.notify.get_value()},function(r,rt){me.render(r.message);});}}}
me.dialog.clear();me.dialog.show();}}); me.dialog.clear();me.dialog.show();}});
/* /*
* lib/js/legacy/app.js * lib/js/wn/app.js
*/ */
var popup_cont;var session={};if(!wn)var wn={};function startup(){popup_cont=$a(document.getElementsByTagName('body')[0],'div');var setup_globals=function(r){wn.boot=r;profile=r.profile;user=r.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;home_page=r.home_page;_p.letter_heads=r.letter_heads;sys_defaults=r.sysdefaults;session.rt=profile.can_read;if(r.ipinfo)session.ipinfo=r.ipinfo;session.dt_labels=r.dt_labels;session.rev_dt_labels={} wn.Application=Class.extend({init:function(){this.load_bootinfo();this.make_page_container();this.make_nav_bar();this.set_favicon();$(document).trigger('startup');wn.route();},load_bootinfo:function(){LocalDB.sync(wn.boot.docs);wn.user=wn.boot.profile.name;wn.control_panel=wn.boot.control_panel;if(wn.boot.error_messages)
if(r.dt_labels){for(key in r.dt_labels)session.rev_dt_labels[r.dt_labels[key]]=key;}
wn.control_panel=r.control_panel;}
var setup_viewport=function(){wn.container=new wn.views.Container();if(user=='Guest')
user_defaults.hide_webnotes_toolbar=1;if(!cint(user_defaults.hide_webnotes_toolbar)||user=='Administrator'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}
$(document).trigger('startup');try{if(wn.control_panel.custom_startup_code)
eval(wn.control_panel.custom_startup_code);}catch(e){errprint(e);}
var t=to_open();if(t){window.location.hash=t;set_favicon();}else if(home_page){loadpage(home_page);}
wn.route();$dh('startup_div');$ds('body_div');}
var callback=function(r,rt){if(r.exc)console.log(r.exc);setup_globals(r);setup_viewport();}
if(wn.boot){LocalDB.sync(wn.boot.docs);callback(wn.boot,'');if(wn.boot.error_messages)
console.log(wn.boot.error_messages) console.log(wn.boot.error_messages)
if(wn.boot.server_messages) if(wn.boot.server_messages)
msgprint(wn.boot.server_messages);}else{if($i('startup_div')) msgprint(wn.boot.server_messages);this.set_globals();},set_globals:function(){profile=wn.boot.profile;user=wn.boot.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;sys_defaults=wn.boot.sysdefaults;},make_page_container:function(){wn.container=new wn.views.Container();wn.views.make_403();wn.views.make_404();$('#startup_div').toggle(false);$('#body_div').toggle(true);},make_nav_bar:function(){if(wn.user!='Guest'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}},logout:function(){var me=this;wn.call({method:'logout',callback:function(r){if(r.exc){console.log(r.exc);return;}
$c('startup',{},callback,null,1);}} me.redirect_to_login();}})},redirect_to_login:function(){window.location.hash='';window.location.reload();},set_favicon:function(){var link=$('link[type="image/x-icon"]').remove().attr("href");var favicon='\
function to_open(){if(get_url_arg('page')) <link rel="shortcut icon" href="'+link+'" type="image/x-icon"> \
return get_url_arg('page');var h=location.hash;if(h){return h.substr(1);}} <link rel="icon" href="'+link+'" type="image/x-icon">'
function logout(){$c('logout',args={},function(r,rt){if(r.exc){msgprint(r.exc);return;} $(favicon).appendTo('head');}})
redirect_to_login();});}
function redirect_to_login(){if(login_file)
window.location.href=login_file;else{window.location.reload();}}
_p.def_print_style_body="html, body, div, span, td { font-family: Arial, Helvetica; font-size: 12px; }"+"\npre { margin:0; padding:0;}"
_p.def_print_style_other="\n.simpletable, .noborder { border-collapse: collapse; margin-bottom: 10px;}"
+"\n.simpletable td {border: 1pt solid #000; vertical-align: top; padding: 2px; }"
+"\n.noborder td { vertical-align: top; }"
_p.go=function(html){var d=document.createElement('div')
d.innerHTML=html
$(d).printElement();}
_p.preview=function(html){var w=window.open('');w.document.write(html)
w.document.close();}
var resize_observers=[]
function set_resize_observer(fn){if(resize_observers.indexOf(fn)==-1)resize_observers.push(fn);}
window.onresize=function(){return;var ht=get_window_height();for(var i=0;i<resize_observers.length;i++){resize_observers[i](ht);}}
get_window_height=function(){var ht=window.innerHeight?window.innerHeight:document.documentElement.offsetHeight?document.documentElement.offsetHeight:document.body.offsetHeight;return ht;}
function set_favicon(){var link=$('link[type="image/x-icon"]').remove().attr("href");var favicon='\
<link rel="shortcut icon" href="'+link+'" type="image/x-icon"> \
<link rel="icon" href="'+link+'" type="image/x-icon">'
$(favicon).appendTo('head');}
/* /*
* js/app.js * js/app.js
*/ */
wn.app={name:'ERPNext',license:'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is',source:'https://github.com/webnotes/erpnext',publisher:'Web Notes Technologies Pvt Ltd, Mumbai',copyright:'&copy; Web Notes Technologies Pvt Ltd',version:'2.'+window._version_number} wn.app={name:'ERPNext',license:'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is',source:'https://github.com/webnotes/erpnext',publisher:'Web Notes Technologies Pvt Ltd, Mumbai',copyright:'&copy; Web Notes Technologies Pvt Ltd',version:'2.'+window._version_number}
wn.modules_path='erpnext';wn.settings.no_history=true;$(document).bind('ready',function(){startup();});$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next\ wn.modules_path='erpnext';$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next\
<i class="icon-home icon-white navbar-icon-home" ></i>').hover(function(){$(this).find('.icon-home').addClass('navbar-icon-home-hover');},function(){$(this).find('.icon-home').removeClass('navbar-icon-home-hover');});}); <i class="icon-home icon-white navbar-icon-home" ></i>').hover(function(){$(this).find('.icon-home').addClass('navbar-icon-home-hover');},function(){$(this).find('.icon-home').removeClass('navbar-icon-home-hover');});});
/* /*
* erpnext/startup/startup.js * erpnext/startup/startup.js
*/ */
var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'} var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'}
erpnext.startup.set_globals=function(){pscript.is_erpnext_saas=cint(wn.control_panel.sync_with_gateway) erpnext.startup.set_globals=function(){wn.control_panel.sync_with_gateway=wn.boot.sync_with_gateway
pscript.is_erpnext_saas=cint(wn.control_panel.sync_with_gateway)
if(inList(user_roles,'System Manager'))is_system_manager=1;} if(inList(user_roles,'System Manager'))is_system_manager=1;}
erpnext.startup.start=function(){$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);} erpnext.startup.start=function(){$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);}
if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);} if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);}

View File

@@ -75,7 +75,7 @@ $(ele).css('-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')}
/* /*
* lib/js/wn/model.js * lib/js/wn/model.js
*/ */
wn.provide('wn.model');wn.model={no_value_type:['Section Break','Column Break','HTML','Table','Button','Image'],new_names:{},with_doctype:function(doctype,callback){if(locals.DocType[doctype]){callback();}else{wn.call({method:'webnotes.widgets.form.load.getdoctype',args:{doctype:doctype},callback:callback});}},with_doc:function(doctype,name,callback){if(!name)name=doctype;if(locals[doctype]&&locals[doctype][name]){callback(name);}else{if(name&&name.indexOf('New '+doctype)!=-1){name=LocalDB.create(doctype);callback(name);}else{wn.call({method:'webnotes.widgets.form.load.getdoc',args:{doctype:doctype,name:name},callback:function(r){callback(name);}});}}},can_delete:function(doctype){if(!doctype)return false;return locals.DocType[doctype].allow_trash&&wn.boot.profile.can_cancel.indexOf(doctype)!=-1;}} wn.provide('wn.model');wn.model={no_value_type:['Section Break','Column Break','HTML','Table','Button','Image'],new_names:{},with_doctype:function(doctype,callback){if(locals.DocType[doctype]){callback();}else{wn.call({method:'webnotes.widgets.form.load.getdoctype',args:{doctype:doctype},callback:callback});}},with_doc:function(doctype,name,callback){if(!name)name=doctype;if(locals[doctype]&&locals[doctype][name]){callback(name);}else{wn.call({method:'webnotes.widgets.form.load.getdoc',args:{doctype:doctype,name:name},callback:function(r){callback(name);}});}},can_delete:function(doctype){if(!doctype)return false;return locals.DocType[doctype].allow_trash&&wn.boot.profile.can_cancel.indexOf(doctype)!=-1;}}
/* /*
* lib/js/wn/misc/tools.js * lib/js/wn/misc/tools.js
*/ */
@@ -123,11 +123,13 @@ throw new SyntaxError('JSON.parse');};}}());
/* /*
* lib/js/wn/router.js * lib/js/wn/router.js
*/ */
wn.route=function(){wn._cur_route=window.location.hash;route=wn.get_route();switch(route[0]){case"List":wn.views.doclistview.show(route[1]);break;case"Form":if(route.length>3){route[2]=route.splice(2).join('/');} wn.re_route={}
wn.route=function(){if(wn.re_route[window.location.hash]){window.location.hash=wn.re_route[window.location.hash];}
wn._cur_route=window.location.hash;route=wn.get_route();switch(route[0]){case"List":wn.views.doclistview.show(route[1]);break;case"Form":if(route.length>3){route[2]=route.splice(2).join('/');}
wn.views.formview.show(route[1],route[2]);break;case"Report":wn.views.reportview.show(route[1],route[2]);break;default:wn.views.pageview.show(route[0]);}} wn.views.formview.show(route[1],route[2]);break;case"Report":wn.views.reportview.show(route[1],route[2]);break;default:wn.views.pageview.show(route[0]);}}
wn.get_route=function(route){if(!route) wn.get_route=function(route){if(!route)
route=window.location.hash;if(route.substr(0,1)=='#')route=route.substr(1);if(route.substr(0,1)=='!')route=route.substr(1);return $.map(route.split('/'),function(r){return decodeURIComponent(r);});} route=window.location.hash;if(route.substr(0,1)=='#')route=route.substr(1);if(route.substr(0,1)=='!')route=route.substr(1);return $.map(route.split('/'),function(r){return decodeURIComponent(r);});}
wn.set_route=function(){route=$.map(arguments,function(a){return encodeURIComponent(a)}).join('/');window.location.hash=route;set_favicon();} wn.set_route=function(){route=$.map(arguments,function(a){return encodeURIComponent(a)}).join('/');window.location.hash=route;wn.app.set_favicon();}
wn._cur_route=null;$(window).bind('hashchange',function(){if(location.hash==wn._cur_route) wn._cur_route=null;$(window).bind('hashchange',function(){if(location.hash==wn._cur_route)
return;wn.route();if(wn.boot.analytics_code){try{eval(wn.boot.analytics_code);}catch(e){console.log(e);}}}); return;wn.route();if(wn.boot.analytics_code){try{eval(wn.boot.analytics_code);}catch(e){console.log(e);}}});
/* /*
@@ -149,7 +151,7 @@ this.prepare_opts();$.extend(this,this.opts);$(this.parent).html(repl('\
</div>\ </div>\
</div>\ </div>\
\ \
<div style="height: 37px; margin-bottom:9px" class="list-toolbar-wrapper">\ <div style="margin-bottom:9px" class="list-toolbar-wrapper">\
<div class="list-toolbar" style="display:inline-block; margin-right: 10px;">\ <div class="list-toolbar" style="display:inline-block; margin-right: 10px;">\
</div>\ </div>\
<div style="display:inline-block; width: 24px; margin-left: 4px">\ <div style="display:inline-block; width: 24px; margin-left: 4px">\
@@ -175,15 +177,16 @@ if(this.show_filters){this.make_filters();}},add_button:function(label,click,ico
if(icon){$('<i>').addClass(icon).appendTo($button);} if(icon){$('<i>').addClass(icon).appendTo($button);}
$button.html(label).click(click);return $button}},show_view:function($btn,$div,$btn_unsel,$div_unsel){$btn_unsel.removeClass('btn-info');$btn_unsel.find('i').removeClass('icon-white');$div_unsel.toggle(false);$btn.addClass('btn-info');$btn.find('i').addClass('icon-white');$div.toggle(true);},set_events:function(){var me=this;this.$w.find('.btn-more').click(function(){me.run({append:true});});if(this.title){this.$w.find('h3').html(this.title).toggle(true);} $button.html(label).click(click);return $button}},show_view:function($btn,$div,$btn_unsel,$div_unsel){$btn_unsel.removeClass('btn-info');$btn_unsel.find('i').removeClass('icon-white');$div_unsel.toggle(false);$btn.addClass('btn-info');$btn.find('i').addClass('icon-white');$div.toggle(true);},set_events:function(){var me=this;this.$w.find('.btn-more').click(function(){me.run({append:true});});if(this.title){this.$w.find('h3').html(this.title).toggle(true);}
if(!(this.hide_refresh||this.no_refresh)){this.add_button('Refresh',function(){me.run();},'icon-refresh');} if(!(this.hide_refresh||this.no_refresh)){this.add_button('Refresh',function(){me.run();},'icon-refresh');}
if(this.new_doctype){this.add_button('New '+this.new_doctype,function(){newdoc(me.new_doctype)},'icon-plus');} if(this.new_doctype){this.add_button('New '+this.new_doctype,function(){wn.views.formview.create(me.new_doctype)},'icon-plus');}
if(me.show_filters){this.add_button('Show Filters',function(){me.filter_list.show_filters();},'icon-search').addClass('btn-filter');}},make_filters:function(){this.filter_list=new wn.ui.FilterList({listobj:this,$parent:this.$w.find('.list-filters').toggle(true),doctype:this.doctype,filter_fields:this.filter_fields});},clear:function(){this.data=[];this.$w.find('.result-list').empty();this.$w.find('.result').toggle(true);this.$w.find('.no-result').toggle(false);this.start=0;},run:function(){var me=this;var a0=arguments[0];var a1=arguments[1];if(a0&&typeof a0=='function') if(me.show_filters){this.add_button('Show Filters',function(){me.filter_list.show_filters();},'icon-search').addClass('btn-filter');}
if(me.no_toolbar||me.hide_toolbar){me.$w.find('.list-toolbar-wrapper').toggle(false);}},make_filters:function(){this.filter_list=new wn.ui.FilterList({listobj:this,$parent:this.$w.find('.list-filters').toggle(true),doctype:this.doctype,filter_fields:this.filter_fields});},clear:function(){this.data=[];this.$w.find('.result-list').empty();this.$w.find('.result').toggle(true);this.$w.find('.no-result').toggle(false);this.start=0;},run:function(){var me=this;var a0=arguments[0];var a1=arguments[1];if(a0&&typeof a0=='function')
this.onrun=a0;if(a0&&a0.callback) this.onrun=a0;if(a0&&a0.callback)
this.onrun=a0.callback;if(!a1&&!(a0&&a0.append)) this.onrun=a0.callback;if(!a1&&!(a0&&a0.append))
this.start=0;me.set_working(true);wn.call({method:this.opts.method||'webnotes.widgets.query_builder.runquery',args:this.get_call_args(),callback:function(r){me.set_working(false);me.render_results(r)},no_spinner:this.opts.no_loading});},set_working:function(flag){this.$w.find('.img-load').toggle(flag);},get_call_args:function(){if(!this.method){this.query=this.get_query?this.get_query():this.query;this.add_limits();var args={query_max:this.query_max,as_dict:1} this.start=0;me.set_working(true);wn.call({method:this.opts.method||'webnotes.widgets.query_builder.runquery',args:this.get_call_args(a0),callback:function(r){me.set_working(false);me.render_results(r)},no_spinner:this.opts.no_loading});},set_working:function(flag){this.$w.find('.img-load').toggle(flag);},get_call_args:function(opts){if(!this.method){this.query=this.get_query?this.get_query():this.query;this.add_limits();var args={query_max:this.query_max,as_dict:1}
args.simple_query=this.query;}else{var args={limit_start:this.start,limit_page_length:this.page_length}} args.simple_query=this.query;}else{var args={limit_start:this.start,limit_page_length:this.page_length}}
if(this.args) if(this.args)
$.extend(args,this.args) $.extend(args,this.args)
if(this.get_args){$.extend(args,this.get_args());} if(this.get_args){$.extend(args,this.get_args(opts));}
return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}} return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}}
if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);} if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);}
this.start+=m;if(values.length>=this.page_length) this.start+=m;if(values.length>=this.page_length)
@@ -239,7 +242,7 @@ wn.views.add_list_btn=function(parent,doctype){$(parent).append(repl('<span clas
/* /*
* lib/js/wn/views/doclistview.js * lib/js/wn/views/doclistview.js
*/ */
wn.provide('wn.views.doclistview');wn.provide('wn.doclistviews');wn.views.doclistview.pages={};wn.views.doclistview.show=function(doctype){var pagename=doctype+' List';var doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(){var page=wn.views.doclistview.pages[pagename];if(!page){var page=wn.container.add_page(pagename);page.doclistview=new wn.views.DocListView(doctype,page);wn.views.doclistview.pages[pagename]=page;} wn.provide('wn.views.doclistview');wn.provide('wn.doclistviews');wn.views.doclistview.pages={};wn.views.doclistview.show=function(doctype){var pagename=doctype+' List';var doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(r){if(r&&r['403'])return;var page=wn.views.doclistview.pages[pagename];if(!page){var page=wn.container.add_page(pagename);page.doclistview=new wn.views.DocListView(doctype,page);wn.views.doclistview.pages[pagename]=page;}
document.title=page.doclistview.label;wn.container.change_to(pagename);})} document.title=page.doclistview.label;wn.container.change_to(pagename);})}
wn.views.DocListView=wn.ui.Listing.extend({init:function(doctype,page){this.doctype=doctype;this.$page=$(page);this.label=get_doctype_label(doctype);this.label=(this.label.toLowerCase().substr(-4)=='list')?this.label:(this.label+' List');this.make_page();this.setup();},make_page:function(){var me=this;this.$page.html(repl('<div class="layout-wrapper layout-wrapper-background">\ wn.views.DocListView=wn.ui.Listing.extend({init:function(doctype,page){this.doctype=doctype;this.$page=$(page);this.label=get_doctype_label(doctype);this.label=(this.label.toLowerCase().substr(-4)=='list')?this.label:(this.label+' List');this.make_page();this.setup();},make_page:function(){var me=this;this.$page.html(repl('<div class="layout-wrapper layout-wrapper-background">\
<div class="appframe-area"></div>\ <div class="appframe-area"></div>\
@@ -311,21 +314,30 @@ if(data.docstatus==0||data.docstatus==null){data.docstatus_icon='icon-pencil';da
/* /*
* lib/js/wn/views/pageview.js * lib/js/wn/views/pageview.js
*/ */
wn.provide('wn.views.pageview');wn.views.pageview={pages:{},with_page:function(name,callback){if(!locals.Page[name]){wn.call({method:'webnotes.widgets.page.getpage',args:{'name':name},callback:callback});}else{callback();}},show:function(name){wn.views.pageview.with_page(name,function(){if(!wn.pages[name]){wn.views.pageview.pages[name]=new wn.views.Page(name);} wn.provide('wn.views.pageview');wn.views.pageview={pages:{},with_page:function(name,callback){if(!locals.Page[name]){wn.call({method:'webnotes.widgets.page.getpage',args:{'name':name},callback:callback});}else{callback();}},show:function(name){if(!name)name=wn.boot.home_page;wn.views.pageview.with_page(name,function(r){if(r&&r.exc){if(!r['403'])wn.container.change_to('404');}else if(!wn.pages[name]){wn.views.pageview.pages[name]=new wn.views.Page(name);}
wn.container.change_to(name);});}} wn.container.change_to(name);});}}
wn.views.Page=Class.extend({init:function(name){this.name=name;var me=this;this.pagedoc=locals.Page[this.name];this.wrapper=wn.container.add_page(this.name);this.wrapper.label=this.pagedoc.title||this.pagedoc.name;this.wrapper.innerHTML=this.pagedoc.content;wn.dom.eval(this.pagedoc.__script||this.pagedoc.script||'');wn.dom.set_style(this.pagedoc.style);this.trigger('onload');$(this.wrapper).bind('show',function(){cur_frm=null;me.trigger('onshow');me.trigger('refresh');});},trigger:function(eventname){var me=this;try{if(pscript[eventname+'_'+this.name]){pscript[eventname+'_'+this.name](me.wrapper);}else if(me.wrapper[eventname]){me.wrapper[eventname](me.wrapper);}}catch(e){console.log(e);}}}) wn.views.Page=Class.extend({init:function(name){this.name=name;var me=this;this.pagedoc=locals.Page[this.name];this.wrapper=wn.container.add_page(this.name);this.wrapper.label=this.pagedoc.title||this.pagedoc.name;this.wrapper.innerHTML=this.pagedoc.content;wn.dom.eval(this.pagedoc.__script||this.pagedoc.script||'');wn.dom.set_style(this.pagedoc.style);this.trigger('onload');$(this.wrapper).bind('show',function(){cur_frm=null;me.trigger('onshow');me.trigger('refresh');});},trigger:function(eventname){var me=this;try{if(pscript[eventname+'_'+this.name]){pscript[eventname+'_'+this.name](me.wrapper);}else if(me.wrapper[eventname]){me.wrapper[eventname](me.wrapper);}}catch(e){console.log(e);}}})
wn.views.make_404=function(){var page=wn.container.add_page('404');$(page).html('<div class="layout-wrapper">\
<h1>Not Found</h1><br>\
<p>Sorry we were unable to find what you were looking for.</p>\
<p><a href="#">Go back to home</a></p>\
</div>').toggle(false);};wn.views.make_403=function(){var page=wn.container.add_page('403');$(page).html('<div class="layout-wrapper">\
<h1>Not Permitted</h1><br>\
<p>Sorry you are not permitted to view this page.</p>\
<p><a href="#">Go back to home</a></p>\
</div>').toggle(false);};
/* /*
* lib/js/wn/views/formview.js * lib/js/wn/views/formview.js
*/ */
wn.provide('wn.views.formview');wn.views.formview={show:function(dt,dn){if(wn.model.new_names[dn]) wn.provide('wn.views.formview');wn.views.formview={show:function(dt,dn){if(wn.model.new_names[dn])
dn=wn.model.new_names[dn];wn.model.with_doctype(dt,function(){wn.model.with_doc(dt,dn,function(dn){if(!wn.views.formview[dt]){wn.views.formview[dt]=wn.container.add_page('Form - '+dt);wn.views.formview[dt].frm=new _f.Frm(dt,wn.views.formview[dt]);} dn=wn.model.new_names[dn];wn.model.with_doctype(dt,function(){wn.model.with_doc(dt,dn,function(dn){if(!(locals[dt]&&locals[dt][dn])){wn.container.change_to('404');return;}
wn.container.change_to('Form - '+dt);wn.views.formview[dt].frm.refresh(dn);});})}} if(!wn.views.formview[dt]){wn.views.formview[dt]=wn.container.add_page('Form - '+dt);wn.views.formview[dt].frm=new _f.Frm(dt,wn.views.formview[dt]);}
wn.container.change_to('Form - '+dt);wn.views.formview[dt].frm.refresh(dn);});})},create:function(dt){var new_name=LocalDB.create(dt);wn.set_route('Form',dt,new_name);}}
/* /*
* lib/js/wn/views/reportview.js * lib/js/wn/views/reportview.js
*/ */
wn.views.reportview={show:function(dt,rep_name){wn.require('lib/js/legacy/report.compressed.js');dt=get_label_doctype(dt);if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();} wn.views.reportview={show:function(dt,rep_name){wn.require('lib/js/legacy/report.compressed.js');dt=get_label_doctype(dt);if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();}
_r.rb_con.set_dt(dt,function(rb){if(rep_name){var t=rb.current_loaded;rb.load_criteria(rep_name);if(onload) _r.rb_con.set_dt(dt,function(rb){if(rep_name){var t=rb.current_loaded;rb.load_criteria(rep_name);if((rb.dt)&&(!rb.dt.has_data()||rb.current_loaded!=t))
onload(rb);if((rb.dt)&&(!rb.dt.has_data()||rb.current_loaded!=t))
rb.dt.run();} rb.dt.run();}
if(!rb.forbidden){wn.container.change_to('Report Builder');}});}} if(!rb.forbidden){wn.container.change_to('Report Builder');}});}}
/* /*
@@ -333,9 +345,10 @@ if(!rb.forbidden){wn.container.change_to('Report Builder');}});}}
*/ */
wn.provide('wn.request');wn.request.url='index.cgi';wn.request.prepare=function(opts){if(opts.btn)$(opts.btn).set_working();if(opts.show_spinner)set_loading();if(opts.freeze)freeze();if(!opts.args.cmd){console.log(opts) wn.provide('wn.request');wn.request.url='index.cgi';wn.request.prepare=function(opts){if(opts.btn)$(opts.btn).set_working();if(opts.show_spinner)set_loading();if(opts.freeze)freeze();if(!opts.args.cmd){console.log(opts)
throw"Incomplete Request";}} throw"Incomplete Request";}}
wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(opts.show_spinner)hide_loading();if(opts.freeze)unfreeze();if(wn.boot.sid&&wn.get_cookie('sid')!=wn.boot.sid){msgprint('Session expired');setTimeout('redirect_to_login()',3000);return;} wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(opts.show_spinner)hide_loading();if(opts.freeze)unfreeze();if(wn.boot.sid&&wn.get_cookie('sid')!=wn.boot.sid){msgprint('Session expired');setTimeout('wn.app.redirect_to_login()',3000);return;}
if(r.server_messages)msgprint(r.server_messages) if(r.server_messages)msgprint(r.server_messages)
if(r.exc){errprint(r.exc);console.log(r.exc);};if(r.docs)LocalDB.sync(r.docs);} if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
if(r.docs)LocalDB.sync(r.docs);}
wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus) wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
if(opts.error)opts.error(xhr)}})} if(opts.error)opts.error(xhr)}})}
wn.call=function(opts){var args=$.extend({},opts.args) wn.call=function(opts){var args=$.extend({},opts.args)
@@ -345,14 +358,14 @@ wn.request.call({args:args,success:opts.callback,error:opts.error,btn:opts.btn,f
/* /*
* lib/js/core.js * lib/js/core.js
*/ */
if(!console){var console={log:function(txt){errprint(txt);}}} if(!console){var console={log:function(txt){alert(txt);}}}
wn.versions.check();$(document).bind('ready',function(){var base=window.location.href.split('#')[0];$.each($('a[softlink!="false"]'),function(i,v){if(v.href.substr(0,base.length)==base){var path=(v.href.substr(base.length));if(path.substr(0,1)!='#'){v.href=base+'#'+path;}}});if(!wn.settings.no_history&&window.location.hash){wn.page.set(window.location.hash.substr(1));}}); wn.versions.check();$(document).bind('ready',function(){wn.app=new wn.Application();});
/* /*
* lib/js/legacy/globals.js * lib/js/legacy/globals.js
*/ */
wn.provide('wn.widgets.form');wn.provide('wn.widgets.report');wn.provide('wn.utils');wn.provide('wn.model');wn.provide('wn.profile');wn.provide('wn.session');wn.provide('_f');wn.provide('_p');wn.provide('_r');wn.provide('_c');wn.provide('_e');wn.provide('_startup_data') wn.provide('wn.widgets.form');wn.provide('wn.widgets.report');wn.provide('wn.utils');wn.provide('wn.model');wn.provide('wn.profile');wn.provide('wn.session');wn.provide('_f');wn.provide('_p');wn.provide('_r');wn.provide('_c');wn.provide('_e');wn.provide('_startup_data')
wn.settings.no_history=1;var NEWLINE='\n';var login_file='';var version='v170';var profile=null;var session={};var is_testing=false;var user=null;var user_defaults=null;var user_roles=null;var user_fullname=null;var user_email=null;var user_img={};var home_page=null;var pscript={};var selector=null;var top_index=91;var _f={};var _p={};var _e={};var _r={};var FILTER_SEP='\1';var frms={};var cur_frm=null;var pscript={};var validated=true;var validation_message='';var tinymce_loaded=null; wn.settings.no_history=1;var NEWLINE='\n';var profile=null;var user=null;var user_defaults=null;var user_roles=null;var user_fullname=null;var user_email=null;var user_img={};var pscript={};var selector=null;var top_index=91;var _f={};var _p={};var _e={};var _r={};var FILTER_SEP='\1';var frms={};var cur_frm=null;var pscript={};var validated=true;var validation_message='';var tinymce_loaded=null;
/* /*
* lib/js/legacy/utils/datatype.js * lib/js/legacy/utils/datatype.js
*/ */
@@ -564,7 +577,8 @@ var t=make_table(msg_dialog.rows['Msg'],1,2,'100%',['20px','250px'],{padding:'2p
if(!msg_dialog.display)msg_dialog.show();var has_msg=msg_dialog.msg_area.innerHTML?1:0;var m=$a(msg_dialog.msg_area,'div','');if(has_msg)$y(m,{marginTop:'4px'});$dh(msg_dialog.msg_icon);if(msg.substr(0,6).toLowerCase()=='error:'){msg_dialog.msg_icon.src='lib/images/icons/error.gif';$di(msg_dialog.msg_icon);msg=msg.substr(6);}else if(msg.substr(0,8).toLowerCase()=='message:'){msg_dialog.msg_icon.src='lib/images/icons/application.gif';$di(msg_dialog.msg_icon);msg=msg.substr(8);}else if(msg.substr(0,3).toLowerCase()=='ok:'){msg_dialog.msg_icon.src='lib/images/icons/accept.gif';$di(msg_dialog.msg_icon);msg=msg.substr(3);} if(!msg_dialog.display)msg_dialog.show();var has_msg=msg_dialog.msg_area.innerHTML?1:0;var m=$a(msg_dialog.msg_area,'div','');if(has_msg)$y(m,{marginTop:'4px'});$dh(msg_dialog.msg_icon);if(msg.substr(0,6).toLowerCase()=='error:'){msg_dialog.msg_icon.src='lib/images/icons/error.gif';$di(msg_dialog.msg_icon);msg=msg.substr(6);}else if(msg.substr(0,8).toLowerCase()=='message:'){msg_dialog.msg_icon.src='lib/images/icons/application.gif';$di(msg_dialog.msg_icon);msg=msg.substr(8);}else if(msg.substr(0,3).toLowerCase()=='ok:'){msg_dialog.msg_icon.src='lib/images/icons/accept.gif';$di(msg_dialog.msg_icon);msg=msg.substr(3);}
m.innerHTML=replace_newlines(msg);if(m.offsetHeight>200){$y(m,{height:'200px',width:'400px',overflow:'auto'})} m.innerHTML=replace_newlines(msg);if(m.offsetHeight>200){$y(m,{height:'200px',width:'400px',overflow:'auto'})}
msg_dialog.custom_onhide=callback;} msg_dialog.custom_onhide=callback;}
var growl_area;function show_alert(txt,id){if(!growl_area){growl_area=$a(popup_cont,'div','',{position:'fixed',bottom:'8px',right:'8px',width:'320px',zIndex:10});} var growl_area;function show_alert(txt,id){if(!growl_area){if(!$('#dialog-container').length){$('<div id="dialog-container">').appendTo('body');}
growl_area=$a($i('dialog-container'),'div','',{position:'fixed',bottom:'8px',right:'8px',width:'320px',zIndex:10});}
var wrapper=$a(growl_area,'div','',{position:'relative'});var body=$a(wrapper,'div','notice');var c=$a(body,'i','icon-remove-sign',{cssFloat:'right',cursor:'pointer'});$(c).click(function(){$dh(this.wrapper)});c.wrapper=wrapper;var t=$a(body,'div','',{color:'#FFF'});$(t).html(txt);if(id){$(t).attr('id',id);} var wrapper=$a(growl_area,'div','',{position:'relative'});var body=$a(wrapper,'div','notice');var c=$a(body,'i','icon-remove-sign',{cssFloat:'right',cursor:'pointer'});$(c).click(function(){$dh(this.wrapper)});c.wrapper=wrapper;var t=$a(body,'div','',{color:'#FFF'});$(t).html(txt);if(id){$(t).attr('id',id);}
$(wrapper).hide().fadeIn(1000);} $(wrapper).hide().fadeIn(1000);}
/* /*
@@ -573,14 +587,15 @@ $(wrapper).hide().fadeIn(1000);}
wn.ui.AppFrame=Class.extend({init:function(parent){this.buttons={};this.$w=$('<div></div>').appendTo(parent);this.$titlebar=$('<div class="appframe-titlebar">\ wn.ui.AppFrame=Class.extend({init:function(parent){this.buttons={};this.$w=$('<div></div>').appendTo(parent);this.$titlebar=$('<div class="appframe-titlebar">\
<span class="appframe-title"></span>\ <span class="appframe-title"></span>\
<span class="close">&times;</span>\ <span class="close">&times;</span>\
</div>').appendTo(this.$w);this.$w.find('.close').click(function(){window.history.back();})},add_button:function(label,click,icon){if(!this.$w.find('.appframe-toolbar').length) </div>').appendTo(this.$w);this.$w.find('.close').click(function(){window.history.back();})},title:function(txt){this.$titlebar.find('.appframe-title').text(txt);},add_button:function(label,click,icon){if(!this.$w.find('.appframe-toolbar').length)
this.$w.append('<div class="appframe-toolbar"></div>');args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';} this.$w.append('<div class="appframe-toolbar"></div>');args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';}
this.buttons[label]=$(repl('<button class="btn btn-small">\ this.buttons[label]=$(repl('<button class="btn btn-small">\
%(icon)s %(label)s</button>',args)).click(click).appendTo(this.$w.find('.appframe-toolbar'));return this.buttons[label];},clear_buttons:function(){this.$w.find('.appframe-toolbar').empty();}}) %(icon)s %(label)s</button>',args)).click(click).appendTo(this.$w.find('.appframe-toolbar'));return this.buttons[label];},clear_buttons:function(){this.$w.find('.appframe-toolbar').empty();}})
/* /*
* lib/js/wn/ui/dialog.js * lib/js/wn/ui/dialog.js
*/ */
wn.widgets.FieldGroup=function(){this.first_button=false;this.make_fields=function(body,fl){$y(this.body,{padding:'11px'});this.fields_dict={};for(var i=0;i<fl.length;i++){var df=fl[i];var div=$a(body,'div','',{margin:'6px 0px'}) wn.widgets.FieldGroup=function(){this.first_button=false;this.make_fields=function(body,fl){if(!window.make_field){wn.require('lib/css/legacy/fields.css');wn.require('lib/js/legacy/widgets/form/fields.js');wn.require('lib/js/wn/ui/button.js');}
$y(this.body,{padding:'11px'});this.fields_dict={};for(var i=0;i<fl.length;i++){var df=fl[i];var div=$a(body,'div','',{margin:'6px 0px'})
f=make_field(df,null,div,null);f.not_in_form=1;this.fields_dict[df.fieldname]=f f=make_field(df,null,div,null);f.not_in_form=1;this.fields_dict[df.fieldname]=f
f.refresh();if(df.fieldtype=='Button'&&!this.first_button){$(f.input).addClass('btn-info');this.first_button=true;}}} f.refresh();if(df.fieldtype=='Button'&&!this.first_button){$(f.input).addClass('btn-info');this.first_button=true;}}}
this.get_values=function(){var ret={};var errors=[];for(var key in this.fields_dict){var f=this.fields_dict[key];var v=f.get_value?f.get_value():null;if(f.df.reqd&&!v) this.get_values=function(){var ret={};var errors=[];for(var key in this.fields_dict){var f=this.fields_dict[key];var v=f.get_value?f.get_value():null;if(f.df.reqd&&!v)
@@ -591,7 +606,8 @@ this.set_value=function(key,val){var f=this.fields_dict[key];if(f){f.set_input(v
this.set_values=function(dict){for(var key in dict){if(this.fields_dict[key]){this.set_value(key,dict[key]);}}} this.set_values=function(dict){for(var key in dict){if(this.fields_dict[key]){this.set_value(key,dict[key]);}}}
this.clear=function(){for(key in this.fields_dict){var f=this.fields_dict[key];if(f){f.set_input(f.df['default']||'');}}}} this.clear=function(){for(key in this.fields_dict){var f=this.fields_dict[key];if(f){f.set_input(f.df['default']||'');}}}}
wn.widgets.Dialog=function(opts){this.opts=opts;this.display=false;this.make=function(opts){if(opts) wn.widgets.Dialog=function(opts){this.opts=opts;this.display=false;this.make=function(opts){if(opts)
this.opts=opts;if(!this.opts.width)this.opts.width=480;this.wrapper=$a(popup_cont,'div','dialog_wrapper');if(this.opts.width) this.opts=opts;if(!this.opts.width)this.opts.width=480;if(!$('#dialog-container').length){$('<div id="dialog-container">').appendTo('body');}
this.wrapper=$('<div class="dialog_wrapper">').appendTo('#dialog-container').get(0);if(this.opts.width)
this.wrapper.style.width=this.opts.width+'px';this.make_head();this.body=$a(this.wrapper,'div','dialog_body');if(this.opts.fields) this.wrapper.style.width=this.opts.width+'px';this.make_head();this.body=$a(this.wrapper,'div','dialog_body');if(this.opts.fields)
this.make_fields(this.body,this.opts.fields);} this.make_fields(this.body,this.opts.fields);}
this.make_head=function(){var me=this;this.appframe=new wn.ui.AppFrame(this.wrapper);this.appframe.$titlebar.find('.close').unbind('click').click(function(){if(me.oncancel)me.oncancel();me.hide();});this.set_title(this.opts.title);} this.make_head=function(){var me=this;this.appframe=new wn.ui.AppFrame(this.wrapper);this.appframe.$titlebar.find('.close').unbind('click').click(function(){if(me.oncancel)me.oncancel();me.hide();});this.set_title(this.opts.title);}
@@ -602,7 +618,8 @@ $ds(this.wrapper);freeze();this.display=true;cur_dialog=this;if(this.onshow)this
this.hide=function(){if(this.onhide)this.onhide();unfreeze();$dh(this.wrapper);this.display=false;cur_dialog=null;} this.hide=function(){if(this.onhide)this.onhide();unfreeze();$dh(this.wrapper);this.display=false;cur_dialog=null;}
this.no_cancel=function(){this.appframe.$titlebar.find('.close').toggle(false);} this.no_cancel=function(){this.appframe.$titlebar.find('.close').toggle(false);}
if(opts)this.make();} if(opts)this.make();}
wn.widgets.Dialog.prototype=new wn.widgets.FieldGroup();$(document).bind('keydown',function(e){if(cur_dialog&&!cur_dialog.no_cancel_flag&&e.which==27){cur_dialog.hide();}}); wn.widgets.Dialog.prototype=new wn.widgets.FieldGroup();wn.provide('wn.ui');wn.ui.Dialog=wn.widgets.Dialog
$(document).bind('keydown',function(e){if(cur_dialog&&!cur_dialog.no_cancel_flag&&e.which==27){cur_dialog.hide();}});
/* /*
* lib/js/legacy/widgets/dialog.js * lib/js/legacy/widgets/dialog.js
*/ */
@@ -643,7 +660,7 @@ this.prepare_opts();$.extend(this,this.opts);$(this.parent).html(repl('\
</div>\ </div>\
</div>\ </div>\
\ \
<div style="height: 37px; margin-bottom:9px" class="list-toolbar-wrapper">\ <div style="margin-bottom:9px" class="list-toolbar-wrapper">\
<div class="list-toolbar" style="display:inline-block; margin-right: 10px;">\ <div class="list-toolbar" style="display:inline-block; margin-right: 10px;">\
</div>\ </div>\
<div style="display:inline-block; width: 24px; margin-left: 4px">\ <div style="display:inline-block; width: 24px; margin-left: 4px">\
@@ -669,15 +686,16 @@ if(this.show_filters){this.make_filters();}},add_button:function(label,click,ico
if(icon){$('<i>').addClass(icon).appendTo($button);} if(icon){$('<i>').addClass(icon).appendTo($button);}
$button.html(label).click(click);return $button}},show_view:function($btn,$div,$btn_unsel,$div_unsel){$btn_unsel.removeClass('btn-info');$btn_unsel.find('i').removeClass('icon-white');$div_unsel.toggle(false);$btn.addClass('btn-info');$btn.find('i').addClass('icon-white');$div.toggle(true);},set_events:function(){var me=this;this.$w.find('.btn-more').click(function(){me.run({append:true});});if(this.title){this.$w.find('h3').html(this.title).toggle(true);} $button.html(label).click(click);return $button}},show_view:function($btn,$div,$btn_unsel,$div_unsel){$btn_unsel.removeClass('btn-info');$btn_unsel.find('i').removeClass('icon-white');$div_unsel.toggle(false);$btn.addClass('btn-info');$btn.find('i').addClass('icon-white');$div.toggle(true);},set_events:function(){var me=this;this.$w.find('.btn-more').click(function(){me.run({append:true});});if(this.title){this.$w.find('h3').html(this.title).toggle(true);}
if(!(this.hide_refresh||this.no_refresh)){this.add_button('Refresh',function(){me.run();},'icon-refresh');} if(!(this.hide_refresh||this.no_refresh)){this.add_button('Refresh',function(){me.run();},'icon-refresh');}
if(this.new_doctype){this.add_button('New '+this.new_doctype,function(){newdoc(me.new_doctype)},'icon-plus');} if(this.new_doctype){this.add_button('New '+this.new_doctype,function(){wn.views.formview.create(me.new_doctype)},'icon-plus');}
if(me.show_filters){this.add_button('Show Filters',function(){me.filter_list.show_filters();},'icon-search').addClass('btn-filter');}},make_filters:function(){this.filter_list=new wn.ui.FilterList({listobj:this,$parent:this.$w.find('.list-filters').toggle(true),doctype:this.doctype,filter_fields:this.filter_fields});},clear:function(){this.data=[];this.$w.find('.result-list').empty();this.$w.find('.result').toggle(true);this.$w.find('.no-result').toggle(false);this.start=0;},run:function(){var me=this;var a0=arguments[0];var a1=arguments[1];if(a0&&typeof a0=='function') if(me.show_filters){this.add_button('Show Filters',function(){me.filter_list.show_filters();},'icon-search').addClass('btn-filter');}
if(me.no_toolbar||me.hide_toolbar){me.$w.find('.list-toolbar-wrapper').toggle(false);}},make_filters:function(){this.filter_list=new wn.ui.FilterList({listobj:this,$parent:this.$w.find('.list-filters').toggle(true),doctype:this.doctype,filter_fields:this.filter_fields});},clear:function(){this.data=[];this.$w.find('.result-list').empty();this.$w.find('.result').toggle(true);this.$w.find('.no-result').toggle(false);this.start=0;},run:function(){var me=this;var a0=arguments[0];var a1=arguments[1];if(a0&&typeof a0=='function')
this.onrun=a0;if(a0&&a0.callback) this.onrun=a0;if(a0&&a0.callback)
this.onrun=a0.callback;if(!a1&&!(a0&&a0.append)) this.onrun=a0.callback;if(!a1&&!(a0&&a0.append))
this.start=0;me.set_working(true);wn.call({method:this.opts.method||'webnotes.widgets.query_builder.runquery',args:this.get_call_args(),callback:function(r){me.set_working(false);me.render_results(r)},no_spinner:this.opts.no_loading});},set_working:function(flag){this.$w.find('.img-load').toggle(flag);},get_call_args:function(){if(!this.method){this.query=this.get_query?this.get_query():this.query;this.add_limits();var args={query_max:this.query_max,as_dict:1} this.start=0;me.set_working(true);wn.call({method:this.opts.method||'webnotes.widgets.query_builder.runquery',args:this.get_call_args(a0),callback:function(r){me.set_working(false);me.render_results(r)},no_spinner:this.opts.no_loading});},set_working:function(flag){this.$w.find('.img-load').toggle(flag);},get_call_args:function(opts){if(!this.method){this.query=this.get_query?this.get_query():this.query;this.add_limits();var args={query_max:this.query_max,as_dict:1}
args.simple_query=this.query;}else{var args={limit_start:this.start,limit_page_length:this.page_length}} args.simple_query=this.query;}else{var args={limit_start:this.start,limit_page_length:this.page_length}}
if(this.args) if(this.args)
$.extend(args,this.args) $.extend(args,this.args)
if(this.get_args){$.extend(args,this.get_args());} if(this.get_args){$.extend(args,this.get_args(opts));}
return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}} return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}}
if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);} if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);}
this.start+=m;if(values.length>=this.page_length) this.start+=m;if(values.length>=this.page_length)
@@ -737,7 +755,7 @@ function loadreport(dt,rep_name,onload){if(rep_name)
wn.set_route('Report',dt,rep_name);else wn.set_route('Report',dt,rep_name);else
wn.set_route('Report',dt);} wn.set_route('Report',dt);}
function loaddoc(doctype,name,onload){wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){_f.edit_record(doctype,name);}else{wn.set_route('Form',doctype,name);}})} function loaddoc(doctype,name,onload){wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){_f.edit_record(doctype,name);}else{wn.set_route('Form',doctype,name);}})}
var load_doc=loaddoc;function new_doc(doctype,onload,in_dialog,on_save_callback,cdt,cdn,cnic){doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){_f.edit_record(doctype,'New '+doctype);}else{wn.set_route('Form',doctype,'New '+doctype);}})} var load_doc=loaddoc;function new_doc(doctype,onload,in_dialog,on_save_callback,cdt,cdn,cnic){doctype=get_label_doctype(doctype);wn.model.with_doctype(doctype,function(){if(locals.DocType[doctype].in_dialog){var new_name=LocalDB.create(doctype);_f.edit_record(doctype,new_name);}else{wn.views.formview.create(doctype);}})}
var newdoc=new_doc;var pscript={};function loadpage(page_name,call_back,no_history){wn.set_route(page_name);} var newdoc=new_doc;var pscript={};function loadpage(page_name,call_back,no_history){wn.set_route(page_name);}
function loaddocbrowser(dt){wn.set_route('List',dt);} function loaddocbrowser(dt){wn.set_route('List',dt);}
/* /*
@@ -797,14 +815,8 @@ var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_docli
Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(fields[dt])var d=fields[dt][fn];if(d)return d;} Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(fields[dt])var d=fields[dt][fn];if(d)return d;}
return{};} return{};}
Meta.set_field_property=function(fn,key,val,doc){if(!doc&&(cur_frm.doc))doc=cur_frm.doc;try{local_dt[doc.doctype][doc.name][fn][key]=val;refresh_field(fn);}catch(e){alert("Client Script Error: Unknown values for "+doc.name+','+fn+'.'+key+'='+val);}} Meta.set_field_property=function(fn,key,val,doc){if(!doc&&(cur_frm.doc))doc=cur_frm.doc;try{local_dt[doc.doctype][doc.name][fn][key]=val;refresh_field(fn);}catch(e){alert("Client Script Error: Unknown values for "+doc.name+','+fn+'.'+key+'='+val);}}
function get_doctype_label(dt){if(session.dt_labels&&session.dt_labels[dt]) function get_doctype_label(dt){return dt}
return session.dt_labels[dt] function get_label_doctype(label){return label}
else
return dt}
function get_label_doctype(label){if(session.rev_dt_labels&&session.rev_dt_labels[label])
return session.rev_dt_labels[label]
else
return label}
var getchildren=LocalDB.getchildren;var get_field=Meta.get_field;var createLocal=LocalDB.create; var getchildren=LocalDB.getchildren;var get_field=Meta.get_field;var createLocal=LocalDB.create;
/* /*
* lib/js/legacy/model/doclist.js * lib/js/legacy/model/doclist.js
@@ -818,8 +830,10 @@ function expand_doclist(docs){var l=[];for(var i=0;i<docs._vl.length;i++)
l[l.length]=zip(docs._kl[docs._vl[i][0]],docs._vl[i]);return l;} l[l.length]=zip(docs._kl[docs._vl[i][0]],docs._vl[i]);return l;}
function zip(k,v){var obj={};for(var i=0;i<k.length;i++){obj[k[i]]=v[i];} function zip(k,v){var obj={};for(var i=0;i<k.length;i++){obj[k[i]]=v[i];}
return obj;} return obj;}
function save_doclist(dt,dn,save_action,onsave,onerr){var doc=locals[dt][dn];var doctype=locals['DocType'][dt];var tmplist=[];var doclist=make_doclist(dt,dn,1);var all_clear=true;if(save_action!='Cancel'){for(var n in doclist){var tmp=check_required(doclist[n].doctype,doclist[n].name,doclist[0].doctype);if(doclist[n].docstatus+''!='2'&&all_clear) function save_doclist(dt,dn,save_action,onsave,onerr){var doc=locals[dt][dn];var doctype=locals['DocType'][dt];var tmplist=[];var doclist=make_doclist(dt,dn,1);var all_reqd_ok=true;if(save_action!='Cancel'){for(var n in doclist){var reqd_ok=check_required(doclist[n].doctype,doclist[n].name,doclist[0].doctype);if(doclist[n].docstatus+''!='2'&&all_reqd_ok)
all_clear=tmp;}} all_reqd_ok=reqd_ok;}}
if(!all_reqd_ok){onerr()
return;}
var _save=function(){$c('webnotes.widgets.form.save.savedocs',{'docs':compress_doclist(doclist),'docname':dn,'action':save_action,'user':user},function(r,rtxt){if(f){f.savingflag=false;} var _save=function(){$c('webnotes.widgets.form.save.savedocs',{'docs':compress_doclist(doclist),'docname':dn,'action':save_action,'user':user},function(r,rtxt){if(f){f.savingflag=false;}
if(r.saved){if(onsave)onsave(r);}else{if(onerr)onerr(r);}},function(){if(f){f.savingflag=false;}},0,(f?'Saving...':''));} if(r.saved){if(onsave)onsave(r);}else{if(onerr)onerr(r);}},function(){if(f){f.savingflag=false;}},0,(f?'Saving...':''));}
if(doc.__islocal&&(doctype&&doctype.autoname&&doctype.autoname.toLowerCase()=='prompt')){var newname=prompt('Enter the name of the new '+dt,'');if(newname){doc.__newname=strip(newname);_save();}else{msgprint('Not Saved');onerr();}}else{_save();}} if(doc.__islocal&&(doctype&&doctype.autoname&&doctype.autoname.toLowerCase()=='prompt')){var newname=prompt('Enter the name of the new '+dt,'');if(newname){doc.__newname=strip(newname);_save();}else{msgprint('Not Saved');onerr();}}else{_save();}}
@@ -828,57 +842,28 @@ if(all_clear)all_clear=false;}}
if(errfld.length)msgprint('<b>Mandatory fields required in '+ if(errfld.length)msgprint('<b>Mandatory fields required in '+
(doc.parenttype?(fields[doc.parenttype][doc.parentfield].label+' (Table)'):get_doctype_label(doc.doctype))+':</b>\n'+errfld.join('\n'));return all_clear;} (doc.parenttype?(fields[doc.parenttype][doc.parentfield].label+' (Table)'):get_doctype_label(doc.doctype))+':</b>\n'+errfld.join('\n'));return all_clear;}
/* /*
* lib/js/legacy/app.js * lib/js/wn/app.js
*/ */
var popup_cont;var session={};if(!wn)var wn={};function startup(){popup_cont=$a(document.getElementsByTagName('body')[0],'div');var setup_globals=function(r){wn.boot=r;profile=r.profile;user=r.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;home_page=r.home_page;_p.letter_heads=r.letter_heads;sys_defaults=r.sysdefaults;session.rt=profile.can_read;if(r.ipinfo)session.ipinfo=r.ipinfo;session.dt_labels=r.dt_labels;session.rev_dt_labels={} wn.Application=Class.extend({init:function(){this.load_bootinfo();this.make_page_container();this.make_nav_bar();this.set_favicon();$(document).trigger('startup');wn.route();},load_bootinfo:function(){LocalDB.sync(wn.boot.docs);wn.user=wn.boot.profile.name;wn.control_panel=wn.boot.control_panel;if(wn.boot.error_messages)
if(r.dt_labels){for(key in r.dt_labels)session.rev_dt_labels[r.dt_labels[key]]=key;}
wn.control_panel=r.control_panel;}
var setup_viewport=function(){wn.container=new wn.views.Container();if(user=='Guest')
user_defaults.hide_webnotes_toolbar=1;if(!cint(user_defaults.hide_webnotes_toolbar)||user=='Administrator'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}
$(document).trigger('startup');try{if(wn.control_panel.custom_startup_code)
eval(wn.control_panel.custom_startup_code);}catch(e){errprint(e);}
var t=to_open();if(t){window.location.hash=t;set_favicon();}else if(home_page){loadpage(home_page);}
wn.route();$dh('startup_div');$ds('body_div');}
var callback=function(r,rt){if(r.exc)console.log(r.exc);setup_globals(r);setup_viewport();}
if(wn.boot){LocalDB.sync(wn.boot.docs);callback(wn.boot,'');if(wn.boot.error_messages)
console.log(wn.boot.error_messages) console.log(wn.boot.error_messages)
if(wn.boot.server_messages) if(wn.boot.server_messages)
msgprint(wn.boot.server_messages);}else{if($i('startup_div')) msgprint(wn.boot.server_messages);this.set_globals();},set_globals:function(){profile=wn.boot.profile;user=wn.boot.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;sys_defaults=wn.boot.sysdefaults;},make_page_container:function(){wn.container=new wn.views.Container();wn.views.make_403();wn.views.make_404();$('#startup_div').toggle(false);$('#body_div').toggle(true);},make_nav_bar:function(){if(wn.user!='Guest'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}},logout:function(){var me=this;wn.call({method:'logout',callback:function(r){if(r.exc){console.log(r.exc);return;}
$c('startup',{},callback,null,1);}} me.redirect_to_login();}})},redirect_to_login:function(){window.location.hash='';window.location.reload();},set_favicon:function(){var link=$('link[type="image/x-icon"]').remove().attr("href");var favicon='\
function to_open(){if(get_url_arg('page')) <link rel="shortcut icon" href="'+link+'" type="image/x-icon"> \
return get_url_arg('page');var h=location.hash;if(h){return h.substr(1);}} <link rel="icon" href="'+link+'" type="image/x-icon">'
function logout(){$c('logout',args={},function(r,rt){if(r.exc){msgprint(r.exc);return;} $(favicon).appendTo('head');}})
redirect_to_login();});}
function redirect_to_login(){if(login_file)
window.location.href=login_file;else{window.location.reload();}}
_p.def_print_style_body="html, body, div, span, td { font-family: Arial, Helvetica; font-size: 12px; }"+"\npre { margin:0; padding:0;}"
_p.def_print_style_other="\n.simpletable, .noborder { border-collapse: collapse; margin-bottom: 10px;}"
+"\n.simpletable td {border: 1pt solid #000; vertical-align: top; padding: 2px; }"
+"\n.noborder td { vertical-align: top; }"
_p.go=function(html){var d=document.createElement('div')
d.innerHTML=html
$(d).printElement();}
_p.preview=function(html){var w=window.open('');w.document.write(html)
w.document.close();}
var resize_observers=[]
function set_resize_observer(fn){if(resize_observers.indexOf(fn)==-1)resize_observers.push(fn);}
window.onresize=function(){return;var ht=get_window_height();for(var i=0;i<resize_observers.length;i++){resize_observers[i](ht);}}
get_window_height=function(){var ht=window.innerHeight?window.innerHeight:document.documentElement.offsetHeight?document.documentElement.offsetHeight:document.body.offsetHeight;return ht;}
function set_favicon(){var link=$('link[type="image/x-icon"]').remove().attr("href");var favicon='\
<link rel="shortcut icon" href="'+link+'" type="image/x-icon"> \
<link rel="icon" href="'+link+'" type="image/x-icon">'
$(favicon).appendTo('head');}
/* /*
* js/app.js * js/app.js
*/ */
wn.app={name:'ERPNext',license:'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is',source:'https://github.com/webnotes/erpnext',publisher:'Web Notes Technologies Pvt Ltd, Mumbai',copyright:'&copy; Web Notes Technologies Pvt Ltd',version:'2.'+window._version_number} wn.app={name:'ERPNext',license:'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is',source:'https://github.com/webnotes/erpnext',publisher:'Web Notes Technologies Pvt Ltd, Mumbai',copyright:'&copy; Web Notes Technologies Pvt Ltd',version:'2.'+window._version_number}
wn.modules_path='erpnext';wn.settings.no_history=true;$(document).bind('ready',function(){startup();});$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next\ wn.modules_path='erpnext';$(document).bind('toolbar_setup',function(){$('.brand').html('<b>erp</b>next\
<i class="icon-home icon-white navbar-icon-home" ></i>').hover(function(){$(this).find('.icon-home').addClass('navbar-icon-home-hover');},function(){$(this).find('.icon-home').removeClass('navbar-icon-home-hover');});}); <i class="icon-home icon-white navbar-icon-home" ></i>').hover(function(){$(this).find('.icon-home').addClass('navbar-icon-home-hover');},function(){$(this).find('.icon-home').removeClass('navbar-icon-home-hover');});});
/* /*
* erpnext/startup/startup.js * erpnext/startup/startup.js
*/ */
var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'} var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'}
erpnext.startup.set_globals=function(){pscript.is_erpnext_saas=cint(wn.control_panel.sync_with_gateway) erpnext.startup.set_globals=function(){wn.control_panel.sync_with_gateway=wn.boot.sync_with_gateway
pscript.is_erpnext_saas=cint(wn.control_panel.sync_with_gateway)
if(inList(user_roles,'System Manager'))is_system_manager=1;} if(inList(user_roles,'System Manager'))is_system_manager=1;}
erpnext.startup.start=function(){$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);} erpnext.startup.start=function(){$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);}
if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);} if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);}

View File

@@ -1,19 +1,3 @@
// ERPNext - web based ERP (http://erpnext.com)
// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
wn.app = { wn.app = {
name: 'ERPNext', name: 'ERPNext',
license: 'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is', license: 'GNU/GPL - Usage Condition: All "erpnext" branding must be kept as it is',
@@ -24,11 +8,6 @@ wn.app = {
} }
wn.modules_path = 'erpnext'; wn.modules_path = 'erpnext';
wn.settings.no_history = true;
$(document).bind('ready', function() {
startup();
});
$(document).bind('toolbar_setup', function() { $(document).bind('toolbar_setup', function() {
$('.brand').html('<b>erp</b>next\ $('.brand').html('<b>erp</b>next\

View File

@@ -1 +0,0 @@
1694

256
wnf.py
View File

@@ -1,256 +0,0 @@
#!/usr/bin/env python
# ERPNext - web based ERP (http://erpnext.com)
# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os, sys
def replace_code(start, txt1, txt2, extn, search=None):
"""replace all txt1 by txt2 in files with extension (extn)"""
import webnotes.utils
import os, re
esc = webnotes.utils.make_esc('[]')
if not search: search = esc(txt1)
for wt in os.walk(start, followlinks=1):
for fn in wt[2]:
if fn.split('.')[-1]==extn:
fpath = os.path.join(wt[0], fn)
if fpath != '/var/www/erpnext/erpnext/patches/jan_mar_2012/rename_dt.py': # temporary
with open(fpath, 'r') as f:
content = f.read()
if re.search(search, content):
res = search_replace_with_prompt(fpath, txt1, txt2)
if res == 'skip':
return 'skip'
def search_replace_with_prompt(fpath, txt1, txt2):
""" Search and replace all txt1 by txt2 in the file with confirmation"""
from termcolor import colored
with open(fpath, 'r') as f:
content = f.readlines()
tmp = []
for c in content:
if c.find(txt1) != -1:
print '\n', fpath
print colored(txt1, 'red').join(c[:-1].split(txt1))
a = ''
while a.lower() not in ['y', 'n', 'skip']:
a = raw_input('Do you want to Change [y/n/skip]?')
if a.lower() == 'y':
c = c.replace(txt1, txt2)
elif a.lower() == 'skip':
return 'skip'
tmp.append(c)
with open(fpath, 'w') as f:
f.write(''.join(tmp))
print colored('Updated', 'green')
def setup_options():
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-d", "--db",
dest="db_name",
help="Apply the patches on given db")
# build
parser.add_option("-b", "--build", default=False, action="store_true",
help="minify + concat js files")
parser.add_option("-c", "--clear", default=False, action="store_true",
help="increment version")
# git
parser.add_option("--status", default=False, action="store_true",
help="git status")
parser.add_option("--pull", nargs=2, default=False,
metavar = "remote branch",
help="git pull (both repos)")
parser.add_option("--push", nargs=3, default=False,
metavar = "remote branch comment",
help="git commit + push (both repos) [remote] [branch] [comment]")
parser.add_option("-l", "--latest",
action="store_true", dest="run_latest", default=False,
help="Apply the latest patches")
# patch
parser.add_option("-p", "--patch", nargs=1, dest="patch_list", metavar='patch_module',
action="append",
help="Apply patch")
parser.add_option("-f", "--force",
action="store_true", dest="force", default=False,
help="Force Apply all patches specified using option -p or --patch")
parser.add_option('--reload_doc', nargs=3, metavar = "module doctype docname",
help="reload doc")
parser.add_option('--export_doc', nargs=2, metavar = "doctype docname",
help="export doc")
# install
parser.add_option('--install', nargs=3, metavar = "rootpassword dbname source",
help="install fresh db")
# diff
parser.add_option('--diff_ref_file', nargs=0, \
help="Get missing database records and mismatch properties, with file as reference")
parser.add_option('--diff_ref_db', nargs=0, \
help="Get missing .txt files and mismatch properties, with database as reference")
# scheduler
parser.add_option('--run_scheduler', default=False, action="store_true",
help="Trigger scheduler")
parser.add_option('--run_scheduler_event', nargs=1, metavar="[all|daily|weekly|monthly]",
help="Run scheduler event")
# misc
parser.add_option("--replace", nargs=3, default=False,
metavar = "search replace_by extension",
help="file search-replace")
parser.add_option("--cci", nargs=1, metavar="CacheItem Key or all",
help="Clear Cache Item")
parser.add_option("--sync_all", help="Synchronize all DocTypes using txt files",
nargs=0)
parser.add_option("--sync", help="Synchronize given DocType using txt file",
nargs=2, metavar="module doctype (use their folder names)")
return parser.parse_args()
def run():
sys.path.append('lib')
sys.path.append('lib/py')
import webnotes
import webnotes.defs
sys.path.append(webnotes.defs.modules_path)
(options, args) = setup_options()
from webnotes.db import Database
import webnotes.modules.patch_handler
# connect
if options.db_name is not None:
webnotes.connect(options.db_name)
# build
if options.build:
import build.project
build.project.build()
elif options.clear:
from build.project import increment_version
print "Version:" + str(increment_version())
# code replace
elif options.replace:
replace_code('.', options.replace[0], options.replace[1], options.replace[2])
# git
elif options.status:
os.system('git status')
os.chdir('lib')
os.system('git status')
elif options.pull:
os.system('git pull %s %s' % (options.pull[0], options.pull[1]))
os.chdir('lib')
os.system('git pull %s %s' % (options.pull[0], options.pull[1]))
elif options.push:
os.system('git commit -a -m "%s"' % options.push[2])
os.system('git push %s %s' % (options.push[0], options.push[1]))
os.chdir('lib')
os.system('git commit -a -m "%s"' % options.push[2])
os.system('git push %s %s' % (options.push[0], options.push[1]))
# patch
elif options.patch_list:
# clear log
webnotes.modules.patch_handler.log_list = []
# run individual patches
for patch in options.patch_list:
webnotes.modules.patch_handler.run_single(\
patchmodule = patch, force = options.force)
print '\n'.join(webnotes.modules.patch_handler.log_list)
# reload
elif options.reload_doc:
webnotes.modules.patch_handler.reload_doc(\
{"module":options.reload_doc[0], "dt":options.reload_doc[1], "dn":options.reload_doc[2]})
print '\n'.join(webnotes.modules.patch_handler.log_list)
elif options.export_doc:
from webnotes.modules import export_doc
export_doc(options.export_doc[0], options.export_doc[1])
# run all pending
elif options.run_latest:
webnotes.modules.patch_handler.run_all()
print '\n'.join(webnotes.modules.patch_handler.log_list)
elif options.install:
from webnotes.install_lib.install import Installer
inst = Installer('root', options.install[0])
inst.import_from_db(options.install[1], source_path=options.install[2], \
password='admin', verbose = 1)
elif options.diff_ref_file is not None:
import webnotes.modules.diff
webnotes.modules.diff.diff_ref_file()
elif options.diff_ref_db is not None:
import webnotes.modules.diff
webnotes.modules.diff.diff_ref_db()
elif options.run_scheduler:
import webnotes.utils.scheduler
print webnotes.utils.scheduler.execute()
elif options.run_scheduler_event is not None:
import webnotes.utils.scheduler
print webnotes.utils.scheduler.trigger('execute_' + options.run_scheduler_event)
elif options.cci is not None:
if options.cci=='all':
webnotes.conn.sql("DELETE FROM __CacheItem")
else:
from webnotes.utils.cache import CacheItem
CacheItem(options.cci).clear()
elif options.sync_all is not None:
import webnotes.model.sync
webnotes.model.sync.sync_all(options.force or 0)
elif options.sync is not None:
import webnotes.model.sync
webnotes.model.sync.sync(options.sync[0], options.sync[1], options.force or 0)
# print messages
if webnotes.message_log:
print '\n'.join(webnotes.message_log)
if __name__=='__main__':
run()