Merge pull request #16439 from nabinhait/disable-rounded-total
fix: Disable rounded total field's value honours docfield's default value
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 7348e1f..287da08 100755
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -250,10 +250,12 @@
cond = "1=1"
if pos_profile.get('update_stock') and pos_profile.get('warehouse'):
- cond = "warehouse = '{0}'".format(pos_profile.get('warehouse'))
+ cond = "warehouse = %(warehouse)s"
- serial_nos = frappe.db.sql("""select name, warehouse, item_code from `tabSerial No` where {0}
- and company = %(company)s """.format(cond), {'company': company}, as_dict=1)
+ serial_nos = frappe.db.sql("""select name, warehouse, item_code
+ from `tabSerial No` where {0} and company = %(company)s """.format(cond),{
+ 'company': company, 'warehouse': frappe.db.escape(pos_profile.get('warehouse'))
+ }, as_dict=1)
itemwise_serial_no = {}
for sn in serial_nos:
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index 04c8718..c89035c 100755
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -1135,18 +1135,15 @@
},
apply_category: function() {
- frappe.db.get_value("Item Group", {lft: 1, is_group: 1}, "name", (r) => {
- category = this.selected_item_group || r.name;
-
- if(category == r.name) {
- return this.item_data
- } else {
- return this.item_data.filter(function(element, index, array){
- return element.item_group == category;
- });
- }
- })
-
+ var me = this;
+ category = this.selected_item_group || "All Item Groups";
+ if(category == 'All Item Groups') {
+ return this.item_data
+ } else {
+ return this.item_data.filter(function(element, index, array){
+ return element.item_group == category;
+ });
+ }
},
bind_items_event: function() {
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js
index 7b2f9a4..22d74e8 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.js
+++ b/erpnext/manufacturing/doctype/work_order/work_order.js
@@ -349,7 +349,8 @@
before_submit: function(frm) {
frm.toggle_reqd(["fg_warehouse", "wip_warehouse"], true);
frm.fields_dict.required_items.grid.toggle_reqd("source_warehouse", true);
- frm.toggle_reqd("transfer_material_against", frm.doc.operations);
+ frm.toggle_reqd("transfer_material_against",
+ frm.doc.operations && frm.doc.operations.length > 0);
frm.fields_dict.operations.grid.toggle_reqd("workstation", frm.doc.operations);
},
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 7bf63a2..082f887 100755
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -572,7 +572,7 @@
execute:frappe.delete_doc_if_exists("Page", "purchase-analytics")
execute:frappe.delete_doc_if_exists("Page", "stock-analytics")
execute:frappe.delete_doc_if_exists("Page", "production-analytics")
-erpnext.patches.v11_0.ewaybill_fields_gst_india #2018-11-13
+erpnext.patches.v11_0.ewaybill_fields_gst_india #2018-11-13 #2019-01-09
erpnext.patches.v11_0.drop_column_max_days_allowed
erpnext.patches.v11_0.change_healthcare_desktop_icons
erpnext.patches.v10_0.update_user_image_in_employee
diff --git a/erpnext/public/js/hub/hub_factory.js b/erpnext/public/js/hub/hub_factory.js
index 7d9fefc..2efc826 100644
--- a/erpnext/public/js/hub/hub_factory.js
+++ b/erpnext/public/js/hub/hub_factory.js
@@ -1,6 +1,6 @@
frappe.provide('erpnext.hub');
-frappe.views.marketplaceFactory = class marketplaceFactory extends frappe.views.Factory {
+frappe.views.MarketplaceFactory = class MarketplaceFactory extends frappe.views.Factory {
show() {
is_marketplace_disabled()
.then(disabled => {
diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py
index 7813cc0..ec4da0d 100644
--- a/erpnext/regional/india/setup.py
+++ b/erpnext/regional/india/setup.py
@@ -126,6 +126,9 @@
dict(fieldname='place_of_supply', label='Place of Supply',
fieldtype='Data', insert_after='shipping_address',
print_hide=1, read_only=0),
+ ]
+
+ purchase_invoice_itc_fields = [
dict(fieldname='eligibility_for_itc', label='Eligibility For ITC',
fieldtype='Select', insert_after='reason_for_issuing_document', print_hide=1,
options='input\ninput service\ncapital goods\nineligible', default="ineligible"),
@@ -152,6 +155,9 @@
dict(fieldname='company_gstin', label='Company GSTIN',
fieldtype='Data', insert_after='company_address',
fetch_from='company_address.gstin', print_hide=1),
+ ]
+
+ sales_invoice_shipping_fields = [
dict(fieldname='port_code', label='Port Code',
fieldtype='Data', insert_after='reason_for_issuing_document', print_hide=1,
depends_on="eval:doc.invoice_type=='Export' "),
@@ -214,9 +220,12 @@
dict(fieldname='gst_state_number', label='GST State Number',
fieldtype='Data', insert_after='gst_state', read_only=1),
],
- 'Purchase Invoice': invoice_gst_fields + purchase_invoice_gst_fields,
- 'Sales Invoice': invoice_gst_fields + sales_invoice_gst_fields,
- 'Delivery Note': sales_invoice_gst_fields + ewaybill_fields,
+ 'Purchase Invoice': invoice_gst_fields + purchase_invoice_gst_fields + purchase_invoice_itc_fields,
+ 'Purchase Order': purchase_invoice_gst_fields,
+ 'Purchase Receipt': purchase_invoice_gst_fields,
+ 'Sales Invoice': invoice_gst_fields + sales_invoice_gst_fields + sales_invoice_shipping_fields,
+ 'Delivery Note': sales_invoice_gst_fields + ewaybill_fields + sales_invoice_shipping_fields,
+ 'Sales Order': sales_invoice_gst_fields,
'Sales Taxes and Charges Template': inter_state_gst_field,
'Purchase Taxes and Charges Template': inter_state_gst_field,
'Item': [
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index b1bfeff..bc74142 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -17,6 +17,20 @@
// formatter for material request item
frm.set_indicator_formatter('item_code',
function(doc) { return (doc.stock_qty<=doc.delivered_qty) ? "green" : "orange" })
+
+ frm.set_query('company_address', function(doc) {
+ if(!doc.company) {
+ frappe.throw(__('Please set Company'));
+ }
+
+ return {
+ query: 'frappe.contacts.doctype.address.address.address_query',
+ filters: {
+ link_doctype: 'Company',
+ link_name: doc.company
+ }
+ };
+ })
},
refresh: function(frm) {
if(frm.doc.docstatus == 1 && frm.doc.status == 'To Deliver and Bill') {
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index aa29f3a..b916505 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -754,6 +754,71 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "company_address_display",
+ "fieldtype": "Small Text",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "company_address",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Company Address",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Address",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "col_break46",
"fieldtype": "Column Break",
"hidden": 0,
@@ -1128,6 +1193,7 @@
"label": "Price List Exchange Rate",
"length": 0,
"no_copy": 0,
+ "options": "",
"permlevel": 0,
"precision": "9",
"print_hide": 1,
@@ -4015,7 +4081,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2019-01-07 16:51:50.857438",
+ "modified": "2019-01-09 16:51:47.917329",
"modified_by": "Administrator",
"module": "Selling",
"name": "Sales Order",
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 1568a7a..491ddeb 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -302,6 +302,9 @@
if sn.warehouse:
return True
+ if sn.company != sle.company:
+ return False
+
status = False
if sn.purchase_document_no:
if sle.voucher_type in ['Purchase Receipt', 'Stock Entry', "Purchase Invoice"] and \
@@ -357,6 +360,7 @@
sr.warehouse = args.get('warehouse') if args.get('actual_qty', 0) > 0 else None
sr.batch_no = args.get('batch_no')
sr.location = args.get('location')
+ sr.company = args.get('company')
if sr.sales_order and args.get('voucher_type') == "Stock Entry" \
and not args.get('actual_qty', 0) > 0:
sr.sales_order = None
diff --git a/erpnext/stock/doctype/serial_no/test_serial_no.py b/erpnext/stock/doctype/serial_no/test_serial_no.py
index 89062f9..ed70790 100644
--- a/erpnext/stock/doctype/serial_no/test_serial_no.py
+++ b/erpnext/stock/doctype/serial_no/test_serial_no.py
@@ -7,6 +7,12 @@
from __future__ import unicode_literals
import frappe, unittest
+from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
+from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
+from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
+from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
+
test_dependencies = ["Item"]
test_records = frappe.get_test_records('Serial No')
@@ -29,3 +35,21 @@
sr.warehouse = "_Test Warehouse - _TC"
self.assertTrue(SerialNoCannotCannotChangeError, sr.save)
+
+ def test_inter_company_transfer(self):
+ se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
+ serial_nos = get_serial_nos(se.get("items")[0].serial_no)
+
+ create_delivery_note(item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0])
+
+ wh = create_warehouse("_Test Warehouse", company="_Test Company 1")
+ make_purchase_receipt(item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0],
+ company="_Test Company 1", warehouse=wh)
+
+ serial_no = frappe.db.get_value("Serial No", serial_nos[0], ["warehouse", "company"], as_dict=1)
+
+ self.assertEqual(serial_no.warehouse, wh)
+ self.assertEqual(serial_no.company, "_Test Company 1")
+
+ def tearDown(self):
+ frappe.db.rollback()
\ No newline at end of file
diff --git a/erpnext/stock/doctype/warehouse/test_warehouse.py b/erpnext/stock/doctype/warehouse/test_warehouse.py
index b033f86..dc39e10 100644
--- a/erpnext/stock/doctype/warehouse/test_warehouse.py
+++ b/erpnext/stock/doctype/warehouse/test_warehouse.py
@@ -8,6 +8,7 @@
from frappe.test_runner import make_test_records
from erpnext.accounts.doctype.account.test_account import get_inventory_account, create_account
+import erpnext
import frappe
import unittest
test_records = frappe.get_test_records('Warehouse')
@@ -90,17 +91,24 @@
self.assertTrue(frappe.db.get_value("Warehouse",
filters={"account": "Test Warehouse for Merging 2 - _TC"}))
-def create_warehouse(warehouse_name, properties=None):
- if not frappe.db.exists("Warehouse", warehouse_name + " - _TC"):
+def create_warehouse(warehouse_name, properties=None, company=None):
+ if not company:
+ company = "_Test Company"
+
+ warehouse_id = erpnext.encode_company_abbr(warehouse_name, company)
+ if not frappe.db.exists("Warehouse", warehouse_id):
w = frappe.new_doc("Warehouse")
w.warehouse_name = warehouse_name
w.parent_warehouse = "_Test Warehouse Group - _TC"
- w.company = "_Test Company"
+ w.company = company
make_account_for_warehouse(warehouse_name, w)
- w.account = warehouse_name + " - _TC"
+ w.account = warehouse_id
if properties:
w.update(properties)
w.save()
+ return w.name
+ else:
+ return warehouse_id
def make_account_for_warehouse(warehouse_name, warehouse_obj):
if not frappe.db.exists("Account", warehouse_name + " - _TC"):