Merge branch 'develop' of github.com:trhura/erpnext
diff --git a/accounts/doctype/sales_invoice/pos.js b/accounts/doctype/sales_invoice/pos.js
index b71b45e..a594f7f 100644
--- a/accounts/doctype/sales_invoice/pos.js
+++ b/accounts/doctype/sales_invoice/pos.js
@@ -109,6 +109,7 @@
this.party = party;
this.price_list = (party == "Customer" ?
this.frm.doc.selling_price_list : this.frm.doc.buying_price_list);
+ this.price_list_field = (party == "Customer" ? "selling_price_list" : "buying_price_list");
this.sales_or_purchase = (party == "Customer" ? "Sales" : "Purchase");
this.net_total = "net_total_" + export_or_import;
this.grand_total = "grand_total_" + export_or_import;
@@ -269,22 +270,17 @@
this.frm.cscript.fname, this.frm.doctype), function(i, d) {
if (d.item_code == item_code) {
caught = true;
- if (serial_no) {
- d.serial_no += '\n' + serial_no;
- me.frm.script_manager.trigger("serial_no", d.doctype, d.name);
- }
- else {
- d.qty += 1;
- me.frm.script_manager.trigger("qty", d.doctype, d.name);
- }
+ if (serial_no)
+ wn.model.set_value(d.doctype, d.name, "serial_no", d.serial_no + '\n' + serial_no);
+ else
+ wn.model.set_value(d.doctype, d.name, "qty", d.qty + 1);
}
});
}
// if item not found then add new item
- if (!caught) {
+ if (!caught)
this.add_new_item_to_grid(item_code, serial_no);
- }
this.refresh();
this.refresh_search_box();
@@ -319,15 +315,16 @@
wn.model.clear_doc(d.doctype, d.name);
me.refresh_grid();
} else {
- d.qty = qty;
- me.frm.script_manager.trigger("qty", d.doctype, d.name);
+ wn.model.set_value(d.doctype, d.name, "qty", qty);
}
}
});
- me.refresh();
+ this.refresh();
},
refresh: function() {
var me = this;
+
+ this.refresh_item_list();
this.party_field.set_input(this.frm.doc[this.party.toLowerCase()]);
this.barcode.set_input("");
@@ -350,6 +347,14 @@
this.make_party();
}
},
+ refresh_item_list: function() {
+ var me = this;
+ // refresh item list on change of price list
+ if (this.frm.doc[this.price_list_field] != this.price_list) {
+ this.price_list = this.frm.doc[this.price_list_field];
+ this.make_item_list();
+ }
+ },
show_items_in_item_cart: function() {
var me = this;
var $items = this.wrapper.find("#cart tbody").empty();
@@ -383,9 +388,8 @@
)).appendTo($items);
});
- this.wrapper.find(".increase-qty, .decrease-qty").on("click", function() {
- var item_code = $(this).closest("tr").attr("id");
- me.selected_item_qty_operation(item_code, $(this).attr("class"));
+ this.wrapper.find("input.qty").on("focus", function() {
+ $(this).select();
});
},
show_taxes: function() {
@@ -422,10 +426,16 @@
// append quantity to the respective item after change from input box
$(this.wrapper).find("input.qty").on("change", function() {
- var item_code = $(this).closest("tr")[0].id;
+ 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"));
+ });
+
// on td click toggle the highlighting of row
$(this.wrapper).find("#cart tbody tr td").on("click", function() {
var row = $(this).closest("tr");
@@ -443,6 +453,15 @@
me.refresh_delete_btn();
this.barcode.$input.focus();
},
+ increase_decrease_qty: function(tr, operation) {
+ var item_code = tr.attr("id");
+ var item_qty = cint(tr.find("input.qty").val());
+
+ if (operation == "increase-qty")
+ this.update_qty(item_code, item_qty + 1);
+ else if (operation == "decrease-qty" && item_qty != 1)
+ this.update_qty(item_code, item_qty - 1);
+ },
disable_text_box_and_button: function() {
var me = this;
// if form is submitted & cancelled then disable all input box & buttons
@@ -514,27 +533,11 @@
this.refresh_grid();
},
refresh_grid: function() {
+ this.frm.dirty();
this.frm.fields_dict[this.frm.cscript.fname].grid.refresh();
this.frm.script_manager.trigger("calculate_taxes_and_totals");
this.refresh();
},
- selected_item_qty_operation: function(item_code, operation) {
- var me = this;
- 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) {
- if (d.item_code == item_code) {
- if (operation == "increase-qty")
- d.qty += 1;
- else if (operation == "decrease-qty")
- d.qty != 1 ? d.qty -= 1 : d.qty = 1;
-
- me.frm.script_manager.trigger("qty", d.doctype, d.name);
- me.refresh();
- }
- });
- },
make_payment: function() {
var me = this;
var no_of_items = $(this.wrapper).find("#cart tbody tr").length;
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index a39702b..1768b9b 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -320,12 +320,9 @@
item = webnotes.conn.sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life > now())"% d.item_code)
acc = webnotes.conn.sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account)
if not acc:
- msgprint("Account: "+d.income_account+" does not exist in the system")
- raise Exception
+ msgprint("Account: "+d.income_account+" does not exist in the system", raise_exception=True)
elif item and item[0][1] == 'Yes' and not acc[0][0] == 'Fixed Asset Account':
- msgprint("Please select income head with account type 'Fixed Asset Account' as Item %s is an asset item" % d.item_code)
- raise Exception
-
+ msgprint("Please select income head with account type 'Fixed Asset Account' as Item %s is an asset item" % d.item_code, raise_exception=True)
def validate_with_previous_doc(self):
super(DocType, self).validate_with_previous_doc(self.tname, {
diff --git a/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt b/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt
index 49c7478..4d3558c 100644
--- a/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt
+++ b/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.txt
@@ -2,7 +2,7 @@
{
"creation": "2013-05-13 16:10:02",
"docstatus": 0,
- "modified": "2013-05-13 16:21:07",
+ "modified": "2014-01-24 18:19:11",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -11,7 +11,7 @@
"doctype": "Report",
"is_standard": "Yes",
"name": "__common__",
- "query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tmr_item.qty as \"Qty:Float:100\",\n\tmr_item.ordered_qty as \"Ordered Qty:Float:100\", \n\t(mr_item.qty - ifnull(mr_item.ordered_qty, 0)) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\n\tand ifnull(mr_item.ordered_qty, 0) < ifnull(mr_item.qty, 0)\norder by mr.transaction_date asc",
+ "query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tsum(ifnull(mr_item.qty, 0)) as \"Qty:Float:100\",\n\tsum(ifnull(mr_item.ordered_qty, 0)) as \"Ordered Qty:Float:100\", \n\t(sum(mr_item.qty) - sum(ifnull(mr_item.ordered_qty, 0))) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\ngroup by mr.name, mr_item.item_code\nhaving\n\tsum(ifnull(mr_item.ordered_qty, 0)) < sum(ifnull(mr_item.qty, 0))\norder by mr.transaction_date asc",
"ref_doctype": "Purchase Order",
"report_name": "Requested Items To Be Ordered",
"report_type": "Query Report"
diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
index 29232f5..90d9dc5 100644
--- a/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -243,10 +243,10 @@
"item_code": [qty_required, description, stock_uom, min_order_qty]
}
"""
- bom_wise_item_details = {}
item_list = []
for bom, so_wise_qty in bom_dict.items():
+ bom_wise_item_details = {}
if self.doc.use_multi_level_bom:
# get all raw materials with sub assembly childs
for d in webnotes.conn.sql("""select fb.item_code,
diff --git a/portal/templates/sale.html b/portal/templates/sale.html
index 5dc72c7..c0996cc 100644
--- a/portal/templates/sale.html
+++ b/portal/templates/sale.html
@@ -10,9 +10,9 @@
<li class="active"><i class="icon-file icon-fixed-width"></i> {{ doc.name }}</li>
</ul>
<h3><i class="icon-file icon-fixed-width"></i> {{ doc.name }}</h3>
- {% if doc.name == "Not Allowed" -%}
+ {% if session_user == "Guest" -%}
<script>ask_to_login();</script>
- {% else %}
+ {% elif doc.name != "Not Allowed"%}
<hr>
<div>
<div class="row">
diff --git a/portal/utils.py b/portal/utils.py
index 89800f3..e210f1a 100644
--- a/portal/utils.py
+++ b/portal/utils.py
@@ -41,21 +41,23 @@
}
def get_transaction_context(doctype, name):
+ context = {"session_user": webnotes.session.user}
+
customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user},
"customer")
bean = webnotes.bean(doctype, name)
if bean.doc.customer != customer:
- return {
- "doc": {"name": "Not Allowed"}
- }
+ context.update({"doc": {"name": "Not Allowed"}})
else:
- return {
+ context.update({
"doc": bean.doc,
"doclist": bean.doclist,
"webnotes": webnotes,
"utils": webnotes.utils
- }
+ })
+
+ return context
@webnotes.whitelist(allow_guest=True)
def send_message(subject="Website Query", message="", sender="", status="Open"):
diff --git a/selling/doctype/sales_order/templates/pages/order.py b/selling/doctype/sales_order/templates/pages/order.py
index d53a8b0..9b4a83c 100644
--- a/selling/doctype/sales_order/templates/pages/order.py
+++ b/selling/doctype/sales_order/templates/pages/order.py
@@ -10,11 +10,12 @@
def get_context():
from portal.utils import get_transaction_context
context = get_transaction_context("Sales Order", webnotes.form_dict.name)
- modify_status(context.get("doc"))
- context.update({
- "parent_link": "orders",
- "parent_title": "My Orders"
- })
+ if context.get("doc").get("name") != "Not Allowed":
+ modify_status(context.get("doc"))
+ context.update({
+ "parent_link": "orders",
+ "parent_title": "My Orders"
+ })
return context
def modify_status(doc):
diff --git a/selling/utils/cart.py b/selling/utils/cart.py
index 3cd7b3c..7904627 100644
--- a/selling/utils/cart.py
+++ b/selling/utils/cart.py
@@ -282,7 +282,7 @@
party = get_lead_or_customer()
if not quotation:
quotation = _get_cart_quotation(party)
-
+
cart_settings = webnotes.get_obj("Shopping Cart Settings")
billing_territory = get_address_territory(quotation.doc.customer_address) or \
@@ -310,7 +310,8 @@
quotation.run_method("set_price_list_and_item_details")
# set it in cookies for using in product page
- webnotes.local._response.set_cookie("selling_price_list", quotation.doc.selling_price_list)
+ if quotation.doc.selling_price_list:
+ webnotes.local._response.set_cookie("selling_price_list", quotation.doc.selling_price_list)
def set_taxes(quotation, cart_settings, billing_territory):
"""set taxes based on billing territory"""
diff --git a/stock/doctype/item/test_item.py b/stock/doctype/item/test_item.py
index b8f6f9e..4754174 100644
--- a/stock/doctype/item/test_item.py
+++ b/stock/doctype/item/test_item.py
@@ -36,6 +36,7 @@
"stock_uom": "_Test UOM",
"default_income_account": "Sales - _TC",
"default_warehouse": "_Test Warehouse - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC"
}, {
"doctype": "Item Reorder",
"parentfield": "item_reorder",
@@ -64,6 +65,7 @@
"stock_uom": "_Test UOM",
"default_income_account": "Sales - _TC",
"default_warehouse": "_Test Warehouse - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC"
}],
[{
"doctype": "Item",
@@ -73,6 +75,7 @@
"item_group": "_Test Item Group Desktops",
"default_warehouse": "_Test Warehouse - _TC",
"default_income_account": "Sales - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC",
"is_stock_item": "Yes",
"is_asset_item": "No",
"has_batch_no": "No",
@@ -99,6 +102,7 @@
"item_group": "_Test Item Group Desktops",
"default_warehouse": "_Test Warehouse - _TC",
"default_income_account": "Sales - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC",
"is_stock_item": "Yes",
"is_asset_item": "No",
"has_batch_no": "No",
@@ -119,6 +123,7 @@
"description": "_Test Sales BOM Item",
"item_group": "_Test Item Group Desktops",
"default_income_account": "Sales - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC",
"is_stock_item": "No",
"is_asset_item": "No",
"has_batch_no": "No",
@@ -140,6 +145,7 @@
"is_stock_item": "Yes",
"default_warehouse": "_Test Warehouse - _TC",
"default_income_account": "Sales - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC",
"is_asset_item": "No",
"has_batch_no": "No",
"has_serial_no": "No",
@@ -216,6 +222,7 @@
"item_group": "_Test Item Group Desktops",
"default_warehouse": "_Test Warehouse - _TC",
"default_income_account": "Sales - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC",
"is_stock_item": "Yes",
"is_asset_item": "No",
"has_batch_no": "No",
@@ -238,6 +245,7 @@
"is_stock_item": "Yes",
"default_warehouse": "_Test Warehouse - _TC",
"default_income_account": "Sales - _TC",
+ "purchase_account": "_Test Account Cost for Goods Sold - _TC",
"is_asset_item": "No",
"has_batch_no": "No",
"has_serial_no": "No",
diff --git a/utilities/demo/demo_docs/Fiscal_Year.csv b/utilities/demo/demo_docs/Fiscal_Year.csv
index d56b1b9..1a06e87 100644
--- a/utilities/demo/demo_docs/Fiscal_Year.csv
+++ b/utilities/demo/demo_docs/Fiscal_Year.csv
@@ -20,4 +20,5 @@
Start entering data below this line,,,,
,,2009,01-01-2009,31-12-2009,No
,,2010,01-01-2010,31-12-2010,No
-,,2011,01-01-2011,31-12-2011,No
\ No newline at end of file
+,,2011,01-01-2011,31-12-2011,No
+,,2012,01-01-2012,31-12-2012,No
\ No newline at end of file
diff --git a/utilities/demo/make_demo.py b/utilities/demo/make_demo.py
index b98fd7a..99c3e8b 100644
--- a/utilities/demo/make_demo.py
+++ b/utilities/demo/make_demo.py
@@ -19,7 +19,7 @@
country = "United States"
currency = "USD"
time_zone = "America/New_York"
-start_date = '2013-01-01'
+start_date = '2014-01-01'
bank_name = "Citibank"
runs_for = None
prob = {
@@ -105,6 +105,10 @@
for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Sales Invoice")]:
si = webnotes.bean(make_sales_invoice(so))
si.doc.posting_date = current_date
+ for d in si.doclist.get({"parentfield": "entries"}):
+ if not d.income_account:
+ d.income_account = "Sales - {}".format(company_abbr)
+
si.insert()
si.submit()
webnotes.conn.commit()
@@ -170,6 +174,9 @@
dn = webnotes.bean(make_delivery_note(so))
dn.doc.posting_date = current_date
dn.doc.fiscal_year = current_date.year
+ for d in dn.doclist.get({"parentfield": "delivery_note_details"}):
+ d.expense_account = "Cost of Goods Sold - {}".format(company_abbr)
+
dn.insert()
try:
dn.submit()
@@ -236,7 +243,7 @@
ppt = webnotes.bean("Production Planning Tool", "Production Planning Tool")
ppt.doc.company = company
ppt.doc.use_multi_level_bom = 1
- ppt.doc.purchase_request_for_warehouse = "Stores - WP"
+ ppt.doc.purchase_request_for_warehouse = "Stores - {}".format(company_abbr)
ppt.run_method("get_open_sales_orders")
ppt.run_method("get_items_from_so")
ppt.run_method("raise_production_order")
@@ -380,8 +387,8 @@
setup_account({
"first_name": "Test",
"last_name": "User",
- "fy_start_date": "2013-01-01",
- "fy_end_date": "2013-12-31",
+ "fy_start_date": "2014-01-01",
+ "fy_end_date": "2014-12-31",
"industry": "Manufacturing",
"company_name": company,
"company_abbr": company_abbr,