[pos] pos.js included in all selling & purchase cycle
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.js b/accounts/doctype/purchase_invoice/purchase_invoice.js
index 2428a7d..fb5569a 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -8,6 +8,7 @@
wn.provide("erpnext.accounts");
wn.require('app/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js');
wn.require('app/buying/doctype/purchase_common/purchase_common.js');
+wn.require('app/accounts/doctype/sales_invoice/pos.js');
erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
onload: function() {
diff --git a/accounts/doctype/sales_invoice/pos.js b/accounts/doctype/sales_invoice/pos.js
index 67c4b93..ee34440 100644
--- a/accounts/doctype/sales_invoice/pos.js
+++ b/accounts/doctype/sales_invoice/pos.js
@@ -7,7 +7,7 @@
this.frm = frm;
this.wrapper.html('<div class="container">\
<div class="row">\
- <div class="customer-area col-sm-3 col-xs-6"></div>\
+ <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>\
@@ -88,29 +88,31 @@
});
},
make: function() {
- this.make_customer();
+ this.make_party();
this.make_item_group();
this.make_search();
this.make_barcode();
this.make_item_list();
},
- make_customer: function() {
+ make_party: function() {
var me = this;
- console.log(this.frm);
- this.customer = wn.ui.form.make_control({
+ this.party = wn.meta.has_field(cur_frm.doc.doctype, "customer") ?"Customer" : "Supplier";
+
+ this.party_field = wn.ui.form.make_control({
df: {
"fieldtype": "Link",
- "options": "Customer",
- "label": "Customer",
- "fieldname": "pos_customer",
- "placeholder": "Customer"
+ "options": this.party,
+ "label": this.party,
+ "fieldname": "pos_party",
+ "placeholder": this.party
},
- parent: this.wrapper.find(".customer-area")
+ parent: this.wrapper.find(".party-area")
});
- this.customer.make_input();
- this.customer.$input.on("change", function() {
- if(!me.customer.autocomplete_open)
- wn.model.set_value(this.frm.doctype, me.frm.docname, "customer", this.value);
+ this.party_field.make_input();
+ this.party_field.$input.on("change", function() {
+ if(!me.party_field.autocomplete_open)
+ wn.model.set_value(me.frm.doctype, me.frm.docname,
+ me.party.toLowerCase(), this.value);
});
},
make_item_group: function() {
@@ -169,10 +171,17 @@
},
make_item_list: function() {
var me = this;
+ var price_list = wn.meta.has_field(this.frm.doc.doctype, "selling_price_list") ?
+ this.frm.doc.selling_price_list : this.frm.doc.buying_price_list;
+
+ var sales_or_purchase = wn.meta.has_field(this.frm.doc.doctype, "selling_price_list") ?
+ "Sales" : "Purchase";
+
wn.call({
method: 'accounts.doctype.sales_invoice.pos.get_items',
args: {
- price_list: cur_frm.doc.selling_price_list,
+ sales_or_purchase: sales_or_purchase,
+ price_list: price_list,
item_group: this.item_group.$input.val(),
item: this.search.$input.val()
},
@@ -203,8 +212,8 @@
// if form is local then allow this function
if (cur_frm.doc.docstatus===0) {
$("div.pos-item").on("click", function() {
- if(!cur_frm.doc.customer) {
- msgprint("Please select customer first.");
+ if(!cur_frm.doc[me.party.toLowerCase()]) {
+ msgprint("Please select " + me.party + " first.");
return;
}
me.add_to_cart($(this).attr("data-item_code"));
@@ -222,8 +231,8 @@
// check whether the item is already added
if (no_of_items != 0) {
- $.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, "entries",
- this.frm.doctype), function(i, d) {
+ $.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
+ this.frm.cscript.fname, this.frm.doctype), function(i, d) {
if (d.item_code == item_code)
caught = true;
});
@@ -234,15 +243,16 @@
me.update_qty(item_code, 1);
}
else {
- var child = wn.model.add_child(me.frm.doc, this.frm.doctype + " Item", "entries");
+ var child = wn.model.add_child(me.frm.doc, this.frm.doctype + " Item",
+ this.frm.cscript.fname);
child.item_code = item_code;
me.frm.cscript.item_code(me.frm.doc, child.doctype, child.name);
}
},
update_qty: function(item_code, qty, textbox_qty) {
var me = this;
- $.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, "entries",
- this.frm.doctype), function(i, d) {
+ $.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
+ this.frm.cscript.fname, this.frm.doctype), function(i, d) {
if (d.item_code == item_code) {
if (textbox_qty) {
if (qty == 0 && d.item_code == item_code)
@@ -260,14 +270,14 @@
},
refresh: function() {
var me = this;
- this.customer.set_input(this.frm.doc.customer);
+ this.party_field.set_input(this.frm.doc[this.party.toLowerCase()]);
this.barcode.set_input("");
// add items
var $items = me.wrapper.find("#cart tbody").empty();
- $.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, "entries",
- this.frm.doctype), function(i, d) {
+ $.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
+ this.frm.cscript.fname, this.frm.doctype), function(i, d) {
$(repl('<tr id="%(item_code)s" data-selected="false">\
<td>%(item_code)s%(item_name)s</td>\
<td><input type="text" value="%(qty)s" \
@@ -379,17 +389,16 @@
}
}
- var child = wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, "entries",
- this.frm.doctype);
+ var child = wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
+ this.frm.cscript.fname, this.frm.doctype);
$.each(child, function(i, d) {
for (var i in selected_items) {
if (d.item_code == selected_items[i]) {
- // cur_frm.fields_dict["entries"].grid.grid_rows[d.idx].remove();
wn.model.clear_doc(d.doctype, d.name);
}
}
});
- cur_frm.fields_dict["entries"].grid.refresh();
+ cur_frm.fields_dict[this.frm.cscript.fname].grid.refresh();
cur_frm.script_manager.trigger("calculate_taxes_and_totals");
me.frm.dirty();
me.refresh();
diff --git a/accounts/doctype/sales_invoice/pos.py b/accounts/doctype/sales_invoice/pos.py
index 08340f7..d919c1b 100644
--- a/accounts/doctype/sales_invoice/pos.py
+++ b/accounts/doctype/sales_invoice/pos.py
@@ -3,17 +3,22 @@
from __future__ import unicode_literals
import webnotes
-from webnotes import msgprint
+from webnotes import msgprint, errprint
@webnotes.whitelist()
-def get_items(price_list, item=None, item_group=None):
+def get_items(price_list, sales_or_purchase, item=None, item_group=None):
condition = ""
+ if sales_or_purchase == "Sales":
+ condition = "i.is_sales_item='Yes'"
+ else:
+ condition = "i.is_purchase_item='Yes'"
+
if item_group and item_group != "All Item Groups":
- condition = "and i.item_group='%s'" % item_group
+ condition += " and i.item_group='%s'" % item_group
if item:
- condition = "and i.name='%s'" % item
+ condition += " and i.name='%s'" % item
return webnotes.conn.sql("""select i.name, i.item_name, i.image,
pl_items.ref_rate, pl_items.currency
@@ -24,7 +29,7 @@
ON
pl_items.item_code=i.name
where
- i.is_sales_item='Yes'%s""" % ('%s', condition), (price_list), as_dict=1)
+ %s""" % ('%s', condition), (price_list), as_dict=1)
@webnotes.whitelist()
def get_item_from_barcode(barcode):
diff --git a/accounts/doctype/sales_invoice/sales_invoice.css b/accounts/doctype/sales_invoice/sales_invoice.css
deleted file mode 100644
index e4b61b6..0000000
--- a/accounts/doctype/sales_invoice/sales_invoice.css
+++ /dev/null
@@ -1,15 +0,0 @@
-.pos-item {
- height: 200px;
- overflow: hidden;
- cursor: pointer;
- padding-left: 5px !important;
- padding-right: 5px !important;
-}
-
-.pos-bill {
- padding: 20px 5px;
- font-family: Monospace;
- border: 1px solid #eee;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-}
\ No newline at end of file
diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js
index e49d97c..e07ed28 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/accounts/doctype/sales_invoice/sales_invoice.js
@@ -78,6 +78,7 @@
cur_frm.add_custom_button('Make Payment Entry', cur_frm.cscript.make_bank_voucher);
}
+ // Show buttons only when pos view is active
if (doc.docstatus===0 && !this.pos_active) {
cur_frm.cscript.sales_order_btn();
cur_frm.cscript.delivery_note_btn();
diff --git a/buying/doctype/purchase_order/purchase_order.js b/buying/doctype/purchase_order/purchase_order.js
index a960046..9967f15 100644
--- a/buying/doctype/purchase_order/purchase_order.js
+++ b/buying/doctype/purchase_order/purchase_order.js
@@ -10,6 +10,7 @@
wn.require('app/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js');
wn.require('app/utilities/doctype/sms_control/sms_control.js');
wn.require('app/buying/doctype/purchase_common/purchase_common.js');
+wn.require('app/accounts/doctype/sales_invoice/pos.js');
erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend({
refresh: function(doc, cdt, cdn) {
diff --git a/buying/doctype/supplier_quotation/supplier_quotation.js b/buying/doctype/supplier_quotation/supplier_quotation.js
index cd6127d..3fba931 100644
--- a/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -9,6 +9,7 @@
// attach required files
wn.require('app/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js');
wn.require('app/buying/doctype/purchase_common/purchase_common.js');
+wn.require('app/accounts/doctype/sales_invoice/pos.js');
erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.extend({
refresh: function() {
diff --git a/public/js/startup.css b/public/js/startup.css
index ab70ee4..c3b7276 100644
--- a/public/js/startup.css
+++ b/public/js/startup.css
@@ -29,4 +29,21 @@
width: 32px;
height: 32px;
margin: -10px auto;
+}
+
+/* pos */
+.pos-item {
+ height: 200px;
+ overflow: hidden;
+ cursor: pointer;
+ padding-left: 5px !important;
+ padding-right: 5px !important;
+}
+
+.pos-bill {
+ padding: 20px 5px;
+ font-family: Monospace;
+ border: 1px solid #eee;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
}
\ No newline at end of file
diff --git a/public/js/transaction.js b/public/js/transaction.js
index 58dbc2d..a38e3a7 100644
--- a/public/js/transaction.js
+++ b/public/js/transaction.js
@@ -88,7 +88,11 @@
},
toggle_pos: function(show) {
- if (!this.frm.doc.selling_price_list)
+ // Check whether it is Selling or Buying cycle
+ var price_list = wn.meta.has_field(cur_frm.doc.doctype, "selling_price_list") ?
+ this.frm.doc.selling_price_list : this.frm.doc.buying_price_list;
+
+ if (!price_list)
msgprint(wn._("Please select Price List"))
else {
if((show===true && this.pos_active) || (show===false && !this.pos_active)) return;
@@ -106,6 +110,7 @@
// refresh
if(this.pos_active)
this.frm.pos.refresh();
+ this.frm.refresh();
}
},
diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js
index ea1b62a..33ba093 100644
--- a/selling/doctype/quotation/quotation.js
+++ b/selling/doctype/quotation/quotation.js
@@ -11,6 +11,7 @@
wn.require('app/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js');
wn.require('app/utilities/doctype/sms_control/sms_control.js');
wn.require('app/selling/doctype/sales_common/sales_common.js');
+wn.require('app/accounts/doctype/sales_invoice/pos.js');
erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({
onload: function(doc, dt, dn) {
diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js
index 80c2646..0413b72 100644
--- a/stock/doctype/delivery_note/delivery_note.js
+++ b/stock/doctype/delivery_note/delivery_note.js
@@ -10,6 +10,7 @@
wn.require('app/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js');
wn.require('app/utilities/doctype/sms_control/sms_control.js');
wn.require('app/selling/doctype/sales_common/sales_common.js');
+wn.require('app/accounts/doctype/sales_invoice/pos.js');
wn.provide("erpnext.stock");
erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend({
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.js b/stock/doctype/purchase_receipt/purchase_receipt.js
index 8775140..5333c21 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -8,6 +8,7 @@
wn.require('app/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js');
wn.require('app/utilities/doctype/sms_control/sms_control.js');
wn.require('app/buying/doctype/purchase_common/purchase_common.js');
+wn.require('app/accounts/doctype/sales_invoice/pos.js');
wn.provide("erpnext.stock");
erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend({