");
+ this.frm.pos = new erpnext.POS(wrapper, this.frm);
}
// toggle view
- this.frm.layout.set_view(this.pos_active ? "" : "pos");
+ this.frm.page.set_view(this.pos_active ? "main" : "pos");
this.pos_active = !this.pos_active;
// refresh
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index a4348fe58e3..8b96185a92d 100644
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -120,7 +120,7 @@ $.extend(erpnext.utils, {
render_address_and_contact: function(frm) {
// render address
$(frm.fields_dict['address_html'].wrapper)
- .html(frappe.render(frappe.templates.address_list,
+ .html(frappe.render_template("address_list",
cur_frm.doc.__onload))
.find(".btn-address").on("click", function() {
new_doc("Address");
@@ -129,7 +129,7 @@ $.extend(erpnext.utils, {
// render contact
if(frm.fields_dict['contact_html']) {
$(frm.fields_dict['contact_html'].wrapper)
- .html(frappe.render(frappe.templates.contact_list,
+ .html(frappe.render_template("contact_list",
cur_frm.doc.__onload))
.find(".btn-contact").on("click", function() {
new_doc("Contact");
diff --git a/erpnext/selling/doctype/lead/lead.js b/erpnext/selling/doctype/lead/lead.js
index 0dae099e831..170e7186543 100644
--- a/erpnext/selling/doctype/lead/lead.js
+++ b/erpnext/selling/doctype/lead/lead.js
@@ -31,7 +31,7 @@ erpnext.LeadController = frappe.ui.form.Controller.extend({
frappe.boot.doctype_icons["Customer"], "btn-default");
this.frm.add_custom_button(__("Create Opportunity"), this.create_opportunity,
frappe.boot.doctype_icons["Opportunity"], "btn-default");
- this.frm.appframe.add_button(__("Send SMS"), this.frm.cscript.send_sms, "icon-mobile-phone");
+ cur_frm.add_custom_button(__("Send SMS"), this.frm.cscript.send_sms, "icon-mobile-phone");
}
if(!this.frm.doc.__islocal) {
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index b14e0f72a7a..776671ae2a6 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -4,7 +4,6 @@
{% include 'selling/sales_common.js' %}
{% include 'accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js' %}
-{% include 'accounts/doctype/sales_invoice/pos.js' %}
erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({
onload: function(doc, dt, dn) {
@@ -26,7 +25,7 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({
cur_frm.add_custom_button(__('Set as Lost'),
cur_frm.cscript['Declare Order Lost'], "icon-exclamation", "btn-default");
}
- cur_frm.appframe.add_button(__('Send SMS'), cur_frm.cscript.send_sms, "icon-mobile-phone");
+ cur_frm.add_custom_button(__('Send SMS'), cur_frm.cscript.send_sms, "icon-mobile-phone");
}
if (this.frm.doc.docstatus===0) {
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 02f2eb61e1c..3c3d264c9a6 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -3,7 +3,6 @@
{% include 'selling/sales_common.js' %}
{% include 'accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js' %}
-{% include 'accounts/doctype/sales_invoice/pos.js' %}
erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend({
refresh: function(doc, dt, dn) {
diff --git a/erpnext/selling/page/sales_analytics/sales_analytics.js b/erpnext/selling/page/sales_analytics/sales_analytics.js
index 34808662cea..8e5ca966341 100644
--- a/erpnext/selling/page/sales_analytics/sales_analytics.js
+++ b/erpnext/selling/page/sales_analytics/sales_analytics.js
@@ -10,7 +10,7 @@ frappe.pages['sales-analytics'].onload = function(wrapper) {
new erpnext.SalesAnalytics(wrapper);
- wrapper.appframe.add_module_icon("Selling")
+ frappe.add_breadcrumbs("Selling")
}
@@ -20,7 +20,7 @@ erpnext.SalesAnalytics = frappe.views.TreeGridReport.extend({
title: __("Sales Analytics"),
page: wrapper,
parent: $(wrapper).find('.layout-main'),
- appframe: wrapper.appframe,
+ page: wrapper.page,
doctypes: ["Item", "Item Group", "Customer", "Customer Group", "Company", "Territory",
"Fiscal Year", "Sales Invoice", "Sales Invoice Item",
"Sales Order", "Sales Order Item[Sales Analytics]",
diff --git a/erpnext/selling/page/sales_browser/sales_browser.js b/erpnext/selling/page/sales_browser/sales_browser.js
index d2540288659..3f8f6cba288 100644
--- a/erpnext/selling/page/sales_browser/sales_browser.js
+++ b/erpnext/selling/page/sales_browser/sales_browser.js
@@ -6,9 +6,9 @@ pscript['onload_Sales Browser'] = function(wrapper){
parent: wrapper,
})
- wrapper.appframe.add_module_icon("Selling")
+ frappe.add_breadcrumbs("Selling")
- wrapper.appframe.set_title_right(__('Refresh'), function() {
+ wrapper.page.set_primary_action(__('Refresh'), function() {
wrapper.make_tree();
});
@@ -44,7 +44,7 @@ pscript['onshow_Sales Browser'] = function(wrapper){
// set route
var ctype = frappe.get_route()[1] || 'Territory';
- wrapper.appframe.set_title(__('{0} Tree',[__(ctype)]));
+ wrapper.page.set_title(__('{0} Tree',[__(ctype)]));
if(erpnext.sales_chart && erpnext.sales_chart.ctype != ctype) {
wrapper.make_tree();
diff --git a/erpnext/selling/page/sales_funnel/sales_funnel.js b/erpnext/selling/page/sales_funnel/sales_funnel.js
index 76707629cf1..47b6a14e458 100644
--- a/erpnext/selling/page/sales_funnel/sales_funnel.js
+++ b/erpnext/selling/page/sales_funnel/sales_funnel.js
@@ -1,73 +1,71 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.pages['sales-funnel'].onload = function(wrapper) {
+frappe.pages['sales-funnel'].onload = function(wrapper) {
frappe.ui.make_app_page({
parent: wrapper,
title: __('Sales Funnel'),
single_column: true
});
-
+
wrapper.sales_funnel = new erpnext.SalesFunnel(wrapper);
-
- wrapper.appframe.add_module_icon("Selling", "sales-funnel", function() {
- frappe.set_route("selling-home");
- });
+
+ frappe.add_breadcrumbs("Selling");
}
erpnext.SalesFunnel = Class.extend({
init: function(wrapper) {
var me = this;
// 0 setTimeout hack - this gives time for canvas to get width and height
- setTimeout(function() {
+ setTimeout(function() {
me.setup(wrapper);
me.get_data();
}, 0);
},
-
+
setup: function(wrapper) {
var me = this;
-
- this.elements = {
+
+ this.elements = {
layout: $(wrapper).find(".layout-main"),
- from_date: wrapper.appframe.add_date(__("From Date")),
- to_date: wrapper.appframe.add_date(__("To Date")),
- refresh_btn: wrapper.appframe.set_title_right(__("Refresh"),
+ from_date: wrapper.page.add_date(__("From Date")),
+ to_date: wrapper.page.add_date(__("To Date")),
+ refresh_btn: wrapper.page.set_primary_action(__("Refresh"),
function() { me.get_data(); }, "icon-refresh"),
};
-
+
this.elements.no_data = $('
' + __("No Data") + '
')
.toggle(false)
.appendTo(this.elements.layout);
-
+
this.elements.funnel_wrapper = $('
')
.appendTo(this.elements.layout);
-
+
this.options = {
from_date: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
to_date: frappe.datetime.get_today()
};
-
+
// set defaults and bind on change
- $.each(this.options, function(k, v) {
- me.elements[k].val(frappe.datetime.str_to_user(v));
+ $.each(this.options, function(k, v) {
+ me.elements[k].val(frappe.datetime.str_to_user(v));
me.elements[k].on("change", function() {
me.options[k] = frappe.datetime.user_to_str($(this).val());
me.get_data();
});
});
-
+
// bind refresh
this.elements.refresh_btn.on("click", function() {
me.get_data(this);
});
-
+
// bind resize
$(window).resize(function() {
me.render();
});
},
-
+
get_data: function(btn) {
var me = this;
frappe.call({
@@ -85,72 +83,72 @@ erpnext.SalesFunnel = Class.extend({
}
});
},
-
+
render: function() {
var me = this;
this.prepare();
-
+
var context = this.elements.context,
x_start = 0.0,
x_end = this.options.width,
x_mid = (x_end - x_start) / 2.0,
y = 0,
y_old = 0.0;
-
+
if(this.options.total_value === 0) {
this.elements.no_data.toggle(true);
return;
}
-
+
this.options.data.forEach(function(d) {
context.fillStyle = d.color;
context.strokeStyle = d.color;
me.draw_triangle(x_start, x_mid, x_end, y, me.options.height);
-
+
y_old = y;
// new y
y = y + d.height;
-
+
// new x
var half_side = (me.options.height - y) / Math.sqrt(3);
x_start = x_mid - half_side;
x_end = x_mid + half_side;
-
+
var y_mid = y_old + (y - y_old) / 2.0;
-
+
me.draw_legend(x_mid, y_mid, me.options.width, me.options.height, d.value + " - " + d.title);
});
},
-
+
prepare: function() {
var me = this;
-
+
this.elements.no_data.toggle(false);
-
+
// calculate width and height options
this.options.width = $(this.elements.funnel_wrapper).width() * 2.0 / 3.0;
this.options.height = (Math.sqrt(3) * this.options.width) / 2.0;
-
+
// calculate total weightage
// as height decreases, area decreases by the square of the reduction
// hence, compensating by squaring the index value
this.options.total_weightage = this.options.data.reduce(
function(prev, curr, i) { return prev + Math.pow(i+1, 2) * curr.value; }, 0.0);
-
+
// calculate height for each data
$.each(this.options.data, function(i, d) {
d.height = me.options.height * d.value * Math.pow(i+1, 2) / me.options.total_weightage;
});
-
+
this.elements.canvas = $('
')
.appendTo(this.elements.funnel_wrapper.empty())
.attr("width", $(this.elements.funnel_wrapper).width())
.attr("height", this.options.height);
-
+
this.elements.context = this.elements.canvas.get(0).getContext("2d");
},
-
+
draw_triangle: function(x_start, x_mid, x_end, y, height) {
var context = this.elements.context;
context.beginPath();
@@ -161,27 +159,27 @@ erpnext.SalesFunnel = Class.extend({
context.closePath();
context.fill();
},
-
+
draw_legend: function(x_mid, y_mid, width, height, title) {
var context = this.elements.context;
-
+
// draw line
context.beginPath();
context.moveTo(x_mid, y_mid);
context.lineTo(width, y_mid);
context.closePath();
context.stroke();
-
+
// draw circle
context.beginPath();
context.arc(width, y_mid, 5, 0, Math.PI * 2, false);
context.closePath();
context.fill();
-
+
// draw text
context.fillStyle = "black";
context.textBaseline = "middle";
context.font = "1.1em sans-serif";
context.fillText(title, width + 20, y_mid);
}
-});
\ No newline at end of file
+});
diff --git a/erpnext/setup/doctype/item_group/item_group.js b/erpnext/setup/doctype/item_group/item_group.js
index f7ffe5ee492..3bb6c1767f6 100644
--- a/erpnext/setup/doctype/item_group/item_group.js
+++ b/erpnext/setup/doctype/item_group/item_group.js
@@ -5,7 +5,7 @@ cur_frm.list_route = "Sales Browser/Item Group";
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.cscript.set_root_readonly(doc);
- cur_frm.appframe.add_button(__("Item Group Tree"), function() {
+ cur_frm.add_custom_button(__("Item Group Tree"), function() {
frappe.set_route("Sales Browser", "Item Group");
}, "icon-sitemap")
}
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index 56be00661e9..6d1b7e9f2bf 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -19,7 +19,6 @@ class NamingSeries(Document):
prefixes = ""
for d in doctypes:
- print d
try:
options = self.get_options(d)
except frappe.DoesNotExistError:
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 078aa7c1cd0..1668bd0aa04 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -3,7 +3,6 @@
{% include 'selling/sales_common.js' %};
{% include 'accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js' %}
-{% include 'accounts/doctype/sales_invoice/pos.js' %}
frappe.provide("erpnext.stock");
frappe.provide("erpnext.stock.delivery_note");
@@ -26,7 +25,7 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend(
cur_frm.add_custom_button(__('Make Installation Note'), this.make_installation_note);
if (doc.docstatus==1) {
- cur_frm.appframe.add_button(__('Send SMS'), cur_frm.cscript.send_sms, "icon-mobile-phone");
+ cur_frm.add_custom_button(__('Send SMS'), cur_frm.cscript.send_sms, "icon-mobile-phone");
this.show_stock_ledger();
this.show_general_ledger();
}
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 31033e0a357..c89dab1cb65 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -3,7 +3,6 @@
{% include 'buying/doctype/purchase_common/purchase_common.js' %};
{% include 'accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js' %}
-{% include 'accounts/doctype/sales_invoice/pos.js' %}
frappe.provide("erpnext.stock");
erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend({
diff --git a/erpnext/stock/page/stock_analytics/stock_analytics.js b/erpnext/stock/page/stock_analytics/stock_analytics.js
index 963cff0b758..8fd2d324f63 100644
--- a/erpnext/stock/page/stock_analytics/stock_analytics.js
+++ b/erpnext/stock/page/stock_analytics/stock_analytics.js
@@ -12,7 +12,7 @@ frappe.pages['stock-analytics'].onload = function(wrapper) {
new erpnext.StockAnalytics(wrapper);
- wrapper.appframe.add_module_icon("Stock")
+ frappe.add_breadcrumbs("Stock")
}
diff --git a/erpnext/stock/page/stock_ledger/stock_ledger.js b/erpnext/stock/page/stock_ledger/stock_ledger.js
index b4086dc66e8..af0eba26a9b 100644
--- a/erpnext/stock/page/stock_ledger/stock_ledger.js
+++ b/erpnext/stock/page/stock_ledger/stock_ledger.js
@@ -9,7 +9,7 @@ frappe.pages['stock-ledger'].onload = function(wrapper) {
});
new erpnext.StockLedger(wrapper);
- wrapper.appframe.add_module_icon("Stock")
+ frappe.add_breadcrumbs("Stock")
}
frappe.require("assets/erpnext/js/stock_grid_report.js");
@@ -20,7 +20,7 @@ erpnext.StockLedger = erpnext.StockGridReport.extend({
title: __("Stock Ledger"),
page: wrapper,
parent: $(wrapper).find('.layout-main'),
- appframe: wrapper.appframe,
+ page: wrapper.page,
doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand", "Serial No"],
})
},
diff --git a/erpnext/stock/page/stock_level/stock_level.js b/erpnext/stock/page/stock_level/stock_level.js
index 8659c287293..e54c518822b 100644
--- a/erpnext/stock/page/stock_level/stock_level.js
+++ b/erpnext/stock/page/stock_level/stock_level.js
@@ -11,7 +11,7 @@ frappe.pages['stock-level'].onload = function(wrapper) {
new erpnext.StockLevel(wrapper);
- wrapper.appframe.add_module_icon("Stock")
+ frappe.add_breadcrumbs("Stock")
;
}
@@ -25,7 +25,7 @@ erpnext.StockLevel = erpnext.StockGridReport.extend({
title: __("Stock Level"),
page: wrapper,
parent: $(wrapper).find('.layout-main'),
- appframe: wrapper.appframe,
+ page: wrapper.page,
doctypes: ["Item", "Warehouse", "Stock Ledger Entry", "Production Order",
"Material Request Item", "Purchase Order Item", "Sales Order Item", "Brand", "Serial No"],
});
diff --git a/erpnext/support/page/support_analytics/support_analytics.js b/erpnext/support/page/support_analytics/support_analytics.js
index 9e24f679e12..54e6d68722f 100644
--- a/erpnext/support/page/support_analytics/support_analytics.js
+++ b/erpnext/support/page/support_analytics/support_analytics.js
@@ -11,7 +11,7 @@ frappe.pages['support-analytics'].onload = function(wrapper) {
new erpnext.SupportAnalytics(wrapper);
- wrapper.appframe.add_module_icon("Support")
+ frappe.add_breadcrumbs("Support")
}
@@ -21,7 +21,7 @@ erpnext.SupportAnalytics = frappe.views.GridReportWithPlot.extend({
title: __("Support Analtyics"),
page: wrapper,
parent: $(wrapper).find('.layout-main'),
- appframe: wrapper.appframe,
+ page: wrapper.page,
doctypes: ["Issue", "Fiscal Year"],
});
},
diff --git a/erpnext/templates/form_grid/item_grid.html b/erpnext/templates/form_grid/item_grid.html
index 21903c03d0a..2803550484b 100644
--- a/erpnext/templates/form_grid/item_grid.html
+++ b/erpnext/templates/form_grid/item_grid.html
@@ -2,7 +2,7 @@
{% if(!doc) { %}
-
{%= __("Item") %}
+
{%= __("Items") %}
{%= __("Qty") %}
{%= __("Rate") %}
{%= __("Amount") %}
@@ -14,13 +14,36 @@
{%= doc.item_name %}{% } %}
{% if(doc.item_name != doc.description) { %}
{%= doc.description %}
{% } %}
- {% if(doc.sales_order || doc.against_sales_order) { %}
-
-
- {%= doc.sales_order || doc.against_sales_order %}
-
- {% } %}
+
+ {% if(doc.sales_order || doc.against_sales_order) { %}
+
+
+ {%= doc.sales_order || doc.against_sales_order %}
+
+ {% } %}
+ {% if(doc.warehouse) {
+ var label_class = "label-default",
+ title = "Warehouse",
+ actual_qty = (doc.doctype==="Sales Order"
+ ? doc.projected_qty : doc.actual_qty);
+ if(actual_qty != undefined) {
+ if(actual_qty > doc.qty) {
+ var label_class = "label-success";
+ var title = "In Stock"
+ } else {
+ var title = "Not In Stock"
+ }
+ }
+ %}
+
+
+ {%= doc.warehouse %}
+
+
+ {% } %}
+
{% include "templates/form_grid/includes/visible_cols.html" %}
{% if(doc.schedule_date) { %}
doc.qty) {
- var label_class = "label-success";
- var title = "In Stock"
- } else {
- var title = "Not In Stock"
- }
- }
- %}
-
-
- {%= doc.warehouse %}
-
-
- {% } %}
diff --git a/erpnext/templates/includes/cart.js b/erpnext/templates/includes/cart.js
index fff0a329b47..c0b2f4613a5 100644
--- a/erpnext/templates/includes/cart.js
+++ b/erpnext/templates/includes/cart.js
@@ -8,7 +8,7 @@ frappe.provide("shopping_cart");
$.extend(shopping_cart, {
show_error: function(title, text) {
- $("#cart-container").html('
' + title + '
' + text + '');
+ $("#cart-container").html('
' + title + '
' + text + '');
},
bind_events: function() {
@@ -96,7 +96,7 @@ $.extend(shopping_cart, {
});
if(!(addresses && addresses.length)) {
- $cart_shipping_address.html('
'+frappe._("Hey! Go ahead and add an address")+'
');
+ $cart_shipping_address.html('
'+frappe._("Hey! Go ahead and add an address")+'
');
} else {
shopping_cart.render_address($cart_shipping_address, addresses, doc.shipping_address_name);
shopping_cart.render_address($cart_billing_address, addresses, doc.customer_address);
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.js b/erpnext/utilities/doctype/rename_tool/rename_tool.js
index 32b6cd4990c..5a33b2bf5b4 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.js
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.js
@@ -44,7 +44,7 @@ cur_frm.cscript.setup_upload = function() {
.click(function() {
$log.html("Working...");
})
- .addClass("btn-info")
+ .addClass("btn-primary")
.attr('value', 'Upload and Rename')
}