[merge] v5-design

This commit is contained in:
Rushabh Mehta 2014-12-31 15:03:14 +05:30
commit 419ae33c3e
43 changed files with 317 additions and 321 deletions

View File

@ -51,7 +51,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.toggle_display('sb1', doc.group_or_ledger=='Ledger')
cur_frm.set_intro(intro_txt);
cur_frm.appframe.add_button(__('Chart of Cost Centers'),
cur_frm.add_custom_button(__('Chart of Cost Centers'),
function() { frappe.set_route("Accounts Browser", "Cost Center"); }, 'icon-sitemap')
}

View File

@ -139,7 +139,7 @@ cur_frm.cscript.refresh = function(doc) {
erpnext.toggle_naming_series();
cur_frm.cscript.voucher_type(doc);
if(doc.docstatus==1) {
cur_frm.appframe.add_button(__('View Ledger'), function() {
cur_frm.add_custom_button(__('View Ledger'), function() {
frappe.route_options = {
"voucher_no": doc.name,
"from_date": doc.posting_date,

View File

@ -4,7 +4,6 @@
frappe.provide("erpnext.accounts");
{% 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' %}
erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
onload: function() {
@ -27,7 +26,7 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
frappe.boot.doctype_icons["Journal Entry"]);
if(doc.docstatus==1) {
cur_frm.appframe.add_button(__('View Ledger'), function() {
cur_frm.add_custom_button(__('View Ledger'), function() {
frappe.route_options = {
"voucher_no": doc.name,
"from_date": doc.posting_date,

View File

@ -6,7 +6,6 @@ cur_frm.pformat.print_heading = 'Invoice';
{% 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.accounts");
erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.extend({
@ -44,7 +43,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
cur_frm.dashboard.reset();
if(doc.docstatus==1) {
cur_frm.appframe.add_button('View Ledger', function() {
cur_frm.add_custom_button('View Ledger', function() {
frappe.route_options = {
"voucher_no": doc.name,
"from_date": doc.posting_date,
@ -55,10 +54,10 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
frappe.set_route("query-report", "General Ledger");
}, "icon-table");
var percent_paid = cint(flt(doc.grand_total - doc.outstanding_amount) / flt(doc.grand_total) * 100);
cur_frm.dashboard.add_progress(percent_paid + "% Paid", percent_paid);
// var percent_paid = cint(flt(doc.grand_total - doc.outstanding_amount) / flt(doc.grand_total) * 100);
// cur_frm.dashboard.add_progress(percent_paid + "% Paid", percent_paid);
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(cint(doc.update_stock)!=1) {
// show Make Delivery Note button only if Sales Invoice is not created from Delivery Note
@ -69,12 +68,12 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
});
if(!from_delivery_note) {
cur_frm.appframe.add_primary_action(__('Make Delivery'), cur_frm.cscript['Make Delivery Note'], "icon-truck")
cur_frm.page.add_menu_item(__('Make Delivery'), cur_frm.cscript['Make Delivery Note'], "icon-truck")
}
}
if(doc.outstanding_amount!=0) {
cur_frm.appframe.add_primary_action(__('Make Payment Entry'), cur_frm.cscript.make_bank_entry, "icon-money");
cur_frm.page.add_menu_item(__('Make Payment Entry'), cur_frm.cscript.make_bank_entry, "icon-money");
}
}
@ -86,7 +85,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
},
sales_order_btn: function() {
this.$sales_order_btn = cur_frm.appframe.add_primary_action(__('From Sales Order'),
this.$sales_order_btn = cur_frm.page.add_menu_item(__('From Sales Order'),
function() {
frappe.model.map_current_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
@ -103,7 +102,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
},
delivery_note_btn: function() {
this.$delivery_note_btn = cur_frm.appframe.add_primary_action(__('From Delivery Note'),
this.$delivery_note_btn = cur_frm.page.add_menu_item(__('From Delivery Note'),
function() {
frappe.model.map_current_doc({
method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",

View File

@ -13,13 +13,13 @@ pscript['onload_Accounts Browser'] = function(wrapper){
single_column: true
})
wrapper.appframe.add_module_icon("Accounts");
frappe.add_breadcrumbs("Accounts");
var main = $(wrapper).find(".layout-main"),
chart_area = $("<div>")
.css({"margin-bottom": "15px", "min-height": "200px"})
.appendTo(main),
help_area = $('<div class="well">'+
help_area = $('<div class="msg-box">'+
'<h4>'+__('Quick Help')+'</h4>'+
'<ol>'+
'<li>'+__('To add child nodes, explore tree and click on the node under which you want to add more nodes.')+'</li>'+
@ -41,16 +41,16 @@ pscript['onload_Accounts Browser'] = function(wrapper){
'<p>'+__('Please setup your chart of accounts before you start Accounting Entries')+'</p></div>').appendTo(main);
if (frappe.boot.user.can_create.indexOf("Company") !== -1) {
wrapper.appframe.add_button(__('New Company'), function() { newdoc('Company'); },
wrapper.page.add_button(__('New Company'), function() { newdoc('Company'); },
'icon-plus');
}
wrapper.appframe.set_title_right(__('Refresh'), function() {
wrapper.page.set_primary_action(__('Refresh'), function() {
wrapper.$company_select.change();
});
// company-select
wrapper.$company_select = wrapper.appframe.add_select("Company", [])
wrapper.$company_select = wrapper.page.add_select("Company", [])
.change(function() {
var ctype = frappe.get_route()[1] || 'Account';
erpnext.account_chart = new erpnext.AccountsChart(ctype, $(this).val(),
@ -73,9 +73,9 @@ pscript['onload_Accounts Browser'] = function(wrapper){
pscript.set_title = function(wrapper, ctype, val) {
if(val) {
wrapper.appframe.set_title('Chart of '+ctype+'s' + " - " + cstr(val));
wrapper.page.set_title('Chart of '+ctype+'s' + " - " + cstr(val));
} else {
wrapper.appframe.set_title('Chart of '+ctype+'s');
wrapper.page.set_title('Chart of '+ctype+'s');
}
}

View File

@ -10,7 +10,7 @@ frappe.pages['financial-analytics'].onload = function(wrapper) {
single_column: true
});
erpnext.trial_balance = new erpnext.FinancialAnalytics(wrapper, 'Financial Analytics');
wrapper.appframe.add_module_icon("Accounts")
frappe.add_breadcrumbs("Accounts")
}

View File

@ -5,7 +5,6 @@ frappe.provide("erpnext.buying");
{% 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' %}
erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend({
refresh: function(doc, cdt, cdn) {

View File

@ -4,7 +4,6 @@
// attach required files
{% 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' %}
erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.extend({
refresh: function() {

View File

@ -11,7 +11,7 @@ frappe.pages['purchase-analytics'].onload = function(wrapper) {
new erpnext.PurchaseAnalytics(wrapper);
wrapper.appframe.add_module_icon("Buying")
frappe.add_breadcrumbs("Buying")
}
@ -21,7 +21,7 @@ erpnext.PurchaseAnalytics = frappe.views.TreeGridReport.extend({
title: __("Purchase Analytics"),
page: wrapper,
parent: $(wrapper).find('.layout-main'),
appframe: wrapper.appframe,
page: wrapper.page,
doctypes: ["Item", "Item Group", "Supplier", "Supplier Type", "Company", "Fiscal Year",
"Purchase Invoice", "Purchase Invoice Item",
"Purchase Order", "Purchase Order Item[Purchase Analytics]",

View File

@ -4,54 +4,63 @@ def get_data():
return {
"Accounts": {
"color": "#3498db",
"icon": "icon-money",
"icon": "octicon octicon-repo",
"type": "module"
},
"Buying": {
"color": "#c0392b",
"icon": "icon-shopping-cart",
"icon": "octicon octicon-briefcase",
"type": "module"
},
"HR": {
"color": "#2ecc71",
"icon": "icon-group",
"icon": "octicon octicon-organization",
"label": _("Human Resources"),
"type": "module"
},
"Manufacturing": {
"color": "#7f8c8d",
"icon": "icon-cogs",
"icon": "octicon octicon-gear",
"type": "module"
},
"POS": {
"color": "#589494",
"icon": "icon-th",
"icon": "octicon octicon-credit-card",
"type": "page",
"link": "pos"
},
"Projects": {
"color": "#8e44ad",
"icon": "icon-puzzle-piece",
"icon": "octicon octicon-rocket",
"type": "module"
},
"Selling": {
"color": "#1abc9c",
"icon": "icon-tag",
"icon": "octicon octicon-tag",
"type": "module"
},
"Stock": {
"color": "#f39c12",
"icon": "icon-truck",
"icon": "octicon octicon-package",
"type": "module"
},
"Support": {
"color": "#2c3e50",
"icon": "icon-phone",
"icon": "octicon octicon-issue-opened",
"type": "module"
},
"Shopping Cart": {
"color": "#B7E090",
"icon": "icon-shopping-cart",
"icon": "octicon octicon-gear",
"label": _("Shopping Cart"),
"link": "Form/Shopping Cart Settings",
"type": "module"

View File

@ -17,7 +17,7 @@ def get_data():
]
},
{
"label": _("Printing and Branding"),
"label": _("Printing"),
"icon": "icon-print",
"items": [
{

View File

@ -73,9 +73,7 @@ class StatusUpdater(Document):
frappe.db.set_value(self.doctype, self.name, "status", self.status)
def validate_qty(self):
"""
Validates qty at row level
"""
"""Validates qty at row level"""
self.tolerance = {}
self.global_tolerance = None

View File

@ -85,9 +85,6 @@ cur_frm.cscript.refresh = function(doc,cdt,cdn){
cur_frm.toggle_enable("exp_approver", doc.approval_status=="Draft");
cur_frm.toggle_enable("approval_status", (doc.exp_approver==user && doc.docstatus==0));
if(!doc.__islocal && user!=doc.exp_approver)
cur_frm.frm_head.appframe.set_title_right("");
if(doc.docstatus==0 && doc.exp_approver==user && doc.approval_status=="Approved")
cur_frm.savesubmit();

View File

@ -35,9 +35,6 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
} else {
cur_frm.set_intro(__("This Leave Application is pending approval. Only the Leave Apporver can update status."))
cur_frm.toggle_enable("status", false);
if(!doc.__islocal) {
cur_frm.frm_head.appframe.set_title_right("");
}
}
} else {
if(doc.status=="Approved") {

View File

@ -6,7 +6,7 @@ frappe.listview_settings['Time Log'] = {
add_fields: ["status", "billable", "activity_type", "task", "project", "hours", "time_log_for"],
selectable: true,
onload: function(me) {
me.appframe.add_primary_action(__("Make Time Log Batch"), function() {
me.page.add_menu_item(__("Make Time Log Batch"), function() {
var selected = me.get_checked_items() || [];
if(!selected.length) {

View File

@ -13,7 +13,10 @@
"public/js/queries.js",
"public/js/utils/party.js",
"public/js/templates/address_list.html",
"public/js/templates/contact_list.html"
"public/js/templates/contact_list.html",
"public/js/pos/pos.html",
"public/js/pos/pos_bill_item.html",
"public/js/pos/pos.js"
],
"css/shopping-cart-web.css": [
"public/css/shopping_cart.css"

View File

@ -1,7 +1,3 @@
.small {
font-size: 11.5px;
}
.erpnext-footer {
margin: 11px auto;
text-align: center;
@ -20,6 +16,9 @@
}
/* pos */
.pos {
}
.pos-item {
height: 200px;
overflow: hidden;
@ -28,10 +27,62 @@
padding-right: 5px !important;
}
.pos-bill {
margin-left: -30px;
margin-top: -10px;
padding: 20px 10px;
border-right: 1px solid #c7c7c7;
border-bottom: 1px solid #c7c7c7;
.pos-item-area {
border: 1px solid #d1d8dd;
border-top: none;
}
.pos-item-toolbar {
padding: 10px 0px;
border-bottom: 1px solid #d1d8dd;
}
.item-list-area {
padding: 15px;
}
.pos-toolbar, .pos-bill-toolbar {
padding: 10px 0px;
border-bottom: 1px solid #d1d8dd;
height: 55px;
}
.pos-item-toolbar .form-group {
margin-bottom: 0px;
}
.pos-bill-wrapper {
border: 1px solid #d1d8dd;
border-top: none;
border-right: none;
}
.pos-bill {
margin-left: -15px;
margin-right: -15px;
}
.pos-bill-row {
margin: 0px;
padding: 7px 0px;
border-top: 1px solid #d1d8dd;
}
.pos-bill-header {
border: none !important;
background-color: #f5f7fa;
}
.pos-item-qty {
display: inline-block;
}
.pos-qty-row > div {
padding: 5px 0px;
}
.pos-qty-btn {
margin-top: 5px;
cursor: pointer;
font-size: 120%;
}

View File

@ -20,7 +20,7 @@ erpnext.AccountTreeGrid = frappe.views.TreeGridReport.extend({
title: title,
page: wrapper,
parent: $(wrapper).find('.layout-main'),
appframe: wrapper.appframe,
page: wrapper.page,
doctypes: ["Company", "Fiscal Year", "Account", "GL Entry", "Cost Center"],
tree_grid: {
show: true,
@ -69,7 +69,7 @@ erpnext.AccountTreeGrid = frappe.views.TreeGridReport.extend({
{fieldtype: "Label", label: __("To")},
{fieldtype: "Date", label: __("To Date"), fieldname: "to_date"},
{fieldtype: "Button", label: __("Refresh"), icon:"icon-refresh icon-white",
cssClass:"btn-info"},
cssClass:"btn-primary"},
{fieldtype: "Button", label: __("Reset Filters"), icon: "icon-filter"},
],
setup_filters: function() {

View File

@ -7,14 +7,7 @@ frappe.provide('erpnext');
$(document).bind('toolbar_setup', function() {
frappe.app.name = "ERPNext";
$('.navbar-brand').html('<i class="icon-home"></i>')
.attr("title", "Home")
.addClass("navbar-icon-home")
.css({
"max-width": "200px",
"text-overflow": "ellipsis",
"white-space": "nowrap"
});
$('.navbar-brand').html('ERPNext');
$('[data-link="docs"]').attr("href", "https://erpnext.com/user-guide")
});

View File

@ -43,7 +43,7 @@ erpnext.stock.StockController = frappe.ui.form.Controller.extend({
show_stock_ledger: function() {
var me = this;
if(this.frm.doc.docstatus===1) {
this.frm.appframe.add_button(__("Stock Ledger"), function() {
cur_frm.add_custom_button(__("Stock Ledger"), function() {
frappe.route_options = {
voucher_no: me.frm.doc.name,
from_date: me.frm.doc.posting_date,
@ -59,7 +59,7 @@ erpnext.stock.StockController = frappe.ui.form.Controller.extend({
show_general_ledger: function() {
var me = this;
if(this.frm.doc.docstatus===1 && cint(frappe.defaults.get_default("auto_accounting_for_stock"))) {
cur_frm.appframe.add_button(__('Accounting Ledger'), function() {
cur_frm.add_custom_button(__('Accounting Ledger'), function() {
frappe.route_options = {
voucher_no: me.frm.doc.name,
from_date: me.frm.doc.posting_date,

View File

@ -0,0 +1,55 @@
<div class="pos">
<div class="row">
<div class="col-sm-5 pos-bill-wrapper">
<div class="pos-bill-toolbar row">
<div class="party-area col-xs-6"></div>
<div class="col-xs-6">
<button class="btn btn-success make-payment">{%= __("Pay") %}</button>
</div>
</div>
<div class="pos-bill">
<div class="item-cart">
<div class="row pos-bill-row pos-bill-header">
<div class="col-xs-5"><h6>{%= __("Item") %}</h6></div>
<div class="col-xs-4"><h6 class="text-right">{%= __("Quantity") %}</h6></div>
<div class="col-xs-3"><h6 class="text-right">{%= __("Rate") %}</h6></div>
</div>
<div class="items"></div>
</div>
<div class="totals-area">
<div class="row pos-bill-row net-total-area">
<div class="col-xs-6"><h6 class="text-muted">{%= __("Net Total") %}</h6></div>
<div class="col-xs-6"><h6 class="net-total text-right"></h6></div>
</div>
<div class="tax-table hide">
<h6>{%= __("Taxes") %}</h6>
</div>
<div class="row pos-bill-row discount-amount-area">
<div class="col-xs-6"><h6 class="text-muted">{%= __("Discount Amount") %}</h6></div>
<div class="col-xs-6"><input type="text" class="form-control discount-amount text-right"></div>
</div>
<div class="row pos-bill-row grand-total-area">
<div class="col-xs-6"><h6>{%= __("Grand Total") %}</h6></div>
<div class="col-xs-6"><h6 class="grand-total text-right"></h6></div>
</div>
<div class="row pos-bill-row paid-amount-area">
<div class="col-xs-6"><h6 class="text-muted">{%= __("Amount Paid") %}</h6></div>
<div class="col-xs-6"><input type="text" class="form-control paid-amount text-right"></div>
</div>
</div>
</div>
</div>
<div class="col-sm-7 pos-item-area">
<div class="row pos-item-toolbar">
<div class="barcode-area col-xs-4"></div>
<div class="search-area col-xs-4"></div>
<div class="item-group-area col-xs-4"></div>
</div>
<div class="item-list-area row">
<div class="col-sm-12">
<div class="row item-list"></div>
</div>
</div>
</div>
</div>
</div>

View File

@ -5,105 +5,7 @@ erpnext.POS = Class.extend({
init: function(wrapper, frm) {
this.wrapper = wrapper;
this.frm = frm;
this.wrapper.html('<div class="container">\
<div class="row" style="margin: -9px 0px 10px -30px; border-bottom: 1px solid #c7c7c7;">\
<div class="party-area col-sm-3 col-xs-6"></div>\
<div class="barcode-area col-sm-3 col-xs-6"></div>\
<div class="search-area col-sm-3 col-xs-6"></div>\
<div class="item-group-area col-sm-3 col-xs-6"></div>\
</div>\
<div class="row">\
<div class="col-sm-6">\
<div class="pos-bill">\
<div class="item-cart">\
<table class="table table-condensed table-hover" id="cart" style="table-layout: fixed;">\
<thead>\
<tr>\
<th style="width: 40%">'+__("Item")+'</th>\
<th style="width: 9%"></th>\
<th style="width: 22%; text-align: right;">Qty</th>\
<th style="width: 9%"></th>\
<th style="width: 20%; text-align: right;">Rate</th>\
</tr>\
</thead>\
<tbody>\
</tbody>\
</table>\
</div>\
<br>\
<div class="totals-area" style="margin-left: 40%;">\
<div class="net-total-area">\
<table class="table table-condensed">\
<tr>\
<td><b>'+__("Net Total")+'</b></td>\
<td style="text-align: right;" class="net-total"></td>\
</tr>\
</table>\
</div>\
<div class="tax-table" style="display: none;">\
<table class="table table-condensed">\
<thead>\
<tr>\
<th style="width: 60%">'+__("Taxes")+'</th>\
<th style="width: 40%; text-align: right;"></th>\
</tr>\
</thead>\
<tbody>\
</tbody>\
</table>\
</div>\
<div class="discount-amount-area">\
<table class="table table-condensed">\
<tr>\
<td style="vertical-align: middle;" width="50%"><b>'+__("Discount Amount")+'</b></td>\
<td width="20%"></td>\
<td style="text-align: right;">\
<input type="text" class="form-control discount-amount" \
style="text-align: right;">\
</td>\
</tr>\
</table>\
</div>\
<div class="grand-total-area">\
<table class="table table-condensed">\
<tr>\
<td style="vertical-align: middle;"><b>'+__("Grand Total")+'</b></td>\
<td style="text-align: right; font-size: 200%; \
font-size: bold;" class="grand-total"></td>\
</tr>\
</table>\
</div>\
<div class="paid-amount-area">\
<table class="table table-condensed">\
<tr>\
<td style="vertical-align: middle;">'+__("Amount Paid")+'</td>\
<td style="text-align: right; \
font-size: bold;" class="paid-amount"></td>\
</tr>\
</table>\
</div>\
</div>\
</div>\
<br><br>\
<div class="row">\
<div class="col-sm-9">\
<button class="btn btn-success btn-lg make-payment">\
<i class="icon-money"></i> '+__("Make Payment")+'</button>\
</div>\
<div class="col-sm-3">\
<button class="btn btn-default btn-lg remove-items" style="display: none;">\
<i class="icon-trash"></i> '+__("Del")+'</button>\
</div>\
</div>\
<br><br>\
</div>\
<div class="col-sm-6">\
<div class="item-list-area">\
<div class="col-sm-12">\
<div class="row item-list"></div></div>\
</div>\
</div>\
</div></div>');
this.wrapper.html(frappe.render_template("pos", {}));
this.check_transaction_type();
this.make();
@ -276,14 +178,8 @@ erpnext.POS = Class.extend({
// if form is local then allow this function
$(me.wrapper).find("div.pos-item").on("click", function() {
if(me.frm.doc.docstatus==0) {
if(!me.frm.doc[me.party.toLowerCase()] && ((me.frm.doctype == "Quotation" &&
me.frm.doc.quotation_to == "Customer")
|| me.frm.doctype != "Quotation")) {
msgprint(__("Please select {0} first.", [me.party]));
return;
}
else
me.add_to_cart($(this).attr("data-item_code"));
console.log($(this).attr("data-item_code"));
me.add_to_cart($(this).attr("data-item_code"));
}
});
}
@ -293,8 +189,15 @@ erpnext.POS = Class.extend({
var me = this;
var caught = false;
if(!me.frm.doc[me.party.toLowerCase()] && ((me.frm.doctype == "Quotation" &&
me.frm.doc.quotation_to == "Customer")
|| me.frm.doctype != "Quotation")) {
msgprint(__("Please select {0} first.", [me.party]));
return;
}
// get no_of_items
var no_of_items = me.wrapper.find("#cart tbody tr").length;
var no_of_items = me.wrapper.find(".pos-bill-item").length;
// check whether the item is already added
if (no_of_items != 0) {
@ -337,6 +240,7 @@ erpnext.POS = Class.extend({
}
},
update_qty: function(item_code, qty) {
console.log([item_code, qty]);
var me = this;
$.each(this.frm.doc["items"] || [], function(i, d) {
if (d.item_code == item_code) {
@ -372,7 +276,7 @@ erpnext.POS = Class.extend({
// If quotation to is not Customer then remove party
if (this.frm.doctype == "Quotation" && this.frm.doc.quotation_to!="Customer") {
this.party_field.$wrapper.remove();
this.party_field.$input.prop("disabled", true);
}
},
refresh_item_list: function() {
@ -385,45 +289,20 @@ erpnext.POS = Class.extend({
},
show_items_in_item_cart: function() {
var me = this;
var $items = this.wrapper.find("#cart tbody").empty();
var $items = this.wrapper.find(".items").empty();
$.each(this.frm.doc["items"] || [], function(i, d) {
$(repl('<tr id="%(item_code)s" data-selected="false">\
<td>%(item_code)s%(item_name)s</td>\
<td style="vertical-align:top; padding-top: 10px;" \
align="right">\
<div class="decrease-qty" style="cursor:pointer;">\
<i class="icon-minus-sign icon-large text-danger"></i>\
</div>\
</td>\
<td style="vertical-align:middle;">\
<input type="text" value="%(qty)s" \
class="form-control qty" style="text-align: right;">\
<div class="actual-qty small text-muted">'
+__("Stock: ")+'<span class="text-success">%(actual_qty)s</span>%(projected_qty)s</div>\
</td>\
<td style="vertical-align:top; padding-top: 10px;">\
<div class="increase-qty" style="cursor:pointer;">\
<i class="icon-plus-sign icon-large text-success"></i>\
</div>\
</td>\
<td style="text-align: right;"><b>%(amount)s</b><br>%(rate)s</td>\
</tr>',
{
item_code: d.item_code,
item_name: d.item_name===d.item_code ? "" : ("<br>" + d.item_name),
qty: d.qty,
actual_qty: d.actual_qty,
projected_qty: d.projected_qty ? (" <span title='"+__("Projected Qty")
+"'>(" + d.projected_qty + ")<span>") : "",
rate: format_currency(d.rate, me.frm.doc.currency),
amount: format_currency(d.amount, me.frm.doc.currency)
}
)).appendTo($items);
$.each(this.frm.doc.items|| [], function(i, d) {
$(frappe.render_template("pos_bill_item", {
item_code: d.item_code,
item_name: d.item_name===d.item_code ? "" : ("<br>" + d.item_name),
qty: d.qty,
actual_qty: d.actual_qty,
rate: format_currency(d.rate, me.frm.doc.currency),
amount: format_currency(d.amount, me.frm.doc.currency)
})).appendTo($items);
});
this.wrapper.find("input.qty").on("focus", function() {
this.wrapper.find("input.pos-item-qty").on("focus", function() {
$(this).select();
});
},
@ -465,15 +344,15 @@ erpnext.POS = Class.extend({
var me = this;
// append quantity to the respective item after change from input box
$(this.wrapper).find("input.qty").on("change", function() {
$(this.wrapper).find("input.pos-item-qty").on("change", function() {
var item_code = $(this).closest("tr").attr("id");
me.update_qty(item_code, $(this).val());
});
// increase/decrease qty on plus/minus button
$(this.wrapper).find(".increase-qty, .decrease-qty").on("click", function() {
var tr = $(this).closest("tr");
me.increase_decrease_qty(tr, $(this).attr("class"));
$(this.wrapper).find(".pos-qty-btn").on("click", function() {
var $item = $(this).parents(".pos-bill-item:first");
me.increase_decrease_qty($item, $(this).attr("data-action"));
});
// on td click toggle the highlighting of row
@ -491,15 +370,23 @@ erpnext.POS = Class.extend({
});
me.refresh_delete_btn();
<<<<<<< HEAD:erpnext/accounts/doctype/sales_invoice/pos.js
if(me.frm.doc[this.party.toLowerCase()]) {
=======
//me.focus();
},
focus: function() {
if(me.frm.doc[this.party]) {
>>>>>>> v5-design:erpnext/public/js/pos/pos.js
this.barcode.$input.focus();
} else {
this.party_field.$input.focus();
if(!(this.frm.doctype == "Quotation" && this.frm.doc.quotation_to!="Customer"))
this.party_field.$input.focus();
}
},
increase_decrease_qty: function(tr, operation) {
var item_code = tr.attr("id");
var item_qty = cint(tr.find("input.qty").val());
increase_decrease_qty: function($item, operation) {
var item_code = $item.attr("data-item-code");
var item_qty = cint($item.find("input.pos-item-qty").val());
if (operation == "increase-qty")
this.update_qty(item_code, item_qty + 1);
@ -510,7 +397,7 @@ erpnext.POS = Class.extend({
var me = this;
// if form is submitted & cancelled then disable all input box & buttons
$(this.wrapper)
.find(".remove-items, .make-payment, .increase-qty, .decrease-qty")
.find(".remove-items, .make-payment, .pos-qty-btn")
.toggle(this.frm.doc.docstatus===0);
$(this.wrapper).find('input, button').prop("disabled", !(this.frm.doc.docstatus===0));

View File

@ -0,0 +1,16 @@
<div class="row pos-bill-row pos-bill-item" data-item-code="{%= item_code %}">
<div class="col-xs-5"><h6>{%= item_code %}{%= item_name %}</h6></div>
<div class="col-xs-4">
<div class="row pos-qty-row">
<div class="col-xs-2 text-center pos-qty-btn" data-action="decrease-qty"><i class="icon-minus-sign text-muted"></i></div>
<div class="col-xs-8">
<input type="text" value="{%= qty %}" class="form-control input-sm pos-item-qty text-right">
<div class="actual-qty small text-muted text-right">{%= actual_qty %}</div>
</div>
<div class="col-xs-2 text-center pos-qty-btn" data-action="increase-qty"><i class="icon-plus-sign text-muted"></i></div>
</div>
</div>
<div class="col-xs-3 text-right">
<h6>{%= amount %}<div class="text-muted" style="margin-top: 5px;">{%= rate %}</div></h6>
</div>
</div>

View File

@ -9,7 +9,7 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({
title: __("Stock Analytics"),
page: wrapper,
parent: $(wrapper).find('.layout-main'),
appframe: wrapper.appframe,
page: wrapper.page,
doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand",
"Fiscal Year", "Serial No"],
tree_grid: {

View File

@ -82,9 +82,9 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
this.$pos_btn && this.$pos_btn.remove();
this.$pos_btn = this.frm.appframe.add_primary_action(btn_label, function() {
this.$pos_btn = this.frm.page.add_menu_item(btn_label, function() {
me.toggle_pos();
}, icon, "btn-default");
});
} else {
// hack: will avoid calling refresh from refresh
setTimeout(function() { me.toggle_pos(false); }, 100);
@ -105,12 +105,12 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
// make pos
if(!this.frm.pos) {
this.frm.layout.add_view("pos");
this.frm.pos = new erpnext.POS(this.frm.layout.views.pos, this.frm);
var wrapper = this.frm.page.add_view("pos", "<div>");
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

View File

@ -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");

View File

@ -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) {

View File

@ -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) {

View File

@ -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) {

View File

@ -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]",

View File

@ -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();

View File

@ -10,9 +10,7 @@ frappe.pages['sales-funnel'].onload = function(wrapper) {
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({
@ -30,9 +28,9 @@ erpnext.SalesFunnel = Class.extend({
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"),
};

View File

@ -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")
}

View File

@ -19,7 +19,6 @@ class NamingSeries(Document):
prefixes = ""
for d in doctypes:
print d
try:
options = self.get_options(d)
except frappe.DoesNotExistError:

View File

@ -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();
}

View File

@ -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({

View File

@ -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")
}

View File

@ -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"],
})
},

View File

@ -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"],
});

View File

@ -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"],
});
},

View File

@ -2,7 +2,7 @@
{% if(!doc) { %}
<div class="row">
<div class="col-sm-6">{%= __("Item") %}</div>
<div class="col-sm-6">{%= __("Items") %}</div>
<div class="col-sm-2 text-right">{%= __("Qty") %}</div>
<div class="col-sm-2 text-right">{%= __("Rate") %}</div>
<div class="col-sm-2 text-right">{%= __("Amount") %}</div>
@ -14,13 +14,36 @@
<br>{%= doc.item_name %}{% } %}
{% if(doc.item_name != doc.description) { %}
<p>{%= doc.description %}</p>{% } %}
{% if(doc.sales_order || doc.against_sales_order) { %}
<p><span class="label label-default"
title="{%= __("Sales Order") %}">
<i class="icon-file"></i>
{%= doc.sales_order || doc.against_sales_order %}
</span></p>
{% } %}
<div>
{% if(doc.sales_order || doc.against_sales_order) { %}
<span class="label label-default"
title="{%= __("Sales Order") %}">
<i class="icon-file"></i>
{%= doc.sales_order || doc.against_sales_order %}
</span>
{% } %}
{% 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"
}
}
%}
<span style="margin-left: 10px;"
title="{%= title %}">
<span class="label {%= label_class %}">
{%= doc.warehouse %}
</span>
</span>
{% } %}
</div>
{% include "templates/form_grid/includes/visible_cols.html" %}
{% if(doc.schedule_date) { %}
<div><span title="{%= __("Reqd By Date") %}" class="label {%=
@ -46,28 +69,6 @@
%}
{% include "templates/form_grid/includes/progress.html" %}
{% } %}
{% 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"
}
}
%}
<div style="overflow:hidden; min-height: 25px;
white-space:nowrap; text-overflow: ellipsis;"
title="{%= title %}">
<span class="label {%= label_class %}">
{%= doc.warehouse %}
</span>
</div>
{% } %}
</div>
<!-- rate -->

View File

@ -8,7 +8,7 @@ frappe.provide("shopping_cart");
$.extend(shopping_cart, {
show_error: function(title, text) {
$("#cart-container").html('<div class="well"><h4>' + title + '</h4> ' + text + '</div>');
$("#cart-container").html('<div class="msg-box"><h4>' + title + '</h4> ' + text + '</div>');
},
bind_events: function() {
@ -96,7 +96,7 @@ $.extend(shopping_cart, {
});
if(!(addresses && addresses.length)) {
$cart_shipping_address.html('<div class="well">'+frappe._("Hey! Go ahead and add an address")+'</div>');
$cart_shipping_address.html('<div class="msg-box">'+frappe._("Hey! Go ahead and add an address")+'</div>');
} else {
shopping_cart.render_address($cart_shipping_address, addresses, doc.shipping_address_name);
shopping_cart.render_address($cart_billing_address, addresses, doc.customer_address);

View File

@ -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')
}