Merge branch 'master' into edge
This commit is contained in:
commit
d8cf1d74ba
@ -750,8 +750,9 @@ class DocType(SellingController):
|
||||
for item in self.doclist.get({"parentfield": "entries"}):
|
||||
self.check_expense_account(item)
|
||||
|
||||
gl_entries += self.get_gl_entries_for_stock(item.expense_account,
|
||||
-1*item.buying_amount, cost_center=item.cost_center)
|
||||
if item.buying_amount:
|
||||
gl_entries += self.get_gl_entries_for_stock(item.expense_account,
|
||||
-1*item.buying_amount, cost_center=item.cost_center)
|
||||
|
||||
def make_pos_gl_entries(self, gl_entries):
|
||||
if cint(self.doc.is_pos) and self.doc.cash_bank_account and self.doc.paid_amount:
|
||||
|
146
config.json
Normal file
146
config.json
Normal file
@ -0,0 +1,146 @@
|
||||
{
|
||||
"modules": {
|
||||
"Selling": {
|
||||
"link": "selling-home",
|
||||
"color": "#3f4901",
|
||||
"icon": "icon-tag",
|
||||
"type": "module"
|
||||
},
|
||||
"Accounts": {
|
||||
"link": "accounts-home",
|
||||
"color": "#025770",
|
||||
"icon": "icon-money",
|
||||
"type": "module"
|
||||
},
|
||||
"Stock": {
|
||||
"type": "module",
|
||||
"link": "stock-home",
|
||||
"color": "#a66a02",
|
||||
"icon": "icon-truck"
|
||||
},
|
||||
"Buying": {
|
||||
"type": "module",
|
||||
"link": "buying-home",
|
||||
"color": "#8F0222",
|
||||
"icon": "icon-shopping-cart"
|
||||
},
|
||||
"Support": {
|
||||
"type": "module",
|
||||
"link": "support-home",
|
||||
"color": "#410169",
|
||||
"icon": "icon-phone"
|
||||
},
|
||||
"Projects": {
|
||||
"type": "module",
|
||||
"link": "projects-home",
|
||||
"color": "#473b7f",
|
||||
"icon": "icon-tasks"
|
||||
},
|
||||
"Manufacturing": {
|
||||
"type": "module",
|
||||
"link": "manufacturing-home",
|
||||
"color": "#590116",
|
||||
"icon": "icon-magic"
|
||||
},
|
||||
"Website": {
|
||||
"type": "module",
|
||||
"link": "website-home",
|
||||
"color": "#968c00",
|
||||
"icon": "icon-globe"
|
||||
},
|
||||
"HR": {
|
||||
"type": "module",
|
||||
"link": "hr-home",
|
||||
"color": "#018d6c",
|
||||
"label": "Human Resources",
|
||||
"icon": "icon-group"
|
||||
},
|
||||
"Setup": {
|
||||
"type": "setup",
|
||||
"link": "Setup",
|
||||
"color": "#484848",
|
||||
"icon": "icon-wrench"
|
||||
},
|
||||
"Activity": {
|
||||
"type": "page",
|
||||
"link": "activity",
|
||||
"color": "#633501",
|
||||
"icon": "icon-play",
|
||||
"label": "Activity"
|
||||
},
|
||||
"Knowledge Base": {
|
||||
"type": "page",
|
||||
"link": "questions",
|
||||
"color": "#01372b",
|
||||
"label": "Knowledge Base",
|
||||
"icon": "icon-question-sign"
|
||||
}
|
||||
},
|
||||
"web": {
|
||||
"pages": {
|
||||
"about": {
|
||||
"template": "app/website/templates/pages/about",
|
||||
"args_method": "website.doctype.about_us_settings.about_us_settings.get_args"
|
||||
},
|
||||
"account": {
|
||||
"template": "app/website/templates/pages/account"
|
||||
},
|
||||
"attributions": {
|
||||
"template": "app/website/templates/pages/attributions"
|
||||
},
|
||||
"blog": {
|
||||
"template": "app/website/templates/pages/blog",
|
||||
"args_method": "website.helpers.blog.get_blog_template_args"
|
||||
},
|
||||
"contact": {
|
||||
"template": "app/website/templates/pages/contact",
|
||||
"args_doctype": "Contact Us Settings"
|
||||
},
|
||||
"index": {
|
||||
"template": "app/website/templates/pages/index"
|
||||
},
|
||||
"order": {
|
||||
"no_cache": true,
|
||||
"template": "app/website/templates/pages/order",
|
||||
"args_method": "selling.doctype.sales_order.sales_order.get_website_args"
|
||||
},
|
||||
"orders": {
|
||||
"template": "app/website/templates/pages/orders",
|
||||
"args_method": "selling.doctype.sales_order.sales_order.get_currency_and_number_format"
|
||||
},
|
||||
"product_search": {
|
||||
"template": "app/website/templates/pages/product_search"
|
||||
},
|
||||
"ticket": {
|
||||
"no_cache": true,
|
||||
"template": "app/website/templates/pages/ticket",
|
||||
"get_website_args": "support.doctype.support_ticket.support_ticket.get_website_args"
|
||||
},
|
||||
"tickets": {
|
||||
"template": "app/website/templates/pages/tickets"
|
||||
},
|
||||
"writers": {
|
||||
"template": "app/website/templates/pages/writers",
|
||||
"args_method": "website.helpers.blog.get_writers_args"
|
||||
}
|
||||
},
|
||||
"generators": {
|
||||
"Web Page": {
|
||||
"template": "app/website/templates/html/web_page.html",
|
||||
"condition_field": "published"
|
||||
},
|
||||
"Blog Post": {
|
||||
"template": "app/website/templates/html/blog_page.html",
|
||||
"condition_field": "published"
|
||||
},
|
||||
"Item": {
|
||||
"template": "app/website/templates/html/product_page.html",
|
||||
"condition_field": "show_in_website"
|
||||
},
|
||||
"Item Group":{
|
||||
"template": "app/website/templates/html/product_group.html",
|
||||
"condition_field": "show_in_website"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,21 +1,32 @@
|
||||
[
|
||||
{
|
||||
"owner": "Administrator",
|
||||
"creation": "2012-06-14 18:44:56",
|
||||
"docstatus": 0,
|
||||
"creation": "2012-02-29 11:59:13",
|
||||
"modified": "2013-04-03 14:59:38",
|
||||
"modified_by": "Administrator",
|
||||
"modified": "2012-02-29 12:11:46"
|
||||
"owner": "Administrator"
|
||||
},
|
||||
{
|
||||
"name": "__common__",
|
||||
"title": "Activity",
|
||||
"module": "Home",
|
||||
"doctype": "Page",
|
||||
"module": "Home",
|
||||
"name": "__common__",
|
||||
"page_name": "activity",
|
||||
"standard": "Yes"
|
||||
"standard": "Yes",
|
||||
"title": "Activity"
|
||||
},
|
||||
{
|
||||
"name": "activity",
|
||||
"doctype": "Page"
|
||||
"doctype": "Page Role",
|
||||
"name": "__common__",
|
||||
"parent": "activity",
|
||||
"parentfield": "roles",
|
||||
"parenttype": "Page",
|
||||
"role": "All"
|
||||
},
|
||||
{
|
||||
"doctype": "Page",
|
||||
"name": "activity"
|
||||
},
|
||||
{
|
||||
"doctype": "Page Role"
|
||||
}
|
||||
]
|
@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
@ -1,86 +0,0 @@
|
||||
/* Sprite CSS */
|
||||
|
||||
.case-border {
|
||||
border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
padding: 12px;
|
||||
border: 2px solid white;
|
||||
box-shadow: 0 0 4px 1px black;
|
||||
-moz-box-shadow: 0 0 4px 1px black;
|
||||
-webkit-box-shadow: 0 0 4px 1px black;
|
||||
-o-box-shadow: 0 0 4px 1px black;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.case-wrapper {
|
||||
margin: 24px;
|
||||
float: left;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.case-wrapper i {
|
||||
font-size: 32px;
|
||||
color: #f8f8f8;
|
||||
}
|
||||
|
||||
.case-label {
|
||||
color: white;
|
||||
padding-top: 10px;
|
||||
text-align: center;
|
||||
text-shadow: 1px 1px 2px #000, 1px 1px 2px #000, 1px 1px 2px #000, 0px 0px 2px #000;
|
||||
}
|
||||
|
||||
/* Hover and click effects */
|
||||
.case-border:hover, .circle:hover, .hover-effect {
|
||||
box-shadow: 0 0 2px 0px black, 0 0 4px 1px white !important;
|
||||
-moz-box-shadow: 0 0 2px 0px black, 0 0 4px 1px white !important;
|
||||
-webkit-box-shadow: 0 0 2px 0px black, 0 0 4px 1px white !important;
|
||||
-o-box-shadow: 0 0 2px 0px black, 0 0 10px 1px white !important;
|
||||
}
|
||||
|
||||
.case-border:active, .case-border:focus, .case-border-click {
|
||||
transform: scale(0.98, 0.98);
|
||||
-ms-transform: scale(0.98, 0.98); /* IE 9 */
|
||||
-webkit-transform: scale(0.98, 0.98); /* Safari and Chrome */
|
||||
-o-transform: scale(0.98, 0.98); /* Opera */
|
||||
-moz-transform: scale(0.98, 0.98); /* Firefox */
|
||||
}
|
||||
|
||||
.circle:active, .circle:focus, .circle-click {
|
||||
transform: scale(1, 1);
|
||||
-ms-transform: scale(1, 1); /* IE 9 */
|
||||
-webkit-transform: scale(1, 1); /* Safari and Chrome */
|
||||
-o-transform: scale(1, 1); /* Opera */
|
||||
-moz-transform: scale(1, 1); /* Firefox */
|
||||
}
|
||||
|
||||
.circle {
|
||||
border-radius: 30px;
|
||||
-moz-border-radius: 30px;
|
||||
-webkit-border-radius: 30px;
|
||||
height: 15px;
|
||||
line-height: 12px;
|
||||
min-width: 15px;
|
||||
background: #B00D07;
|
||||
padding: 3px;
|
||||
float: right;
|
||||
margin-top: -12px;
|
||||
margin-right: 10px;
|
||||
border: 2px solid white;
|
||||
box-shadow: 0 0 4px 1px black;
|
||||
-moz-box-shadow: 0 0 4px 1px black;
|
||||
-webkit-box-shadow: 0 0 4px 1px black;
|
||||
-o-box-shadow: 0 0 4px 1px black;
|
||||
}
|
||||
|
||||
.circle-text {
|
||||
color: white;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
@ -1,6 +0,0 @@
|
||||
<div style="min-height: 500px; background: None; text-align: center;
|
||||
margin: 0px auto;">
|
||||
<div id="icon-grid">
|
||||
</div>
|
||||
</div>
|
||||
<div style="clear: both"></div>
|
@ -1,101 +0,0 @@
|
||||
wn.provide('erpnext.desktop');
|
||||
|
||||
erpnext.desktop.refresh = function() {
|
||||
erpnext.desktop.render();
|
||||
|
||||
$("#icon-grid").sortable({
|
||||
update: function() {
|
||||
new_order = [];
|
||||
$("#icon-grid .case-wrapper").each(function(i, e) {
|
||||
new_order.push($(this).attr("data-name"));
|
||||
});
|
||||
wn.defaults.set_default("_desktop_items", new_order);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
erpnext.desktop.render = function() {
|
||||
document.title = "Desktop";
|
||||
var add_icon = function(m) {
|
||||
var module = wn.modules[m];
|
||||
if(!module.label)
|
||||
module.label = m;
|
||||
module.name = m;
|
||||
module.label = wn._(module.label);
|
||||
module.gradient_css = wn.get_gradient_css(module.color, 45);
|
||||
module._link = module.link.toLowerCase().replace("/", "-");
|
||||
|
||||
$module_icon = $(repl('\
|
||||
<div id="module-icon-%(_link)s" class="case-wrapper" \
|
||||
data-name="%(name)s" data-link="%(link)s">\
|
||||
<div class="case-border" style="%(gradient_css)s">\
|
||||
<i class="%(icon)s"></i>\
|
||||
</div>\
|
||||
<div class="case-label">%(label)s</div>\
|
||||
</div>', module)).click(function() {
|
||||
wn.set_route($(this).attr("data-link"));
|
||||
}).css({
|
||||
cursor:"pointer"
|
||||
}).appendTo("#icon-grid");
|
||||
}
|
||||
|
||||
// modules
|
||||
var modules_list = wn.user.get_desktop_items();
|
||||
$.each(modules_list, function(i, m) {
|
||||
if(!in_list(['Setup', 'Core'], m) && wn.boot.profile.allow_modules.indexOf(m)!=-1)
|
||||
add_icon(m);
|
||||
})
|
||||
|
||||
// setup
|
||||
if(user_roles.indexOf('System Manager')!=-1)
|
||||
add_icon('Setup')
|
||||
|
||||
// notifications
|
||||
erpnext.desktop.show_pending_notifications();
|
||||
|
||||
}
|
||||
|
||||
erpnext.desktop.show_pending_notifications = function() {
|
||||
var add_circle = function(str_module, id, title) {
|
||||
var module = $('#'+str_module);
|
||||
module.prepend(
|
||||
repl('<div id="%(id)s" class="circle" title="%(title)s" style="display: None">\
|
||||
<span class="circle-text"></span>\
|
||||
</div>', {id: id, title: wn._(title)}));
|
||||
|
||||
var case_border = module.find('.case-border');
|
||||
var circle = module.find('.circle');
|
||||
|
||||
var add_hover_and_click = function(primary, secondary, hover_class, click_class) {
|
||||
primary
|
||||
.hover(
|
||||
function() { secondary.addClass(hover_class); },
|
||||
function() { secondary.removeClass(hover_class); })
|
||||
.mousedown(function() { secondary.addClass(click_class); })
|
||||
.mouseup(function() { secondary.removeClass(click_class); })
|
||||
.focusin(function() { $(this).mousedown(); })
|
||||
.focusout(function() { $(this).mouseup(); })
|
||||
}
|
||||
|
||||
add_hover_and_click(case_border, circle, 'hover-effect', 'circle-click');
|
||||
add_hover_and_click(circle, case_border, 'hover-effect', 'case-border-click');
|
||||
|
||||
}
|
||||
|
||||
add_circle('module-icon-messages', 'unread_messages', 'Unread Messages');
|
||||
add_circle('module-icon-support-home', 'open_support_tickets', 'Open Support Tickets');
|
||||
add_circle('module-icon-todo', 'things_todo', 'Things To Do');
|
||||
add_circle('module-icon-calendar-event', 'todays_events', 'Todays Events');
|
||||
add_circle('module-icon-projects-home', 'open_tasks', 'Open Tasks');
|
||||
add_circle('module-icon-questions', 'unanswered_questions', 'Unanswered Questions');
|
||||
add_circle('module-icon-selling-home', 'open_leads', 'Open Leads');
|
||||
|
||||
erpnext.update_messages();
|
||||
|
||||
}
|
||||
|
||||
pscript.onload_desktop = function() {
|
||||
// load desktop
|
||||
erpnext.desktop.refresh();
|
||||
}
|
||||
|
@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"creation": "2012-06-14 18:44:56",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-02-12 18:11:00",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
{
|
||||
"doctype": "Page",
|
||||
"module": "Home",
|
||||
"name": "__common__",
|
||||
"page_name": "desktop",
|
||||
"standard": "Yes",
|
||||
"title": "Desktop"
|
||||
},
|
||||
{
|
||||
"doctype": "Page Role",
|
||||
"name": "__common__",
|
||||
"parent": "desktop",
|
||||
"parentfield": "roles",
|
||||
"parenttype": "Page",
|
||||
"role": "All"
|
||||
},
|
||||
{
|
||||
"doctype": "Page",
|
||||
"name": "desktop"
|
||||
},
|
||||
{
|
||||
"doctype": "Page Role"
|
||||
}
|
||||
]
|
11
patches/april_2013/p04_reverse_modules_list.py
Normal file
11
patches/april_2013/p04_reverse_modules_list.py
Normal file
@ -0,0 +1,11 @@
|
||||
import webnotes, json
|
||||
import webnotes.utils
|
||||
|
||||
def execute():
|
||||
modules = webnotes.get_config().modules
|
||||
|
||||
ml = json.loads(webnotes.conn.get_global("modules_list") or "[]")
|
||||
|
||||
webnotes.conn.set_global("hidden_modules",
|
||||
json.dumps(list(set(modules.keys()).difference(set(ml)))))
|
||||
|
@ -237,5 +237,6 @@ patch_list = [
|
||||
'execute:webnotes.reload_doc("selling", "Print Format", "Quotation Classic") # 2013-04-02',
|
||||
'execute:webnotes.reload_doc("selling", "Print Format", "Quotation Modern") # 2013-04-02',
|
||||
'execute:webnotes.reload_doc("selling", "Print Format", "Quotation Spartan") # 2013-04-02',
|
||||
|
||||
"patches.april_2013.p04_reverse_modules_list",
|
||||
"execute:webnotes.delete_doc('Search Criteria', 'time_log_summary')"
|
||||
]
|
@ -1,8 +1,8 @@
|
||||
[
|
||||
{
|
||||
"creation": "2013-03-05 10:52:02",
|
||||
"creation": "2013-03-06 14:08:07",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-03-05 10:54:07",
|
||||
"modified": "2013-04-03 15:51:32",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
@ -48,6 +48,7 @@
|
||||
"label": "Naming Series",
|
||||
"options": "TL-",
|
||||
"permlevel": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
@ -57,6 +58,7 @@
|
||||
"in_list_view": 1,
|
||||
"label": "From Time",
|
||||
"permlevel": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
@ -66,6 +68,7 @@
|
||||
"in_list_view": 0,
|
||||
"label": "To Time",
|
||||
"permlevel": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
@ -80,7 +83,8 @@
|
||||
"doctype": "DocField",
|
||||
"fieldname": "column_break_3",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
@ -101,6 +105,7 @@
|
||||
"label": "Activity Type",
|
||||
"options": "Activity Type",
|
||||
"permlevel": 0,
|
||||
"read_only": 0,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
@ -109,7 +114,8 @@
|
||||
"fieldtype": "Link",
|
||||
"label": "Task",
|
||||
"options": "Task",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
@ -117,26 +123,30 @@
|
||||
"fieldtype": "Check",
|
||||
"in_list_view": 1,
|
||||
"label": "Billable",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
"fieldname": "section_break_7",
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
"fieldname": "note",
|
||||
"fieldtype": "Text Editor",
|
||||
"label": "Note",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
"fieldname": "section_break_9",
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
@ -145,7 +155,8 @@
|
||||
"in_list_view": 1,
|
||||
"label": "Project",
|
||||
"options": "Project",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"description": "Will be updated when batched.",
|
||||
@ -171,7 +182,8 @@
|
||||
"doctype": "DocField",
|
||||
"fieldname": "column_break_16",
|
||||
"fieldtype": "Column Break",
|
||||
"permlevel": 0
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
@ -181,7 +193,8 @@
|
||||
"label": "File List",
|
||||
"no_copy": 1,
|
||||
"permlevel": 0,
|
||||
"print_hide": 1
|
||||
"print_hide": 1,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
@ -191,7 +204,8 @@
|
||||
"no_copy": 1,
|
||||
"options": "Time Log",
|
||||
"permlevel": 1,
|
||||
"print_hide": 1
|
||||
"print_hide": 1,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
|
@ -26,12 +26,6 @@ wn.module_page["Projects"] = [
|
||||
description: wn._("Batch Time Logs for billing."),
|
||||
doctype:"Time Log Batch"
|
||||
},
|
||||
{
|
||||
label: wn._("Timesheet"),
|
||||
description: wn._("[DEPRECATED] Timesheet for tasks."),
|
||||
doctype:"Timesheet"
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -62,8 +56,8 @@ wn.module_page["Projects"] = [
|
||||
icon: "icon-list",
|
||||
items: [
|
||||
{
|
||||
"label":wn._("Time Log Summary"),
|
||||
route: "Report2/Time Log/Time Log Summary",
|
||||
"label":wn._("Daily Time Log Summary"),
|
||||
route: "query-report/Daily Time Log Summary",
|
||||
doctype: "Time Log"
|
||||
},
|
||||
]
|
||||
|
@ -0,0 +1,16 @@
|
||||
wn.query_reports["Daily Time Log Summary"] = {
|
||||
"filters": [
|
||||
{
|
||||
"fieldname":"from_date",
|
||||
"label": "From Date",
|
||||
"fieldtype": "Datetime",
|
||||
"default": wn.datetime.get_today()
|
||||
},
|
||||
{
|
||||
"fieldname":"to_date",
|
||||
"label": "To Date",
|
||||
"fieldtype": "Datetime",
|
||||
"default": wn.datetime.get_today()
|
||||
},
|
||||
]
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
from __future__ import unicode_literals
|
||||
import webnotes
|
||||
|
||||
def execute(filters=None):
|
||||
if not filters: filters = {}
|
||||
columns = ["Employee::150", "From Datetime::120", "To Datetime::120", "Hours::70", "Task::150",
|
||||
"Project:Link/Project:120", "Status::70"]
|
||||
|
||||
profile_map = get_profile_map()
|
||||
|
||||
conditions = build_conditions(filters)
|
||||
time_logs = webnotes.conn.sql("""select * from `tabTime Log`
|
||||
where docstatus < 2 %s order by owner asc""" % (conditions,), filters, as_dict=1)
|
||||
|
||||
data = []
|
||||
profiles = [time_logs[0].owner]
|
||||
|
||||
for tl in time_logs:
|
||||
|
||||
if tl.owner not in profiles:
|
||||
profiles.append(tl.owner)
|
||||
data.append([])
|
||||
|
||||
data.append([profile_map[tl.owner], tl.from_time, tl.to_time, tl.hours,
|
||||
tl.task, tl.project, tl.status])
|
||||
|
||||
return columns, data
|
||||
|
||||
def get_profile_map():
|
||||
profiles = webnotes.conn.sql("""select name,
|
||||
concat(first_name, if(last_name, (' ' + last_name), '')) as fullname
|
||||
from tabProfile""", as_dict=1)
|
||||
profile_map = {}
|
||||
for p in profiles:
|
||||
profile_map.setdefault(p.name, []).append(p.fullname)
|
||||
|
||||
return profile_map
|
||||
|
||||
def build_conditions(filters):
|
||||
conditions = ""
|
||||
if filters.get("from_date"):
|
||||
conditions += " and from_time >= %(from_date)s"
|
||||
if filters.get("to_date"):
|
||||
conditions += " and to_time <= %(to_date)s"
|
||||
|
||||
return conditions
|
@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"creation": "2013-04-03 11:27:52",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-04-03 11:48:07",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
{
|
||||
"doctype": "Report",
|
||||
"is_standard": "Yes",
|
||||
"name": "__common__",
|
||||
"ref_doctype": "Time Log",
|
||||
"report_name": "Daily Time Log Summary",
|
||||
"report_type": "Script Report"
|
||||
},
|
||||
{
|
||||
"doctype": "Report",
|
||||
"name": "Daily Time Log Summary"
|
||||
}
|
||||
]
|
@ -1,22 +0,0 @@
|
||||
[
|
||||
{
|
||||
"creation": "2013-03-01 17:36:35",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-03-01 18:17:13",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
{
|
||||
"doctype": "Report",
|
||||
"is_standard": "Yes",
|
||||
"json": "{\"filters\":[],\"columns\":[[\"name\",\"Time Log\"],[\"status\",\"Time Log\"],[\"from_time\",\"Time Log\"],[\"hours\",\"Time Log\"],[\"activity_type\",\"Time Log\"],[\"owner\",\"Time Log\"],[\"billable\",\"Time Log\"],[\"time_log_batch\",\"Time Log\"],[\"sales_invoice\",\"Time Log\"]],\"sort_by\":\"Time Log.name\",\"sort_order\":\"desc\",\"sort_by_next\":\"\",\"sort_order_next\":\"desc\"}",
|
||||
"name": "__common__",
|
||||
"ref_doctype": "Time Log",
|
||||
"report_name": "Time Log Summary",
|
||||
"report_type": "Report Builder"
|
||||
},
|
||||
{
|
||||
"doctype": "Report",
|
||||
"name": "Time Log Summary"
|
||||
}
|
||||
]
|
@ -13,7 +13,6 @@
|
||||
"public/js/all-app.min.js": [
|
||||
"app/public/js/startup.js",
|
||||
"app/public/js/conf.js",
|
||||
"app/public/js/modules.js",
|
||||
"app/public/js/toolbar.js",
|
||||
"app/public/js/feature_setup.js",
|
||||
"app/public/js/utils.js",
|
||||
|
@ -1,105 +0,0 @@
|
||||
// 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.home_page = "desktop";
|
||||
wn.provide("wn.module_page");
|
||||
|
||||
$.extend(wn.modules, {
|
||||
"Selling": {
|
||||
link: "selling-home",
|
||||
color: "#3f4901",
|
||||
icon: "icon-tag"
|
||||
},
|
||||
"Accounts": {
|
||||
link: "accounts-home",
|
||||
color: "#025770",
|
||||
icon: "icon-money"
|
||||
},
|
||||
"Stock": {
|
||||
link: "stock-home",
|
||||
color: "#a66a02",
|
||||
icon: "icon-truck"
|
||||
},
|
||||
"Buying": {
|
||||
link: "buying-home",
|
||||
color: "#8F0222",
|
||||
icon: "icon-shopping-cart"
|
||||
},
|
||||
"Support": {
|
||||
link: "support-home",
|
||||
color: "#410169",
|
||||
icon: "icon-phone"
|
||||
},
|
||||
"Projects": {
|
||||
link: "projects-home",
|
||||
color: "#473b7f",
|
||||
icon: "icon-tasks"
|
||||
},
|
||||
"Manufacturing": {
|
||||
link: "manufacturing-home",
|
||||
color: "#590116",
|
||||
icon: "icon-magic"
|
||||
},
|
||||
"Website": {
|
||||
link: "website-home",
|
||||
color: "#968c00",
|
||||
icon: "icon-globe"
|
||||
},
|
||||
"HR": {
|
||||
link: "hr-home",
|
||||
color: "#018d6c",
|
||||
label: wn._("Human Resources"),
|
||||
icon: "icon-group"
|
||||
},
|
||||
"Setup": {
|
||||
link: "Setup",
|
||||
color: "#484848",
|
||||
icon: "icon-wrench"
|
||||
},
|
||||
"Activity": {
|
||||
link: "activity",
|
||||
color: "#633501",
|
||||
icon: "icon-play",
|
||||
label: wn._("Activity"),
|
||||
},
|
||||
"To Do": {
|
||||
link: "todo",
|
||||
color: "#febf04",
|
||||
label: wn._("To Do"),
|
||||
icon: "icon-check"
|
||||
},
|
||||
"Calendar": {
|
||||
link: "Calendar/Event",
|
||||
color: "#026584",
|
||||
label: wn._("Calendar"),
|
||||
icon: "icon-calendar"
|
||||
},
|
||||
"Messages": {
|
||||
link: "messages",
|
||||
color: "#8d016e",
|
||||
label: wn._("Messages"),
|
||||
icon: "icon-comments"
|
||||
},
|
||||
"Knowledge Base": {
|
||||
link: "questions",
|
||||
color: "#01372b",
|
||||
label: wn._("Knowledge Base"),
|
||||
icon: "icon-question-sign"
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
wn.provide('erpnext.module_page');
|
@ -31,11 +31,7 @@ erpnext.startup.start = function() {
|
||||
|
||||
if(user != 'Guest'){
|
||||
erpnext.setup_mousetrap();
|
||||
|
||||
// always allow apps
|
||||
wn.boot.profile.allow_modules = wn.boot.profile.allow_modules.concat(
|
||||
['To Do', 'Knowledge Base', 'Calendar', 'Activity', 'Messages'])
|
||||
|
||||
|
||||
// setup toolbar
|
||||
erpnext.toolbar.setup();
|
||||
|
||||
|
@ -74,12 +74,11 @@ erpnext.toolbar.add_modules = function() {
|
||||
}
|
||||
|
||||
// add to dropdown
|
||||
for(var i in modules_list) {
|
||||
var m = modules_list[i]
|
||||
if(m!='Setup' && wn.boot.profile.allow_modules.indexOf(m)!=-1 && wn.modules[m]) {
|
||||
$.each(modules_list,function(i, m) {
|
||||
if(m!='Setup') {
|
||||
$('.navbar .modules').append(_get_list_item(m));
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// setup for system manager
|
||||
if(user_roles.indexOf("System Manager")!=-1) {
|
||||
|
@ -1,8 +1,8 @@
|
||||
[
|
||||
{
|
||||
"creation": "2013-04-03 09:50:56",
|
||||
"creation": "2013-04-03 09:10:44",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-04-03 09:53:04",
|
||||
"modified": "2013-04-03 09:58:02",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
@ -34,7 +34,9 @@
|
||||
"parent": "Quotation",
|
||||
"parentfield": "permissions",
|
||||
"parenttype": "DocType",
|
||||
"read": 1
|
||||
"permlevel": 0,
|
||||
"read": 1,
|
||||
"report": 1
|
||||
},
|
||||
{
|
||||
"doctype": "DocType",
|
||||
@ -678,7 +680,7 @@
|
||||
"label": "Letter Head",
|
||||
"oldfieldname": "letter_head",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "\nDefault\nERP Grey Large\nERP LOGO\nERPNext Logo Black\nERPNext WT Logo",
|
||||
"options": "link:Letter Head",
|
||||
"print_hide": 1,
|
||||
"read_only": 0
|
||||
},
|
||||
@ -862,24 +864,11 @@
|
||||
"print_hide": 1,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 1,
|
||||
"report": 0,
|
||||
"role": "Sales Manager",
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
},
|
||||
{
|
||||
"amend": 1,
|
||||
"cancel": 1,
|
||||
"create": 1,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 0,
|
||||
"report": 1,
|
||||
"role": "Sales Manager",
|
||||
"submit": 1,
|
||||
"write": 1
|
||||
@ -889,8 +878,6 @@
|
||||
"cancel": 1,
|
||||
"create": 1,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 0,
|
||||
"report": 1,
|
||||
"role": "Sales User",
|
||||
"submit": 1,
|
||||
"write": 1
|
||||
@ -900,19 +887,6 @@
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 1,
|
||||
"report": 0,
|
||||
"role": "Sales User",
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 0,
|
||||
"report": 1,
|
||||
"role": "Customer",
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
@ -922,43 +896,17 @@
|
||||
"cancel": 1,
|
||||
"create": 1,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 0,
|
||||
"report": 1,
|
||||
"role": "Maintenance Manager",
|
||||
"submit": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 1,
|
||||
"report": 0,
|
||||
"role": "Maintenance Manager",
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
},
|
||||
{
|
||||
"amend": 1,
|
||||
"cancel": 1,
|
||||
"create": 1,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 0,
|
||||
"report": 1,
|
||||
"role": "Maintenance User",
|
||||
"submit": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 0,
|
||||
"doctype": "DocPerm",
|
||||
"permlevel": 1,
|
||||
"report": 0,
|
||||
"role": "Maintenance User",
|
||||
"submit": 0,
|
||||
"write": 0
|
||||
}
|
||||
]
|
@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
@ -1,14 +0,0 @@
|
||||
<div class="layout-wrapper">
|
||||
<a class="close" onclick="window.history.back();">×</a>
|
||||
<h1>Modules Setup</h1>
|
||||
<hr>
|
||||
<div class="help" style="width: 300px; float: right">
|
||||
Select checkbox to show / hide module.
|
||||
</div>
|
||||
<div id="modules-list">
|
||||
</div>
|
||||
<div>
|
||||
<button class="btn btn-small btn-primary" id="modules-update"
|
||||
onclick="wn.pages.modules_setup.update()">Update</button>
|
||||
</div>
|
||||
</div>
|
@ -1,51 +0,0 @@
|
||||
wn.require('lib/js/lib/jquery/jquery.ui.sortable.js');
|
||||
|
||||
$.extend(wn.pages.modules_setup, {
|
||||
modules: ['Activity', 'Accounts', 'Selling', 'Buying', 'Stock', 'Manufacturing', 'Projects',
|
||||
'Support', 'HR', 'Website', 'To Do', 'Messages', 'Calendar', 'Knowledge Base'],
|
||||
onload: function(wrapper) {
|
||||
wn.pages.modules_setup.refresh_page(JSON.parse(wn.boot.modules_list || "[]"));
|
||||
},
|
||||
refresh_page: function(ml) {
|
||||
$('#modules-list').empty();
|
||||
|
||||
// Hide Setup and Dashboard modules
|
||||
ml.indexOf('Setup')!=-1 && ml.splice(ml.indexOf('Setup'), 1);
|
||||
|
||||
// checked modules
|
||||
for(i in ml) {
|
||||
$('#modules-list').append(repl('<p style="cursor:move;">\
|
||||
<input type="checkbox" data-module="%(m)s"> \
|
||||
%(m)s</p>', {m:ml[i]}));
|
||||
}
|
||||
$('#modules-list [data-module]').attr('checked', true);
|
||||
|
||||
// unchecked modules
|
||||
var all = wn.pages.modules_setup.modules;
|
||||
for(i in all) {
|
||||
if(!$('#modules-list [data-module="'+all[i]+'"]').length) {
|
||||
$('#modules-list').append(repl('<p style="cursor:move;">\
|
||||
<input type="checkbox" data-module="%(m)s"> \
|
||||
%(m)s</p>', {m:all[i]}));
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
update: function() {
|
||||
var ml = [];
|
||||
$('#modules-list [data-module]').each(function() {
|
||||
if($(this).attr('checked'))
|
||||
ml.push($(this).attr('data-module'));
|
||||
});
|
||||
|
||||
wn.call({
|
||||
method: 'setup.page.modules_setup.modules_setup.update',
|
||||
args: {
|
||||
ml: JSON.stringify(ml)
|
||||
},
|
||||
callback: function(r) {
|
||||
},
|
||||
btn: $('#modules-update').get(0)
|
||||
});
|
||||
}
|
||||
});
|
@ -1,9 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
import webnotes
|
||||
|
||||
@webnotes.whitelist()
|
||||
def update(arg=None):
|
||||
"""update modules"""
|
||||
webnotes.conn.set_global('modules_list', webnotes.form_dict['ml'])
|
||||
webnotes.msgprint('Updated')
|
||||
webnotes.clear_cache()
|
@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"owner": "Administrator",
|
||||
"docstatus": 0,
|
||||
"creation": "2012-06-14 15:07:28",
|
||||
"modified_by": "Administrator",
|
||||
"modified": "2012-10-04 16:55:31"
|
||||
},
|
||||
{
|
||||
"name": "__common__",
|
||||
"title": "Modules Setup",
|
||||
"module": "Setup",
|
||||
"doctype": "Page",
|
||||
"page_name": "modules_setup",
|
||||
"standard": "Yes"
|
||||
},
|
||||
{
|
||||
"parent": "modules_setup",
|
||||
"name": "__common__",
|
||||
"doctype": "Page Role",
|
||||
"parenttype": "Page",
|
||||
"role": "System Manager",
|
||||
"parentfield": "roles"
|
||||
},
|
||||
{
|
||||
"name": "modules_setup",
|
||||
"doctype": "Page"
|
||||
},
|
||||
{
|
||||
"doctype": "Page Role"
|
||||
}
|
||||
]
|
@ -26,9 +26,7 @@ def boot_session(bootinfo):
|
||||
import webnotes.model.doctype
|
||||
bootinfo['notification_settings'] = webnotes.doc("Notification Control",
|
||||
"Notification Control").get_values()
|
||||
|
||||
bootinfo['modules_list'] = webnotes.conn.get_global('modules_list')
|
||||
|
||||
|
||||
# if no company, show a dialog box to create a new company
|
||||
bootinfo['setup_complete'] = webnotes.conn.sql("""select name from
|
||||
tabCompany limit 1""") and 'Yes' or 'No'
|
||||
|
@ -1,47 +1,8 @@
|
||||
import webnotes, conf, os
|
||||
|
||||
|
||||
def get_templates_path():
|
||||
return os.path.join(os.path.dirname(conf.__file__), "app", "website", "templates")
|
||||
|
||||
standard_pages = [
|
||||
"404", "about", "account", "attributions", "blog", "contact", "error", "index",
|
||||
"login", "message", "order", "orders", "print", "product_search", "profile",
|
||||
"ticket", "tickets", "writers"
|
||||
]
|
||||
|
||||
page_map = {
|
||||
'Web Page': webnotes._dict({
|
||||
"template": 'html/web_page.html',
|
||||
"condition_field": "published"
|
||||
}),
|
||||
'Blog Post': webnotes._dict({
|
||||
"template": 'html/blog_page.html',
|
||||
"condition_field": "published",
|
||||
}),
|
||||
'Item': webnotes._dict({
|
||||
"template": 'html/product_page.html',
|
||||
"condition_field": "show_in_website",
|
||||
}),
|
||||
'Item Group': webnotes._dict({
|
||||
"template": "html/product_group.html",
|
||||
"condition_field": "show_in_website"
|
||||
})
|
||||
}
|
||||
|
||||
page_settings_map = {
|
||||
"about": "website.doctype.about_us_settings.about_us_settings.get_args",
|
||||
"contact": "Contact Us Settings",
|
||||
"blog": "website.helpers.blog.get_blog_template_args",
|
||||
"writers": "website.helpers.blog.get_writers_args",
|
||||
"print": "core.doctype.print_format.print_format.get_args",
|
||||
"orders": "selling.doctype.sales_order.sales_order.get_currency_and_number_format",
|
||||
"order": "selling.doctype.sales_order.sales_order.get_website_args",
|
||||
"ticket": "support.doctype.support_ticket.support_ticket.get_website_args"
|
||||
}
|
||||
|
||||
no_cache = ["message", "print", "order", "ticket"]
|
||||
|
||||
def get_home_page():
|
||||
doc_name = webnotes.conn.get_value('Website Settings', None, 'home_page')
|
||||
if doc_name:
|
||||
|
@ -415,8 +415,9 @@ class DocType(SellingController):
|
||||
for item in self.doclist.get({"parentfield": "delivery_note_details"}):
|
||||
self.check_expense_account(item)
|
||||
|
||||
gl_entries += self.get_gl_entries_for_stock(item.expense_account, -1*item.buying_amount,
|
||||
cost_center=item.cost_center)
|
||||
if item.buying_amount:
|
||||
gl_entries += self.get_gl_entries_for_stock(item.expense_account, -1*item.buying_amount,
|
||||
cost_center=item.cost_center)
|
||||
|
||||
if gl_entries:
|
||||
from accounts.general_ledger import make_gl_entries
|
||||
|
@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
@ -1,32 +0,0 @@
|
||||
#message-post-text {
|
||||
}
|
||||
|
||||
#message-list {
|
||||
}
|
||||
|
||||
.message {
|
||||
padding: 7px;
|
||||
padding-left: 17px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.message-mark {
|
||||
margin-left: -17px;
|
||||
width: 9px;
|
||||
position: absolute;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.message .help {
|
||||
margin-bottom: 0px;
|
||||
padding-bottom: 0px;
|
||||
color: #888;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.message-other {
|
||||
}
|
||||
|
||||
.message-self {
|
||||
background-color: #eee;
|
||||
}
|
@ -1,214 +0,0 @@
|
||||
// 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.provide('erpnext.messages');
|
||||
|
||||
wn.pages.messages.onload = function(wrapper) {
|
||||
wn.ui.make_app_page({
|
||||
parent: wrapper,
|
||||
title: "Messages"
|
||||
});
|
||||
|
||||
$('<div><div class="avatar avatar-large">\
|
||||
<img id="avatar-image" src="lib/images/ui/avatar.png"></div>\
|
||||
<h3 style="display: inline-block" id="message-title">Everyone</h3>\
|
||||
</div><hr>\
|
||||
<div id="post-message">\
|
||||
<textarea style="width: 100%; height: 24px;"></textarea>\
|
||||
<div><button class="btn">Post</button></div><hr>\
|
||||
</div>\
|
||||
<div class="all-messages"></div>').appendTo($(wrapper).find('.layout-main-section'));
|
||||
|
||||
wrapper.appframe.add_home_breadcrumb();
|
||||
wrapper.appframe.add_breadcrumb(wn.modules["Messages"].icon);
|
||||
|
||||
erpnext.messages = new erpnext.Messages(wrapper);
|
||||
erpnext.toolbar.set_new_comments(0);
|
||||
}
|
||||
|
||||
$(wn.pages.messages).bind('show', function() {
|
||||
// remove alerts
|
||||
$('#alert-container .alert').remove();
|
||||
|
||||
erpnext.toolbar.set_new_comments(0);
|
||||
erpnext.messages.show();
|
||||
setTimeout("erpnext.messages.refresh()", 17000);
|
||||
})
|
||||
|
||||
erpnext.Messages = Class.extend({
|
||||
init: function(wrapper) {
|
||||
this.wrapper = wrapper;
|
||||
this.show_active_users();
|
||||
this.make_post_message();
|
||||
this.make_list();
|
||||
//this.update_messages('reset'); //Resets notification icons
|
||||
},
|
||||
make_post_message: function() {
|
||||
var me = this;
|
||||
$('#post-message textarea').keydown(function(e) {
|
||||
if(e.which==13) {
|
||||
$('#post-message .btn').click();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$('#post-message .btn').click(function() {
|
||||
var txt = $('#post-message textarea').val();
|
||||
if(txt) {
|
||||
wn.call({
|
||||
module:'utilities',
|
||||
page:'messages',
|
||||
method:'post',
|
||||
args: {
|
||||
txt: txt,
|
||||
contact: me.contact
|
||||
},
|
||||
callback:function(r,rt) {
|
||||
$('#post-message textarea').val('')
|
||||
me.list.run();
|
||||
},
|
||||
btn: this
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
show: function() {
|
||||
var contact = this.get_contact() || this.contact || user;
|
||||
|
||||
$('#message-title').html(contact==user ? "Everyone" :
|
||||
wn.user_info(contact).fullname)
|
||||
|
||||
$('#avatar-image').attr("src", wn.utils.get_file_link(wn.user_info(contact).image));
|
||||
|
||||
$("#show-everyone").toggle(contact!=user);
|
||||
|
||||
$("#post-message button").text(contact==user ? "Post Publicly" : "Post to user")
|
||||
|
||||
this.contact = contact;
|
||||
this.list.opts.args.contact = contact;
|
||||
this.list.run();
|
||||
|
||||
},
|
||||
// check for updates every 5 seconds if page is active
|
||||
refresh: function() {
|
||||
setTimeout("erpnext.messages.refresh()", 17000);
|
||||
if(wn.container.page.label != 'Messages') return;
|
||||
this.show();
|
||||
},
|
||||
get_contact: function() {
|
||||
var route = location.hash;
|
||||
if(route.indexOf('/')!=-1) {
|
||||
var name = decodeURIComponent(route.split('/')[1]);
|
||||
if(name.indexOf('__at__')!=-1) {
|
||||
name = name.replace('__at__', '@');
|
||||
}
|
||||
return name;
|
||||
}
|
||||
},
|
||||
make_list: function() {
|
||||
this.list = new wn.ui.Listing({
|
||||
parent: $(this.wrapper).find('.all-messages'),
|
||||
method: 'utilities.page.messages.messages.get_list',
|
||||
args: {
|
||||
contact: null
|
||||
},
|
||||
hide_refresh: true,
|
||||
no_loading: true,
|
||||
render_row: function(wrapper, data) {
|
||||
$(wrapper).removeClass('list-row');
|
||||
|
||||
data.creation = dateutil.comment_when(data.creation);
|
||||
data.comment_by_fullname = wn.user_info(data.owner).fullname;
|
||||
data.image = wn.utils.get_file_link(wn.user_info(data.owner).image);
|
||||
data.mark_html = "";
|
||||
|
||||
data.reply_html = '';
|
||||
if(data.owner==user) {
|
||||
data.cls = 'message-self';
|
||||
data.comment_by_fullname = 'You';
|
||||
} else {
|
||||
data.cls = 'message-other';
|
||||
}
|
||||
|
||||
// delete
|
||||
data.delete_html = "";
|
||||
if(data.owner==user || data.comment.indexOf("assigned to")!=-1) {
|
||||
data.delete_html = repl('<a class="close" \
|
||||
onclick="erpnext.messages.delete(this)"\
|
||||
data-name="%(name)s">×</a>', data);
|
||||
}
|
||||
|
||||
if(data.owner==data.comment_docname && data.parenttype!="Assignment") {
|
||||
data.mark_html = "<div class='message-mark' title='Public'\
|
||||
style='background-color: green'></div>"
|
||||
}
|
||||
|
||||
wrapper.innerHTML = repl('<div class="message %(cls)s">%(mark_html)s\
|
||||
<span class="avatar avatar-small"><img src="%(image)s"></span><b>%(comment)s</b>\
|
||||
%(delete_html)s\
|
||||
<div class="help">by %(comment_by_fullname)s, %(creation)s</div>\
|
||||
</div>\
|
||||
<div style="clear: both;"></div>', data);
|
||||
}
|
||||
});
|
||||
},
|
||||
delete: function(ele) {
|
||||
$(ele).parent().css('opacity', 0.6);
|
||||
wn.call({
|
||||
method:'utilities.page.messages.messages.delete',
|
||||
args: {name : $(ele).attr('data-name')},
|
||||
callback: function() {
|
||||
$(ele).parent().toggle(false);
|
||||
}
|
||||
});
|
||||
},
|
||||
show_active_users: function() {
|
||||
var me = this;
|
||||
wn.call({
|
||||
module:'utilities',
|
||||
page:'messages',
|
||||
method:'get_active_users',
|
||||
callback: function(r,rt) {
|
||||
var $body = $(me.wrapper).find('.layout-side-section');
|
||||
$('<h4>Users</h4><hr>\
|
||||
<div id="show-everyone">\
|
||||
<a href="#messages/'+user+'" class="btn">\
|
||||
Show messages from everyone</a><hr></div>\
|
||||
').appendTo($body);
|
||||
r.message.sort(function(a, b) { return b.has_session - a.has_session; });
|
||||
for(var i in r.message) {
|
||||
var p = r.message[i];
|
||||
if(p.name != user) {
|
||||
p.fullname = wn.user_info(p.name).fullname;
|
||||
p.image = wn.utils.get_file_link(wn.user_info(p.name).image);
|
||||
p.name = p.name.replace('@', '__at__');
|
||||
p.status_color = p.has_session ? "green" : "#ddd";
|
||||
p.status = p.has_session ? "Online" : "Offline";
|
||||
$(repl('<p>\
|
||||
<span class="avatar avatar-small" \
|
||||
style="border: 3px solid %(status_color)s" \
|
||||
title="%(status)s"><img src="%(image)s"></span>\
|
||||
<a href="#!messages/%(name)s">%(fullname)s</a>\
|
||||
</p>', p))
|
||||
.appendTo($body);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1,117 +0,0 @@
|
||||
# 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/>.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import webnotes
|
||||
|
||||
@webnotes.whitelist()
|
||||
def get_list(arg=None):
|
||||
"""get list of messages"""
|
||||
webnotes.form_dict['limit_start'] = int(webnotes.form_dict['limit_start'])
|
||||
webnotes.form_dict['limit_page_length'] = int(webnotes.form_dict['limit_page_length'])
|
||||
webnotes.form_dict['user'] = webnotes.session['user']
|
||||
|
||||
# set all messages as read
|
||||
webnotes.conn.begin()
|
||||
webnotes.conn.sql("""UPDATE `tabComment`
|
||||
set docstatus = 1 where comment_doctype in ('My Company', 'Message')
|
||||
and comment_docname = %s
|
||||
""", webnotes.user.name)
|
||||
webnotes.conn.commit()
|
||||
|
||||
if webnotes.form_dict['contact'] == webnotes.session['user']:
|
||||
# return messages
|
||||
return webnotes.conn.sql("""select * from `tabComment`
|
||||
where (owner=%(contact)s
|
||||
or comment_docname=%(user)s
|
||||
or (owner=comment_docname and ifnull(parenttype, "")!="Assignment"))
|
||||
and comment_doctype ='Message'
|
||||
order by creation desc
|
||||
limit %(limit_start)s, %(limit_page_length)s""", webnotes.form_dict, as_dict=1)
|
||||
else:
|
||||
return webnotes.conn.sql("""select * from `tabComment`
|
||||
where (owner=%(contact)s and comment_docname=%(user)s)
|
||||
or (owner=%(user)s and comment_docname=%(contact)s)
|
||||
or (owner=%(contact)s and comment_docname=%(contact)s)
|
||||
and comment_doctype ='Message'
|
||||
order by creation desc
|
||||
limit %(limit_start)s, %(limit_page_length)s""", webnotes.form_dict, as_dict=1)
|
||||
|
||||
|
||||
@webnotes.whitelist()
|
||||
def get_active_users(arg=None):
|
||||
return webnotes.conn.sql("""select name,
|
||||
(select count(*) from tabSessions where user=tabProfile.name
|
||||
and timediff(now(), lastupdate) < time("01:00:00")) as has_session
|
||||
from tabProfile
|
||||
where ifnull(enabled,0)=1 and
|
||||
docstatus < 2 and
|
||||
name not in ('Administrator', 'Guest')
|
||||
order by first_name""", as_dict=1)
|
||||
|
||||
@webnotes.whitelist()
|
||||
def post(arg=None):
|
||||
import webnotes
|
||||
"""post message"""
|
||||
if not arg:
|
||||
arg = {}
|
||||
arg.update(webnotes.form_dict)
|
||||
|
||||
if isinstance(arg, basestring):
|
||||
import json
|
||||
arg = json.loads(arg)
|
||||
|
||||
from webnotes.model.doc import Document
|
||||
d = Document('Comment')
|
||||
d.parenttype = arg.get("parenttype")
|
||||
d.comment = arg['txt']
|
||||
d.comment_docname = arg['contact']
|
||||
d.comment_doctype = 'Message'
|
||||
d.save()
|
||||
|
||||
import webnotes.utils
|
||||
if webnotes.utils.cint(arg.get('notify')):
|
||||
notify(arg)
|
||||
|
||||
@webnotes.whitelist()
|
||||
def delete(arg=None):
|
||||
webnotes.conn.sql("""delete from `tabComment` where name=%s""",
|
||||
webnotes.form_dict['name']);
|
||||
|
||||
def notify(arg=None):
|
||||
from webnotes.utils import cstr, get_fullname
|
||||
from startup import get_url
|
||||
|
||||
fn = get_fullname(webnotes.user.name) or webnotes.user.name
|
||||
|
||||
url = get_url()
|
||||
|
||||
message = '''You have a message from <b>%s</b>:
|
||||
|
||||
%s
|
||||
|
||||
To answer, please login to your erpnext account at \
|
||||
<a href=\"%s\" target='_blank'>%s</a>
|
||||
''' % (fn, arg['txt'], url, url)
|
||||
|
||||
sender = webnotes.conn.get_value("Profile", webnotes.user.name, "email") \
|
||||
or webnotes.user.name
|
||||
recipient = [webnotes.conn.get_value("Profile", arg["contact"], "email") \
|
||||
or arg["contact"]]
|
||||
|
||||
from webnotes.utils.email_lib import sendmail
|
||||
sendmail(recipient, sender, message, arg.get("subject") or "You have a message from %s" % (fn,))
|
||||
|
@ -1,21 +0,0 @@
|
||||
[
|
||||
{
|
||||
"owner": "Administrator",
|
||||
"docstatus": 0,
|
||||
"creation": "2012-02-24 11:21:57",
|
||||
"modified_by": "Administrator",
|
||||
"modified": "2012-02-24 11:21:57"
|
||||
},
|
||||
{
|
||||
"name": "__common__",
|
||||
"title": "Messages",
|
||||
"module": "Utilities",
|
||||
"doctype": "Page",
|
||||
"page_name": "messages",
|
||||
"standard": "Yes"
|
||||
},
|
||||
{
|
||||
"name": "messages",
|
||||
"doctype": "Page"
|
||||
}
|
||||
]
|
@ -1 +0,0 @@
|
||||
from __future__ import unicode_literals
|
@ -1,51 +0,0 @@
|
||||
.todoitem {
|
||||
padding-bottom: 3px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.todoitem div {
|
||||
float: left;
|
||||
display: inline-block;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.todoitem .label {
|
||||
width: 50px;
|
||||
margin-right: 11px;
|
||||
margin-top: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.todoitem .todo-date {
|
||||
margin-top: -2px;
|
||||
margin-right: 7px;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.todoitem .close {
|
||||
margin-left: 5px;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.todoitem .close-span {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.todo-separator {
|
||||
border-bottom: 1px solid #DEB85F;
|
||||
margin-bottom: 5px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.todo-content {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.todo-layout {
|
||||
background-color: #FFFDC9;
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.todoitem .popup-on-click {
|
||||
margin: 0px 6px;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
<div class="layout-wrapper layout-wrapper-background">
|
||||
<div class="appframe-area"></div>
|
||||
<div class="layout-main todo-layout">
|
||||
<div>
|
||||
<div id="todo-list">
|
||||
<div class="todo-content"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="clear: both"></div>
|
||||
</div>
|
||||
</div>
|
@ -1,212 +0,0 @@
|
||||
// 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.provide('erpnext.todo');
|
||||
|
||||
erpnext.todo.refresh = function() {
|
||||
wn.call({
|
||||
method: 'utilities.page.todo.todo.get',
|
||||
callback: function(r,rt) {
|
||||
var todo_list = $('#todo-list div.todo-content');
|
||||
var assigned_todo_list = $('#assigned-todo-list div.todo-content');
|
||||
todo_list.empty();
|
||||
assigned_todo_list.empty();
|
||||
|
||||
var nothing_to_do = function() {
|
||||
$('#todo-list div.todo-content')
|
||||
.html('<div class="alert">Nothing to do :)</div>');
|
||||
}
|
||||
|
||||
|
||||
if(r.message) {
|
||||
for(var i in r.message) {
|
||||
new erpnext.todo.ToDoItem(r.message[i]);
|
||||
}
|
||||
if (!todo_list.html()) { nothing_to_do(); }
|
||||
} else {
|
||||
nothing_to_do();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
erpnext.todo.ToDoItem = Class.extend({
|
||||
init: function(todo) {
|
||||
label_map = {
|
||||
'High': 'label-important',
|
||||
'Medium': 'label-info',
|
||||
'Low':''
|
||||
}
|
||||
todo.labelclass = label_map[todo.priority];
|
||||
todo.userdate = dateutil.str_to_user(todo.date) || '';
|
||||
|
||||
todo.fullname = '';
|
||||
if(todo.assigned_by) {
|
||||
var assigned_by = wn.boot.user_info[todo.assigned_by]
|
||||
todo.fullname = repl("[By %(fullname)s] ".bold(), {
|
||||
fullname: (assigned_by ? assigned_by.fullname : todo.assigned_by),
|
||||
});
|
||||
}
|
||||
|
||||
var parent_list = "#todo-list";
|
||||
if(todo.owner !== user) {
|
||||
var owner = wn.boot.user_info[todo.owner];
|
||||
todo.fullname = repl("[To %(fullname)s] ".bold(), {
|
||||
fullname: (owner ? owner.fullname : todo.owner),
|
||||
});
|
||||
}
|
||||
parent_list += " div.todo-content";
|
||||
|
||||
if(todo.reference_name && todo.reference_type) {
|
||||
todo.link = repl('<a href="#!Form/%(reference_type)s/%(reference_name)s">\
|
||||
%(reference_type)s: %(reference_name)s</a>', todo);
|
||||
} else if(todo.reference_type) {
|
||||
todo.link = repl('<br><a href="#!List/%(reference_type)s">\
|
||||
%(reference_type)s</a>', todo);
|
||||
} else {
|
||||
todo.link = '';
|
||||
}
|
||||
if(!todo.description) todo.description = '';
|
||||
todo.description_display = todo.description.replace(/\n\n/g, "<br>").trim();
|
||||
|
||||
$(parent_list).append(repl('\
|
||||
<div class="todoitem">\
|
||||
<div class="label %(labelclass)s">%(priority)s</div>\
|
||||
<div class="popup-on-click"><a href="#">[edit]</a></div>\
|
||||
<div class="todo-date-fullname">\
|
||||
<div class="todo-date">%(userdate)s</div>\
|
||||
%(fullname)s:\
|
||||
</div>\
|
||||
<div class="description">%(description_display)s\
|
||||
<span class="ref_link">%(link)s</span>\
|
||||
</div>\
|
||||
<div class="close-span"><a href="#" class="close">×</a></div>\
|
||||
</div>\
|
||||
<div class="todo-separator"></div>', todo));
|
||||
$todo = $(parent_list + ' div.todoitem:last');
|
||||
|
||||
if(todo.checked) {
|
||||
$todo.find('.description').css('text-decoration', 'line-through');
|
||||
}
|
||||
|
||||
if(!todo.reference_type)
|
||||
$todo.find('.ref_link').toggle(false);
|
||||
|
||||
$todo.find('.popup-on-click')
|
||||
.data('todo', todo)
|
||||
.click(function() {
|
||||
erpnext.todo.make_dialog($(this).data('todo'));
|
||||
return false;
|
||||
});
|
||||
|
||||
$todo.find('.close')
|
||||
.data('name', todo.name)
|
||||
.click(function() {
|
||||
$(this).parent().css('opacity', 0.5);
|
||||
wn.call({
|
||||
method:'utilities.page.todo.todo.delete',
|
||||
args: {name: $(this).data('name')},
|
||||
callback: function() {
|
||||
erpnext.todo.refresh();
|
||||
}
|
||||
});
|
||||
return false;
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
erpnext.todo.make_dialog = function(det) {
|
||||
if(!erpnext.todo.dialog) {
|
||||
var dialog = new wn.ui.Dialog({
|
||||
width: 480,
|
||||
title: 'To Do',
|
||||
fields: [
|
||||
{fieldtype:'Text', fieldname:'description', label:'Description',
|
||||
reqd:1},
|
||||
{fieldtype:'Date', fieldname:'date', label:'Event Date', reqd:1},
|
||||
{fieldtype:'Check', fieldname:'checked', label:'Completed'},
|
||||
{fieldtype:'Select', fieldname:'priority', label:'Priority', reqd:1, 'options':['Medium','High','Low'].join('\n')},
|
||||
{fieldtype:'Button', fieldname:'save', label:'Save (Ctrl+S)'}
|
||||
]
|
||||
});
|
||||
|
||||
dialog.fields_dict.save.input.onclick = function() {
|
||||
erpnext.todo.save(this);
|
||||
}
|
||||
erpnext.todo.dialog = dialog;
|
||||
}
|
||||
|
||||
if(det) {
|
||||
erpnext.todo.dialog.set_values({
|
||||
date: det.date,
|
||||
priority: det.priority,
|
||||
description: det.description,
|
||||
checked: det.checked
|
||||
});
|
||||
erpnext.todo.dialog.det = det;
|
||||
}
|
||||
erpnext.todo.dialog.show();
|
||||
|
||||
}
|
||||
|
||||
erpnext.todo.save = function(btn) {
|
||||
var d = erpnext.todo.dialog;
|
||||
var det = d.get_values();
|
||||
|
||||
if(!det) {
|
||||
return;
|
||||
}
|
||||
|
||||
det.name = d.det.name || '';
|
||||
wn.call({
|
||||
method:'utilities.page.todo.todo.edit',
|
||||
args: det,
|
||||
btn: btn,
|
||||
callback: function() {
|
||||
erpnext.todo.dialog.hide();
|
||||
erpnext.todo.refresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
wn.pages.todo.onload = function(wrapper) {
|
||||
// create app frame
|
||||
wrapper.appframe = new wn.ui.AppFrame($(wrapper).find('.appframe-area'), 'To Do');
|
||||
wrapper.appframe.add_home_breadcrumb();
|
||||
wrapper.appframe.add_breadcrumb(wn.modules["To Do"].icon);
|
||||
wrapper.appframe.add_button('Refresh', erpnext.todo.refresh, 'icon-refresh');
|
||||
wrapper.appframe.add_button('Add', function() {
|
||||
erpnext.todo.make_dialog({
|
||||
date:get_today(), priority:'Medium', checked:0, description:''});
|
||||
}, 'icon-plus');
|
||||
wrapper.appframe.add_ripped_paper_effect(wrapper);
|
||||
|
||||
// show report button for System Manager
|
||||
if(wn.boot.profile.roles.indexOf("System Manager") !== -1) {
|
||||
wrapper.appframe.add_button("Report", function() { wn.set_route("query-report", "todo"); },
|
||||
"icon-table");
|
||||
}
|
||||
|
||||
// load todos
|
||||
erpnext.todo.refresh();
|
||||
|
||||
// save on click
|
||||
wrapper.save_action = function() {
|
||||
if(erpnext.todo.dialog && erpnext.todo.dialog.display) {
|
||||
erpnext.todo.dialog.fields_dict.save.input.click();
|
||||
}
|
||||
};
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
# 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/>.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import webnotes
|
||||
from webnotes.model.doc import Document
|
||||
|
||||
@webnotes.whitelist()
|
||||
def get(arg=None):
|
||||
"""get todo list"""
|
||||
return webnotes.conn.sql("""select name, owner, description, date,
|
||||
priority, checked, reference_type, reference_name, assigned_by
|
||||
from `tabToDo` where (owner=%s or assigned_by=%s)
|
||||
order by field(priority, 'High', 'Medium', 'Low') asc, date asc""",
|
||||
(webnotes.session['user'], webnotes.session['user']), as_dict=1)
|
||||
|
||||
@webnotes.whitelist()
|
||||
def edit(arg=None):
|
||||
import markdown2
|
||||
args = webnotes.form_dict
|
||||
|
||||
d = Document('ToDo', args.get('name') or None)
|
||||
d.description = args['description']
|
||||
d.date = args['date']
|
||||
d.priority = args['priority']
|
||||
d.checked = args.get('checked', 0)
|
||||
if not d.owner: d.owner = webnotes.session['user']
|
||||
d.save(not args.get('name') and 1 or 0)
|
||||
|
||||
if args.get('name') and d.checked:
|
||||
notify_assignment(d)
|
||||
|
||||
return d.name
|
||||
|
||||
@webnotes.whitelist()
|
||||
def delete(arg=None):
|
||||
name = webnotes.form_dict['name']
|
||||
d = Document('ToDo', name)
|
||||
if d and d.name and d.owner != webnotes.session['user']:
|
||||
notify_assignment(d)
|
||||
webnotes.conn.sql("delete from `tabToDo` where name = %s", name)
|
||||
|
||||
def notify_assignment(d):
|
||||
doc_type = d.reference_type
|
||||
doc_name = d.reference_name
|
||||
assigned_by = d.assigned_by
|
||||
|
||||
if doc_type and doc_name and assigned_by:
|
||||
from webnotes.widgets.form import assign_to
|
||||
assign_to.notify_assignment(assigned_by, d.owner, doc_type, doc_name)
|
||||
|
@ -1,21 +0,0 @@
|
||||
[
|
||||
{
|
||||
"owner": "Administrator",
|
||||
"docstatus": 0,
|
||||
"creation": "2012-02-23 13:59:03",
|
||||
"modified_by": "Administrator",
|
||||
"modified": "2012-02-23 13:59:03"
|
||||
},
|
||||
{
|
||||
"name": "__common__",
|
||||
"title": "To Do",
|
||||
"module": "Utilities",
|
||||
"doctype": "Page",
|
||||
"page_name": "todo",
|
||||
"standard": "Yes"
|
||||
},
|
||||
{
|
||||
"name": "todo",
|
||||
"doctype": "Page"
|
||||
}
|
||||
]
|
@ -74,7 +74,7 @@ def add_comment(args=None):
|
||||
webnotes.webutils.clear_cache(args.get('page_name'))
|
||||
|
||||
comment['comment_date'] = webnotes.utils.global_date_format(comment['creation'])
|
||||
template_args = { 'comment_list': [comment], 'template': 'html/comment.html' }
|
||||
template_args = { 'comment_list': [comment], 'template': 'app/website/templates/html/comment.html' }
|
||||
|
||||
# get html of comment row
|
||||
comment_html = webnotes.webutils.build_html(template_args)
|
||||
|
@ -82,7 +82,7 @@ def get_group_item_count(item_group):
|
||||
|
||||
def get_item_for_list_in_html(r):
|
||||
scrub_item_for_list(r)
|
||||
r.template = "html/product_in_list.html"
|
||||
r.template = "app/website/templates/html/product_in_list.html"
|
||||
return build_html(r)
|
||||
|
||||
def scrub_item_for_list(r):
|
||||
|
@ -1,43 +0,0 @@
|
||||
<style>
|
||||
#login_wrapper {
|
||||
width: 300px;
|
||||
margin: 70px auto;
|
||||
}
|
||||
|
||||
#login_wrapper,
|
||||
#login_wrapper h3 {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#login_wrapper a {
|
||||
color: #0088cc;
|
||||
}
|
||||
|
||||
.layout-wrapper {
|
||||
background-color: #fff;
|
||||
padding: 10px;
|
||||
box-shadow: 1px 1px 3px 3px #ccc;
|
||||
font-size: 12px;
|
||||
min-height: 100px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#login_wrapper h3 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.login-banner {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.login-box td {
|
||||
padding: 8px;
|
||||
}
|
||||
.login-box td input {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.login-footer {
|
||||
text-align: center;
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
@ -1,25 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ title }}</title>
|
||||
<meta name="generator" content="wnframework">
|
||||
<script type="text/javascript" src="lib/js/lib/jquery/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="js/all-web.min.js"></script>
|
||||
<script type="text/javascript" src="js/wn-web.js"></script>
|
||||
<link type="text/css" rel="stylesheet" href="css/all-web.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/wn-web.css">
|
||||
<link rel="shortcut icon" href="{{ favicon }}" type="image/x-icon">
|
||||
<link rel="icon" href="{{ favicon }}" type="image/x-icon">
|
||||
{% if description -%}
|
||||
<meta name="description" content="{{ description }}">
|
||||
{%- endif %}
|
||||
{% block header -%}
|
||||
{%- endblock %}
|
||||
</head>
|
||||
<body>
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</body>
|
||||
</html>
|
@ -1,11 +1,11 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% block javascript %}
|
||||
{% include "js/blog_page.js" %}
|
||||
{% include "app/website/templates/js/blog_page.js" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{% include "css/blog_page.css" %}
|
||||
{% include "app/website/templates/css/blog_page.css" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
@ -23,7 +23,7 @@
|
||||
<!-- end blog content -->
|
||||
{% if blogger_info %}
|
||||
<hr />
|
||||
{% include "html/blogger.html" %}
|
||||
{% include "app/website/templates/html/blogger.html" %}
|
||||
{% endif %}
|
||||
<hr>
|
||||
<h3>{{ texts.comments }}</h3><br>
|
||||
@ -35,7 +35,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% include 'html/comment.html' %}
|
||||
{% include 'app/website/templates/html/comment.html' %}
|
||||
</div>
|
||||
<div><button class="btn add-comment">{{ texts.add_comment }}</button></div>
|
||||
<div style="display: none; margin-top: 10px;"
|
||||
@ -52,5 +52,5 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'html/blog_footer.html' %}
|
||||
{% include 'app/website/templates/html/blog_footer.html' %}
|
||||
{% endblock %}
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/base.html" %}
|
||||
{% extends "lib/templates/base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container">
|
||||
@ -10,13 +10,13 @@
|
||||
<div class="span12">{{ banner_html }}</div>
|
||||
</div>{% endif %}
|
||||
<div class="outer">
|
||||
{% include "html/navbar.html" %}
|
||||
{% include "app/website/templates/html/navbar.html" %}
|
||||
<div class="content row" id="page-{{ name }}" style="display: block;">
|
||||
{%- block content -%}
|
||||
{%- endblock -%}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include "html/footer.html" %}
|
||||
{% include "app/website/templates/html/footer.html" %}
|
||||
|
||||
{% endblock %}
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/outer.html" %}
|
||||
{% extends "app/website/templates/html/outer.html" %}
|
||||
|
||||
{% block title -%}{{ title }}{%- endblock %}
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% block content %}
|
||||
{% include 'html/product_search_box.html' %}
|
||||
{% include 'html/product_breadcrumbs.html' %}
|
||||
{% include 'app/website/templates/html/product_search_box.html' %}
|
||||
{% include 'app/website/templates/html/product_breadcrumbs.html' %}
|
||||
<div class="span12">
|
||||
{% if slideshow %}<!-- slideshow -->
|
||||
{% include "html/slideshow.html" %}
|
||||
{% include "app/website/templates/html/slideshow.html" %}
|
||||
{% endif %}
|
||||
{% if description %}<!-- description -->
|
||||
<div>{{ description or ""}}</div>
|
||||
|
@ -4,7 +4,7 @@
|
||||
{%- if website_image -%}
|
||||
<img class="product-image" style="width: 80%; margin: auto;" src="{{ website_image }}">
|
||||
{%- else -%}
|
||||
{% include 'html/product_missing_image.html' %}
|
||||
{% include 'app/website/templates/html/product_missing_image.html' %}
|
||||
{%- endif -%}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -1,28 +1,28 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% block javascript %}
|
||||
{% include "js/product_page.js" %}
|
||||
{% include "app/website/templates/js/product_page.js" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{% include "css/product_page.css" %}
|
||||
{% include "app/website/templates/css/product_page.css" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include 'html/product_search_box.html' %}
|
||||
{% include 'html/product_breadcrumbs.html' %}
|
||||
{% include 'app/website/templates/html/product_search_box.html' %}
|
||||
{% include 'app/website/templates/html/product_breadcrumbs.html' %}
|
||||
<div class="span12 product-page-content" itemscope itemtype="http://schema.org/Product">
|
||||
<div class="row">
|
||||
<div class="span6">
|
||||
{% if slideshow %}
|
||||
{% include "html/slideshow.html" %}
|
||||
{% include "app/website/templates/html/slideshow.html" %}
|
||||
{% else %}
|
||||
{% if website_image %}
|
||||
<image itemprop="image" class="item-main-image"
|
||||
src="{{ website_image }}" />
|
||||
{% else %}
|
||||
<div class="img-area">
|
||||
{% include 'html/product_missing_image.html' %}
|
||||
{% include 'app/website/templates/html/product_missing_image.html' %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% block javascript %}
|
||||
{% if insert_code %}
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="span12" style="margin-top: 15px;">
|
||||
{% include "html/slideshow.html" %}
|
||||
{% include "app/website/templates/html/slideshow.html" %}
|
||||
{{ main_section }}
|
||||
</div>
|
||||
{% endblock %}
|
@ -1,97 +0,0 @@
|
||||
|
||||
var login = {};
|
||||
|
||||
$(document).ready(function(wrapper) {
|
||||
$('#login_btn').click(login.do_login)
|
||||
|
||||
$('#password').keypress(function(ev){
|
||||
if(ev.which==13 && $('#password').val()) {
|
||||
$('form').submit(function() {
|
||||
login.do_login();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
});
|
||||
$(document).trigger('login_rendered');
|
||||
})
|
||||
|
||||
// Login
|
||||
login.do_login = function(){
|
||||
var args = {};
|
||||
if(window.is_sign_up) {
|
||||
args.cmd = "core.doctype.profile.profile.sign_up";
|
||||
args.email = $("#login_id").val();
|
||||
args.full_name = $("#full_name").val();
|
||||
|
||||
if(!args.email || !valid_email(args.email) || !args.full_name) {
|
||||
login.set_message("Valid email and name required.");
|
||||
return false;
|
||||
}
|
||||
} else if(window.is_forgot) {
|
||||
args.cmd = "reset_password";
|
||||
args.user = $("#login_id").val();
|
||||
|
||||
if(!args.user) {
|
||||
login.set_message("Valid Login Id required.");
|
||||
return false;
|
||||
}
|
||||
|
||||
} else {
|
||||
args.cmd = "login"
|
||||
args.usr = $("#login_id").val();
|
||||
args.pwd = $("#password").val();
|
||||
|
||||
if(!args.usr || !args.pwd) {
|
||||
login.set_message("Both login and password required.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$('#login_btn').attr("disabled", "disabled");
|
||||
$("#login-spinner").toggle(true);
|
||||
$('#login_message').toggle(false);
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "server.py",
|
||||
data: args,
|
||||
dataType: "json",
|
||||
success: function(data) {
|
||||
$("input").val("");
|
||||
$("#login-spinner").toggle(false);
|
||||
$('#login_btn').attr("disabled", false);
|
||||
if(data.message=="Logged In") {
|
||||
window.location.href = "app.html";
|
||||
} else if(data.message=="No App") {
|
||||
window.location.href = "index";
|
||||
} else {
|
||||
login.set_message(data.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
login.sign_up = function() {
|
||||
$("#login_wrapper h3").html("Sign Up");
|
||||
$("#login-label").html("Email Id");
|
||||
$("#password-row, #sign-up-wrapper, #login_message").toggle(false);
|
||||
$("#full-name-row").toggle(true);
|
||||
$("#login_btn").html("Register");
|
||||
$("#forgot-wrapper").html("<a onclick='location.reload()' href='#'>Login</a>")
|
||||
window.is_sign_up = true;
|
||||
}
|
||||
|
||||
login.show_forgot_password = function() {
|
||||
$("#login_wrapper h3").html("Forgot");
|
||||
$("#login-label").html("Email Id");
|
||||
$("#password-row, #sign-up-wrapper, #login_message").toggle(false);
|
||||
$("#login_btn").html("Send Password");
|
||||
$("#forgot-wrapper").html("<a onclick='location.reload()' href='#'>Login</a>")
|
||||
window.is_forgot = true;
|
||||
}
|
||||
|
||||
login.set_message = function(message, color) {
|
||||
$('#login_message').html(message).toggle(true);
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
{% extends "html/outer.html" %}
|
||||
|
||||
{% set title="Not Found" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<div class="layout-wrapper layout-main">
|
||||
<h3><i class="icon-exclamation-sign"></i> Page missing or moved</h3>
|
||||
<br>
|
||||
<p>We are very sorry for this, but the page you are looking for is missing
|
||||
(this could be because of a typo in the address) or moved.</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title="About Us" %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title="My Account" %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/outer.html" %}
|
||||
{% extends "app/website/templates/html/outer.html" %}
|
||||
|
||||
{% block header %}
|
||||
<style>
|
||||
|
@ -1,11 +1,11 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% block javascript %}
|
||||
{% include "js/blog.js" %}
|
||||
{% include "app/website/templates/js/blog.js" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{% include "css/blog.css" %}
|
||||
{% include "app/website/templates/css/blog.css" %}
|
||||
{% endblock %}
|
||||
|
||||
{% set title="Blog" %}
|
||||
@ -29,5 +29,5 @@
|
||||
style="display:none;">More...</button>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'html/blog_footer.html' %}
|
||||
{% include 'app/website/templates/html/blog_footer.html' %}
|
||||
{% endblock %}
|
@ -1,7 +1,7 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% block javascript %}
|
||||
{% include "js/contact.js" %}
|
||||
{% include "app/website/templates/js/contact.js" %}
|
||||
{% endblock %}
|
||||
|
||||
{% set title="Contact Us" %}
|
||||
|
@ -1,13 +0,0 @@
|
||||
{% extends "html/outer.html" %}
|
||||
|
||||
{% set title="Error" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<div class="layout-wrapper layout-main">
|
||||
<h3><i class="icon-exclamation-sign"></i> Oops, a server error has occured</h3>
|
||||
<br>
|
||||
<pre>%(error)s</pre>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
@ -1 +1 @@
|
||||
{% extends "html/web_page.html" %}
|
||||
{% extends "app/website/templates/html/web_page.html" %}
|
@ -1,62 +0,0 @@
|
||||
{% extends "html/base.html" %}
|
||||
|
||||
{% block header %}
|
||||
<script>
|
||||
{% include "js/login.js" %}
|
||||
</script>
|
||||
{% include "css/login.css" %}
|
||||
{% endblock %}
|
||||
|
||||
{% set title="Login" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container" id='login_wrapper'>
|
||||
<div class='layout-wrapper layout-main'>
|
||||
<p id="login_message" class="alert" style="display: none;"></p>
|
||||
<h3><i class="icon-lock" style="margin-top: 7px"></i> Login</h3>
|
||||
<form autocomplete="on">
|
||||
<table border="0" class="login-box">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: right; padding: 3px;"
|
||||
id="login-label">Login Id</td>
|
||||
<td><input id="login_id" type="text" style="width: 180px"/></td>
|
||||
</tr>
|
||||
<tr id="password-row">
|
||||
<td style="text-align: right; padding: 3px;" >Password</td>
|
||||
<td><input id="password" type="password" style="width: 180px" /></td>
|
||||
</tr>
|
||||
<tr id="full-name-row" style="display: none;">
|
||||
<td style="text-align: right; padding: 3px;">Full Name</td>
|
||||
<td><input id="full_name" type="text" style="width: 180px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>
|
||||
<button type="submit" id="login_btn"
|
||||
class="btn btn-small btn-primary">Login</button>
|
||||
<img src="lib/images/ui/button-load.gif" id="login-spinner"
|
||||
style="display: none;">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
<br>
|
||||
<p style="text-align: center" id="forgot-wrapper">
|
||||
<a id="forgot-password" style="cursor:pointer"
|
||||
onclick="return login.show_forgot_password()">Forgot Password</a></p>
|
||||
<p style="text-align: center" id="sign-up-wrapper">
|
||||
New user? <a id="sign-up" style="cursor:pointer"
|
||||
onclick="return login.sign_up()">Sign Up</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="web-footer login-footer container">
|
||||
<a href="index.html">Home</a> |
|
||||
<a href="https://erpnext.com">ERPNext</a><br><br>
|
||||
{% if copyright %}
|
||||
<div class="web-footer-copyright">© {{ copyright }}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
@ -1,11 +0,0 @@
|
||||
{% extends "html/outer.html" %}
|
||||
|
||||
{% set title=webnotes.message_title %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<div class="layout-wrapper layout-main">
|
||||
{{ webnotes.message }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title=doc.name %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title="My Orders" %}
|
||||
|
||||
|
@ -1,18 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Print Format</title>
|
||||
<meta name="generator" content="wnframework">
|
||||
<style>
|
||||
{{ css }}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{{ body }}
|
||||
</body>
|
||||
{%- if comment -%}
|
||||
<!-- {{ comment }} -->
|
||||
{%- endif -%}
|
||||
</html>
|
@ -1,9 +1,9 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title="Product Search" %}
|
||||
|
||||
{% block javascript %}
|
||||
{% include "js/product_list.js" %}
|
||||
{% include "app/website/templates/js/product_list.js" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
@ -17,7 +17,7 @@ $(document).ready(function() {
|
||||
});
|
||||
</script>
|
||||
|
||||
{% include 'html/product_search_box.html' %}
|
||||
{% include 'app/website/templates/html/product_search_box.html' %}
|
||||
<div class="span12">
|
||||
<h3 class="search-results">Search Results</h3>
|
||||
<div id="search-list" class="row">
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title="My Profile" %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title=doc.name %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title="My Tickets" %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "html/page.html" %}
|
||||
{% extends "app/website/templates/html/page.html" %}
|
||||
|
||||
{% set title="Blog Writers" %}
|
||||
|
||||
@ -10,8 +10,8 @@
|
||||
{% endif %}
|
||||
<hr>
|
||||
{% for blogger_info in bloggers %}
|
||||
{% include "html/blogger.html" %}
|
||||
{% include "app/website/templates/html/blogger.html" %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% include 'html/blog_footer.html' %}
|
||||
{% include 'app/website/templates/html/blog_footer.html' %}
|
||||
{% endblock %}
|
Loading…
Reference in New Issue
Block a user