Merge branch 'master' of github.com:webnotes/erpnext
This commit is contained in:
commit
4d0f37e97c
@ -25,7 +25,6 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
|
|||||||
this.frm.set_df_property("debit_to", "print_hide", 0);
|
this.frm.set_df_property("debit_to", "print_hide", 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(this.frm.doc.is_pos && this.frm.doc.docstatus===0) {
|
// if(this.frm.doc.is_pos && this.frm.doc.docstatus===0) {
|
||||||
// cur_frm.cscript.toggle_pos(true);
|
// cur_frm.cscript.toggle_pos(true);
|
||||||
// }
|
// }
|
||||||
|
@ -30,11 +30,12 @@ erpnext.hr.EmployeeController = wn.ui.form.Controller.extend({
|
|||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method:"hr.utils.get_leave_approver_list",
|
method:"hr.utils.get_leave_approver_list",
|
||||||
callback: function(r) {
|
callback: function(r) {
|
||||||
me.frm.fields_dict.employee_leave_approvers.grid
|
var df = wn.meta.get_docfield("Employee Leave Approver", "leave_approver",
|
||||||
.get_field("leave_approver").df.options =
|
me.frm.doc.name);
|
||||||
$.map(r.message, function(profile) {
|
df.options = $.map(r.message, function(profile) {
|
||||||
return {value: profile, label: wn.user_info(profile).fullname};
|
return {value: profile, label: wn.user_info(profile).fullname};
|
||||||
});
|
});
|
||||||
|
me.frm.fields_dict.employee_leave_approvers.refresh();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -10,7 +10,6 @@ cur_frm.cscript.onload = function(doc, dt, dn) {
|
|||||||
cur_frm.set_value("status", "Open");
|
cur_frm.set_value("status", "Open");
|
||||||
cur_frm.cscript.calculate_total_days(doc, dt, dn);
|
cur_frm.cscript.calculate_total_days(doc, dt, dn);
|
||||||
}
|
}
|
||||||
cur_frm.set_df_property("leave_approver", "options", "");
|
|
||||||
return cur_frm.call({
|
return cur_frm.call({
|
||||||
method:"hr.utils.get_leave_approver_list",
|
method:"hr.utils.get_leave_approver_list",
|
||||||
callback: function(r) {
|
callback: function(r) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
|
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
|
||||||
# License: GNU General Public License v3. See license.txt
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
import webnotes
|
import webnotes
|
||||||
|
|
||||||
def execute():
|
def execute():
|
||||||
|
@ -32,6 +32,21 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onload_post_render: function() {
|
||||||
|
if(this.frm.doc.__islocal && this.frm.doc.company && !this.frm.doc.customer) {
|
||||||
|
var me = this;
|
||||||
|
return this.frm.call({
|
||||||
|
doc: this.frm.doc,
|
||||||
|
method: "onload_post_render",
|
||||||
|
freeze: true,
|
||||||
|
callback: function(r) {
|
||||||
|
// remove this call when using client side mapper
|
||||||
|
me.set_default_values();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
refresh: function() {
|
refresh: function() {
|
||||||
this.frm.clear_custom_buttons();
|
this.frm.clear_custom_buttons();
|
||||||
erpnext.hide_naming_series();
|
erpnext.hide_naming_series();
|
||||||
@ -44,6 +59,17 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
|||||||
this.calculate_taxes_and_totals();
|
this.calculate_taxes_and_totals();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
set_default_values: function() {
|
||||||
|
$.each(wn.model.get_doclist(this.frm.doctype, this.frm.docname), function(i, doc) {
|
||||||
|
var updated = wn.model.set_default_values(doc);
|
||||||
|
if(doc.parentfield) {
|
||||||
|
refresh_field(doc.parentfield);
|
||||||
|
} else {
|
||||||
|
refresh_field(updated);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
company: function() {
|
company: function() {
|
||||||
if(this.frm.doc.company && this.frm.fields_dict.currency) {
|
if(this.frm.doc.company && this.frm.fields_dict.currency) {
|
||||||
if(!this.frm.doc.currency) {
|
if(!this.frm.doc.currency) {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-05-02 17:53:24",
|
"creation": "2013-05-02 17:53:24",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-08-02 13:45:12",
|
"modified": "2013-08-06 11:22:22",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -71,7 +71,8 @@
|
|||||||
"read_only": 0
|
"read_only": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Precision for Float fields (quantities, discounts, percentages etc) only for display. Floats will still be calculated up to 6 decimals.",
|
"default": "3",
|
||||||
|
"description": "Precision for Float fields (quantities, discounts, percentages etc). Floats will be rounded up to specified decimals. Default = 3",
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "float_precision",
|
"fieldname": "float_precision",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
|
@ -289,6 +289,9 @@ class DocType(SellingController):
|
|||||||
|
|
||||||
if d['reserved_qty'] < 0 :
|
if d['reserved_qty'] < 0 :
|
||||||
# Reduce reserved qty from reserved warehouse mentioned in so
|
# Reduce reserved qty from reserved warehouse mentioned in so
|
||||||
|
if not d["reserved_warehouse"]:
|
||||||
|
webnotes.throw(_("Reserved Warehouse is missing in Sales Order"))
|
||||||
|
|
||||||
args = {
|
args = {
|
||||||
"item_code": d['item_code'],
|
"item_code": d['item_code'],
|
||||||
"voucher_type": self.doc.doctype,
|
"voucher_type": self.doc.doctype,
|
||||||
|
@ -29,8 +29,8 @@ def get_columns(filters):
|
|||||||
"""return columns based on filters"""
|
"""return columns based on filters"""
|
||||||
|
|
||||||
columns = ["Item:Link/Item:100", "Item Name::150", "Description::150", \
|
columns = ["Item:Link/Item:100", "Item Name::150", "Description::150", \
|
||||||
"Warehouse:Link/Warehouse:100", "Opening Qty::90", \
|
"Warehouse:Link/Warehouse:100", "Opening Qty:Float:90", \
|
||||||
"In Qty::80", "Out Qty::80", "Balance Qty::90", "Company:Link/Company:100"]
|
"In Qty:Float:80", "Out Qty:Float:80", "Balance Qty:Float:90", "Company:Link/Company:100"]
|
||||||
|
|
||||||
return columns
|
return columns
|
||||||
|
|
||||||
|
@ -1,6 +1,17 @@
|
|||||||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
|
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
|
||||||
// License: GNU General Public License v3. See license.txt
|
// License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
cur_frm.cscript.onload = function(doc) {
|
||||||
|
return wn.call({
|
||||||
|
method: "support.doctype.newsletter.newsletter.get_lead_options",
|
||||||
|
type: "GET",
|
||||||
|
callback: function(r) {
|
||||||
|
set_field_options("lead_source", r.message.sources.join("\n"))
|
||||||
|
set_field_options("lead_status", r.message.statuses.join("\n"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
cur_frm.cscript.refresh = function(doc) {
|
cur_frm.cscript.refresh = function(doc) {
|
||||||
erpnext.hide_naming_series();
|
erpnext.hide_naming_series();
|
||||||
if(!doc.__islocal && !cint(doc.email_sent) && !doc.__unsaved
|
if(!doc.__islocal && !cint(doc.email_sent) && !doc.__unsaved
|
||||||
@ -12,17 +23,41 @@ cur_frm.cscript.refresh = function(doc) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cur_frm.cscript.setup_dashboard();
|
||||||
|
|
||||||
if(doc.__islocal && !doc.send_from) {
|
if(doc.__islocal && !doc.send_from) {
|
||||||
cur_frm.set_value("send_from",
|
cur_frm.set_value("send_from",
|
||||||
repl("%(fullname)s <%(email)s>", wn.user_info(doc.owner)));
|
repl("%(fullname)s <%(email)s>", wn.user_info(doc.owner)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return wn.call({
|
cur_frm.cscript.setup_dashboard = function() {
|
||||||
method: "support.doctype.newsletter.newsletter.get_lead_options",
|
cur_frm.dashboard.reset();
|
||||||
type: "GET",
|
if(!cur_frm.doc.__islocal && cint(cur_frm.doc.email_sent) && cur_frm.doc.__status_count) {
|
||||||
callback: function(r) {
|
var stat = cur_frm.doc.__status_count;
|
||||||
set_field_options("lead_source", r.message.sources.join("\n"))
|
var total = wn.utils.sum($.map(stat, function(v) { return v; }));
|
||||||
set_field_options("lead_status", r.message.statuses.join("\n"))
|
if(total) {
|
||||||
|
$.each(stat, function(k, v) {
|
||||||
|
stat[k] = flt(v * 100 / total, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
cur_frm.dashboard.add_progress("Status", [
|
||||||
|
{
|
||||||
|
title: stat["Sent"] + "% Sent",
|
||||||
|
width: stat["Sent"],
|
||||||
|
progress_class: "progress-bar-success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: stat["Sending"] + "% Sending",
|
||||||
|
width: stat["Sending"],
|
||||||
|
progress_class: "progress-bar-warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: stat["Error"] + "% Error",
|
||||||
|
width: stat["Error"],
|
||||||
|
progress_class: "progress-bar-danger"
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
@ -12,6 +12,12 @@ class DocType():
|
|||||||
def __init__(self, d, dl):
|
def __init__(self, d, dl):
|
||||||
self.doc, self.doclist = d, dl
|
self.doc, self.doclist = d, dl
|
||||||
|
|
||||||
|
def onload(self):
|
||||||
|
if self.doc.email_sent:
|
||||||
|
self.doc.fields["__status_count"] = dict(webnotes.conn.sql("""select status, count(*)
|
||||||
|
from `tabBulk Email` where ref_doctype=%s and ref_docname=%s
|
||||||
|
group by status""", (self.doc.doctype, self.doc.name))) or None
|
||||||
|
|
||||||
def test_send(self, doctype="Lead"):
|
def test_send(self, doctype="Lead"):
|
||||||
self.recipients = self.doc.test_email_id.split(",")
|
self.recipients = self.doc.test_email_id.split(",")
|
||||||
self.send_to_doctype = "Lead"
|
self.send_to_doctype = "Lead"
|
||||||
@ -74,7 +80,8 @@ class DocType():
|
|||||||
|
|
||||||
send(recipients = self.recipients, sender = sender,
|
send(recipients = self.recipients, sender = sender,
|
||||||
subject = self.doc.subject, message = self.doc.message,
|
subject = self.doc.subject, message = self.doc.message,
|
||||||
doctype = self.send_to_doctype, email_field = "email_id")
|
doctype = self.send_to_doctype, email_field = "email_id",
|
||||||
|
ref_doctype = self.doc.doctype, ref_docname = self.doc.name)
|
||||||
|
|
||||||
webnotes.conn.auto_commit_on_many_writes = False
|
webnotes.conn.auto_commit_on_many_writes = False
|
||||||
|
|
||||||
@ -91,8 +98,10 @@ class DocType():
|
|||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def get_lead_options():
|
def get_lead_options():
|
||||||
return {
|
return {
|
||||||
"sources": ["All"] + webnotes.conn.sql_list("""select distinct source from tabLead"""),
|
"sources": ["All"] + filter(None,
|
||||||
"statuses": ["All"]+ webnotes.conn.sql_list("""select distinct status from tabLead""")
|
webnotes.conn.sql_list("""select distinct source from tabLead""")),
|
||||||
|
"statuses": ["All"] + filter(None,
|
||||||
|
webnotes.conn.sql_list("""select distinct status from tabLead"""))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ def get_blog_list(start=0, by=None, category=None):
|
|||||||
import webnotes.utils
|
import webnotes.utils
|
||||||
|
|
||||||
for res in result:
|
for res in result:
|
||||||
from webnotes.utils import global_date_format, get_fullname
|
from webnotes.utils import global_date_format
|
||||||
res['published'] = global_date_format(res['creation'])
|
res['published'] = global_date_format(res['creation'])
|
||||||
if not res['content']:
|
if not res['content']:
|
||||||
res['content'] = webnotes.webutils.get_html(res['page_name'])
|
res['content'] = webnotes.webutils.get_html(res['page_name'])
|
||||||
@ -101,28 +101,11 @@ def add_comment(args=None):
|
|||||||
doctype='Comment',
|
doctype='Comment',
|
||||||
email_field='comment_by',
|
email_field='comment_by',
|
||||||
subject='New Comment on Blog: ' + blog.title,
|
subject='New Comment on Blog: ' + blog.title,
|
||||||
message='%(comment)s<p>By %(comment_by_fullname)s</p>' % args)
|
message='%(comment)s<p>By %(comment_by_fullname)s</p>' % args,
|
||||||
|
ref_doctype='Blog Post', ref_docname=blog.name)
|
||||||
|
|
||||||
return comment_html.replace("\n", "")
|
return comment_html.replace("\n", "")
|
||||||
|
|
||||||
@webnotes.whitelist(allow_guest=True)
|
|
||||||
def add_subscriber(name, email_id):
|
|
||||||
"""add blog subscriber to lead"""
|
|
||||||
name = webnotes.conn.sql("""select name from tabLead where email_id=%s""", email)
|
|
||||||
|
|
||||||
from webnotes.model.doc import Document
|
|
||||||
if name:
|
|
||||||
lead = Document('Lead', name[0][0])
|
|
||||||
else:
|
|
||||||
lead = Document('Lead')
|
|
||||||
|
|
||||||
if not lead.source: lead.source = 'Blog'
|
|
||||||
lead.unsubscribed = 0
|
|
||||||
lead.blog_subscriber = 1
|
|
||||||
lead.lead_name = name
|
|
||||||
lead.email_id = email
|
|
||||||
lead.save()
|
|
||||||
|
|
||||||
def get_blog_content(blog_page_name):
|
def get_blog_content(blog_page_name):
|
||||||
import webnotes.webutils
|
import webnotes.webutils
|
||||||
content = webnotes.webutils.get_html(blog_page_name)
|
content = webnotes.webutils.get_html(blog_page_name)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user