diff --git a/accounts/doctype/pos_setting/pos_setting.js b/accounts/doctype/pos_setting/pos_setting.js index 2f8beabe05..62549bb2ce 100755 --- a/accounts/doctype/pos_setting/pos_setting.js +++ b/accounts/doctype/pos_setting/pos_setting.js @@ -60,17 +60,6 @@ cur_frm.fields_dict['cost_center'].get_query = function(doc,cdt,cdn) { } } -//get query select Territory -//================================================================= -cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { - return{ - filters:{ - 'is_group': "No" - } - } -} - - // ------------------ Get Print Heading ------------------------------------ cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) { return{ diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py index 05723ce608..52a4316917 100644 --- a/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -58,6 +58,7 @@ class DocType(BuyingController): self.check_for_acc_head_of_supplier() self.check_for_stopped_status() self.validate_with_previous_doc() + self.validate_uom_is_integer("uom", "qty") if not self.doc.is_opening: self.doc.is_opening = 'No' diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.txt b/accounts/doctype/purchase_invoice/purchase_invoice.txt index 8d65281624..6ed049e86f 100755 --- a/accounts/doctype/purchase_invoice/purchase_invoice.txt +++ b/accounts/doctype/purchase_invoice/purchase_invoice.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-21 16:16:39", "docstatus": 0, - "modified": "2013-07-24 21:44:41", + "modified": "2013-07-25 16:08:44", "modified_by": "Administrator", "owner": "Administrator" }, @@ -69,21 +69,6 @@ "report_hide": 0, "reqd": 1 }, - { - "description": "Supplier (Payable) Account", - "doctype": "DocField", - "fieldname": "credit_to", - "fieldtype": "Link", - "in_filter": 1, - "label": "Credit To", - "oldfieldname": "credit_to", - "oldfieldtype": "Link", - "options": "Account", - "print_hide": 1, - "read_only": 0, - "reqd": 1, - "search_index": 1 - }, { "doctype": "DocField", "fieldname": "supplier", @@ -675,6 +660,21 @@ "print_hide": 1, "read_only": 0 }, + { + "description": "Supplier (Payable) Account", + "doctype": "DocField", + "fieldname": "credit_to", + "fieldtype": "Link", + "in_filter": 1, + "label": "Credit To", + "oldfieldname": "credit_to", + "oldfieldtype": "Link", + "options": "Account", + "print_hide": 1, + "read_only": 0, + "reqd": 1, + "search_index": 1 + }, { "default": "No", "description": "Considered as Opening Balance", diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js index e4de474470..b61cbb0b4a 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -284,14 +284,6 @@ cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) { } } -//Territory -//----------------------------- -cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { - return{ - filters: {'is_group': 'NO'} - } -} - // Income Account in Details Table // -------------------------------- cur_frm.set_query("income_account", "entries", function(doc) { diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index 3859595e33..ceab40ac12 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -60,6 +60,8 @@ class DocType(SellingController): self.so_dn_required() self.validate_proj_cust() self.validate_with_previous_doc() + self.validate_uom_is_integer("stock_uom", "qty") + sales_com_obj = get_obj('Sales Common') sales_com_obj.check_stop_sales_order(self) sales_com_obj.check_active_sales_items(self) diff --git a/accounts/doctype/sales_invoice/sales_invoice.txt b/accounts/doctype/sales_invoice/sales_invoice.txt index 480f9fec35..625d2c9c1c 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.txt +++ b/accounts/doctype/sales_invoice/sales_invoice.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-24 19:29:05", "docstatus": 0, - "modified": "2013-07-24 21:44:15", + "modified": "2013-07-25 16:08:10", "modified_by": "Administrator", "owner": "Administrator" }, @@ -61,21 +61,6 @@ "read_only": 0, "reqd": 1 }, - { - "description": "Customer (Receivable) Account", - "doctype": "DocField", - "fieldname": "debit_to", - "fieldtype": "Link", - "in_filter": 1, - "label": "Debit To", - "oldfieldname": "debit_to", - "oldfieldtype": "Link", - "options": "Account", - "print_hide": 1, - "read_only": 0, - "reqd": 1, - "search_index": 1 - }, { "doctype": "DocField", "fieldname": "customer", @@ -821,6 +806,21 @@ "print_hide": 1, "read_only": 0 }, + { + "description": "Customer (Receivable) Account", + "doctype": "DocField", + "fieldname": "debit_to", + "fieldtype": "Link", + "in_filter": 1, + "label": "Debit To", + "oldfieldname": "debit_to", + "oldfieldtype": "Link", + "options": "Account", + "print_hide": 1, + "read_only": 0, + "reqd": 1, + "search_index": 1 + }, { "description": "Track this Sales Invoice against any Project", "doctype": "DocField", diff --git a/accounts/doctype/sales_invoice_item/sales_invoice_item.txt b/accounts/doctype/sales_invoice_item/sales_invoice_item.txt index 03b9f8b9af..057f166d75 100644 --- a/accounts/doctype/sales_invoice_item/sales_invoice_item.txt +++ b/accounts/doctype/sales_invoice_item/sales_invoice_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-06-04 11:02:19", "docstatus": 0, - "modified": "2013-07-10 14:54:19", + "modified": "2013-07-25 16:32:10", "modified_by": "Administrator", "owner": "Administrator" }, @@ -107,9 +107,10 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_list_view": 0, "label": "UOM", + "options": "UOM", "read_only": 1 }, { diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py index e2d7a45a97..af61c69be1 100644 --- a/buying/doctype/purchase_order/purchase_order.py +++ b/buying/doctype/purchase_order/purchase_order.py @@ -58,6 +58,9 @@ class DocType(BuyingController): pc_obj.get_prevdoc_date(self) self.check_for_stopped_status(pc_obj) + self.validate_uom_is_integer("uom", "qty") + self.validate_uom_is_integer("stock_uom", ["qty", "required_qty"]) + self.validate_with_previous_doc() self.validate_for_subcontracting() self.update_raw_materials_supplied("po_raw_material_details") diff --git a/buying/doctype/purchase_order_item/purchase_order_item.txt b/buying/doctype/purchase_order_item/purchase_order_item.txt index c7233d0ecd..85abcb982e 100755 --- a/buying/doctype/purchase_order_item/purchase_order_item.txt +++ b/buying/doctype/purchase_order_item/purchase_order_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-24 19:29:06", "docstatus": 0, - "modified": "2013-07-10 14:54:14", + "modified": "2013-07-25 16:32:51", "modified_by": "Administrator", "owner": "Administrator" }, @@ -265,12 +265,13 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "hidden": 0, "in_list_view": 0, "label": "Stock UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "print_hide": 1, "print_width": "100px", "read_only": 1, diff --git a/buying/doctype/purchase_order_item_supplied/purchase_order_item_supplied.txt b/buying/doctype/purchase_order_item_supplied/purchase_order_item_supplied.txt index 1d91aa323d..05ea4e2863 100644 --- a/buying/doctype/purchase_order_item_supplied/purchase_order_item_supplied.txt +++ b/buying/doctype/purchase_order_item_supplied/purchase_order_item_supplied.txt @@ -2,7 +2,7 @@ { "creation": "2013-02-22 01:27:42", "docstatus": 0, - "modified": "2013-07-10 14:54:15", + "modified": "2013-07-25 16:33:05", "modified_by": "Administrator", "owner": "dhanalekshmi@webnotestech.com" }, @@ -111,10 +111,11 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "label": "Stock Uom", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "read_only": 1 } ] \ No newline at end of file diff --git a/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.txt b/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.txt index 0ee20a5776..15225103cd 100644 --- a/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.txt +++ b/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.txt @@ -2,7 +2,7 @@ { "creation": "2013-02-22 01:27:42", "docstatus": 0, - "modified": "2013-07-10 14:54:17", + "modified": "2013-07-25 16:34:11", "modified_by": "Administrator", "owner": "wasim@webnotestech.com" }, @@ -130,10 +130,11 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "label": "Stock Uom", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "read_only": 1 }, { diff --git a/buying/doctype/supplier_quotation/supplier_quotation.py b/buying/doctype/supplier_quotation/supplier_quotation.py index ae3fbd3dd9..61b8411beb 100644 --- a/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/buying/doctype/supplier_quotation/supplier_quotation.py @@ -36,6 +36,7 @@ class DocType(BuyingController): self.validate_common() self.validate_with_previous_doc() + self.validate_uom_is_integer("uom", "qty") def on_submit(self): purchase_controller = webnotes.get_obj("Purchase Common") diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py index abefb9bc3d..4e850ff8e0 100644 --- a/controllers/accounts_controller.py +++ b/controllers/accounts_controller.py @@ -20,7 +20,7 @@ from webnotes import _, msgprint from webnotes.utils import flt, cint, today, cstr from setup.utils import get_company_currency, get_price_list_currency from accounts.utils import get_fiscal_year, validate_fiscal_year -from utilities.transaction_base import TransactionBase, validate_conversion_rate +from utilities.transaction_base import TransactionBase, validate_conversion_rate, validate_uom_is_integer import json class AccountsController(TransactionBase): @@ -28,7 +28,6 @@ class AccountsController(TransactionBase): self.set_missing_values(for_validate=True) self.validate_date_with_fiscal_year() - if self.meta.get_field("currency"): self.calculate_taxes_and_totals() self.validate_value("grand_total", ">=", 0) diff --git a/controllers/selling_controller.py b/controllers/selling_controller.py index 2cd1be2067..60cb43c6c1 100644 --- a/controllers/selling_controller.py +++ b/controllers/selling_controller.py @@ -210,7 +210,7 @@ class SellingController(StockController): item.export_amount = flt(item.export_rate * item.qty, self.precision("export_amount", item)) - + self._set_in_company_currency(item, "ref_rate", "base_ref_rate") self._set_in_company_currency(item, "export_rate", "basic_rate") self._set_in_company_currency(item, "export_amount", "amount") diff --git a/hr/doctype/expense_claim/expense_claim.js b/hr/doctype/expense_claim/expense_claim.js index 406b57a1e7..ce3cbea621 100644 --- a/hr/doctype/expense_claim/expense_claim.js +++ b/hr/doctype/expense_claim/expense_claim.js @@ -14,10 +14,46 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +wn.provide("erpnext.hr"); + +erpnext.hr.ExpenseClaimController = wn.ui.form.Controller.extend({ + make_bank_voucher: function() { + var me = this; + wn.call({ + method: "accounts.doctype.journal_voucher.journal_voucher.get_default_bank_cash_account", + args: { + "company": cur_frm.doc.company, + "voucher_type": "Bank Voucher" + }, + callback: function(r) { + var jv = wn.model.make_new_doc_and_get_name('Journal Voucher'); + jv = locals['Journal Voucher'][jv]; + jv.voucher_type = 'Bank Voucher'; + jv.company = cur_frm.doc.company; + jv.remark = 'Payment against Expense Claim: ' + cur_frm.doc.name; + jv.fiscal_year = cur_frm.doc.fiscal_year; + + var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries'); + d1.debit = cur_frm.doc.total_sanctioned_amount; + + // credit to bank + var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries'); + d1.account = r.message[0].account; + d1.credit = cur_frm.doc.total_sanctioned_amount; + d1.balance = r.message[0].balance; + + loaddoc('Journal Voucher', jv.name); + } + }); + } +}) + +$.extend(cur_frm.cscript, new erpnext.hr.ExpenseClaimController({frm: cur_frm})); + cur_frm.add_fetch('employee', 'company', 'company'); cur_frm.add_fetch('employee','employee_name','employee_name'); -cur_frm.cscript.onload = function(doc,cdt,cdn){ +cur_frm.cscript.onload = function(doc,cdt,cdn) { if(!doc.approval_status) cur_frm.set_value("approval_status", "Draft") @@ -71,15 +107,15 @@ cur_frm.cscript.refresh = function(doc,cdt,cdn){ } else { if(doc.approval_status=="Approved") { cur_frm.set_intro("Expense Claim has been approved."); + if(doc.docstatus==0) cur_frm.savesubmit(); + if(doc.docstatus==1) cur_frm.add_custom_button("Make Bank Voucher", + cur_frm.cscript.make_bank_voucher); } else if(doc.approval_status=="Rejected") { cur_frm.set_intro("Expense Claim has been rejected."); } } } - - if(doc.approval_status=="Approved" && doc.docstatus==0) { - cur_frm.savesubmit() - }} +} cur_frm.cscript.validate = function(doc) { cur_frm.cscript.calculate_total(doc); diff --git a/manufacturing/doctype/bom/bom.py b/manufacturing/doctype/bom/bom.py index 7dba6ea281..b4091b9376 100644 --- a/manufacturing/doctype/bom/bom.py +++ b/manufacturing/doctype/bom/bom.py @@ -43,6 +43,10 @@ class DocType: def validate(self): self.clear_operations() self.validate_main_item() + + from utilities.transaction_base import validate_uom_is_integer + validate_uom_is_integer(self.doclist, "stock_uom", "qty") + self.validate_operations() self.validate_materials() self.set_bom_material_details() diff --git a/manufacturing/doctype/bom/test_bom.py b/manufacturing/doctype/bom/test_bom.py index cb91e78cc5..bc99b89059 100644 --- a/manufacturing/doctype/bom/test_bom.py +++ b/manufacturing/doctype/bom/test_bom.py @@ -36,7 +36,7 @@ test_records = [ "qty": 1.0, "rate": 5000.0, "amount": 5000.0, - "stock_uom": "No." + "stock_uom": "_Test UOM" }, { "doctype": "BOM Item", @@ -45,7 +45,7 @@ test_records = [ "qty": 2.0, "rate": 1000.0, "amount": 2000.0, - "stock_uom": "No." + "stock_uom": "_Test UOM" } ] ] \ No newline at end of file diff --git a/manufacturing/doctype/bom_item/bom_item.txt b/manufacturing/doctype/bom_item/bom_item.txt index a41ab65cb3..e498c71270 100644 --- a/manufacturing/doctype/bom_item/bom_item.txt +++ b/manufacturing/doctype/bom_item/bom_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-02-22 01:27:49", "docstatus": 0, - "modified": "2013-07-22 15:28:20", + "modified": "2013-07-25 16:34:42", "modified_by": "Administrator", "owner": "Administrator" }, @@ -75,11 +75,12 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_list_view": 0, "label": "Stock UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "read_only": 1, "reqd": 1 }, diff --git a/manufacturing/doctype/production_order/production_order.py b/manufacturing/doctype/production_order/production_order.py index 95a82720cd..625e567c7f 100644 --- a/manufacturing/doctype/production_order/production_order.py +++ b/manufacturing/doctype/production_order/production_order.py @@ -23,8 +23,6 @@ from webnotes import msgprint sql = webnotes.conn.sql - - class DocType: def __init__(self, doc, doclist=[]): self.doc = doc @@ -57,7 +55,10 @@ class DocType: msgprint("Sales Order: %s is not valid" % self.doc.sales_order, raise_exception=1) self.validate_production_order_against_so() - + + from utilities.transaction_base import validate_uom_is_integer + validate_uom_is_integer(self.doclist, "stock_uom", ["qty", "produced_qty"]) + def validate_production_order_against_so(self): # already ordered qty diff --git a/manufacturing/doctype/production_order/production_order.txt b/manufacturing/doctype/production_order/production_order.txt index 6e5e379a11..c546692a2f 100644 --- a/manufacturing/doctype/production_order/production_order.txt +++ b/manufacturing/doctype/production_order/production_order.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:16", "docstatus": 0, - "modified": "2013-07-11 15:51:37", + "modified": "2013-07-25 16:38:37", "modified_by": "Administrator", "owner": "Administrator" }, @@ -35,6 +35,7 @@ "permlevel": 0, "read": 1, "report": 1, + "role": "Manufacturing User", "submit": 1, "write": 1 }, @@ -219,10 +220,11 @@ "depends_on": "production_item", "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "label": "Stock UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "read_only": 1 }, { @@ -247,15 +249,6 @@ "read_only": 1 }, { - "doctype": "DocPerm", - "role": "System Manager" - }, - { - "doctype": "DocPerm", - "role": "Manufacturing Manager" - }, - { - "doctype": "DocPerm", - "role": "Manufacturing User" + "doctype": "DocPerm" } ] \ No newline at end of file diff --git a/manufacturing/doctype/production_plan_item/production_plan_item.txt b/manufacturing/doctype/production_plan_item/production_plan_item.txt index 37f56c90a5..c4a5c23436 100644 --- a/manufacturing/doctype/production_plan_item/production_plan_item.txt +++ b/manufacturing/doctype/production_plan_item/production_plan_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-02-22 01:27:49", "docstatus": 0, - "modified": "2013-07-10 14:54:12", + "modified": "2013-07-25 16:35:27", "modified_by": "Administrator", "owner": "Administrator" }, @@ -92,11 +92,12 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_list_view": 0, "label": "UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "print_width": "80px", "read_only": 1, "reqd": 1, diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/manufacturing/doctype/production_planning_tool/production_planning_tool.py index 26644ad787..966fc53f3c 100644 --- a/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -185,6 +185,9 @@ class DocType: self.validate_company() self.validate_data() + from utilities.transaction_base import validate_uom_is_integer + validate_uom_is_integer(self.doclist, "stock_uom", "planned_qty") + items = self.get_distinct_items_and_boms()[1] pro = self.create_production_order(items) if pro: diff --git a/selling/doctype/installation_note/installation_note.js b/selling/doctype/installation_note/installation_note.js index 3f02c834f3..dce0a31252 100644 --- a/selling/doctype/installation_note/installation_note.js +++ b/selling/doctype/installation_note/installation_note.js @@ -48,12 +48,6 @@ erpnext.selling.InstallationNote = wn.ui.form.Controller.extend({ } }); - this.frm.set_query("territory", function() { - return { - filters: {'is_group': "No" } - } - }); - this.frm.set_query("customer", function() { return { query: "controllers.queries.customer_query" diff --git a/selling/doctype/opportunity/opportunity.py b/selling/doctype/opportunity/opportunity.py index f31d53316f..e48fff9f90 100644 --- a/selling/doctype/opportunity/opportunity.py +++ b/selling/doctype/opportunity/opportunity.py @@ -24,6 +24,7 @@ from webnotes import msgprint sql = webnotes.conn.sql from utilities.transaction_base import TransactionBase + class DocType(TransactionBase): def __init__(self,doc,doclist): self.doc = doc @@ -138,6 +139,7 @@ class DocType(TransactionBase): def validate(self): self.set_last_contact_date() self.validate_item_details() + self.validate_uom_is_integer("uom", "qty") self.validate_lead_cust() from accounts.utils import validate_fiscal_year diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py index 1b286d111b..abb1a1c24e 100644 --- a/selling/doctype/quotation/quotation.py +++ b/selling/doctype/quotation/quotation.py @@ -135,6 +135,9 @@ class DocType(SellingController): self.set_last_contact_date() self.validate_order_type() self.validate_for_items() + + self.validate_uom_is_integer("stock_uom", "qty") + sales_com_obj = get_obj('Sales Common') sales_com_obj.check_active_sales_items(self) sales_com_obj.validate_max_discount(self,'quotation_details') diff --git a/selling/doctype/quotation_item/quotation_item.txt b/selling/doctype/quotation_item/quotation_item.txt index 32b8421806..32a97c8582 100644 --- a/selling/doctype/quotation_item/quotation_item.txt +++ b/selling/doctype/quotation_item/quotation_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-03-07 11:42:57", "docstatus": 0, - "modified": "2013-07-10 14:54:18", + "modified": "2013-07-25 16:35:50", "modified_by": "Administrator", "owner": "Administrator" }, @@ -110,11 +110,12 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_list_view": 0, "label": "UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "print_hide": 0, "print_width": "100px", "read_only": 1, diff --git a/selling/doctype/sales_bom/sales_bom.py b/selling/doctype/sales_bom/sales_bom.py index 13f68aa78c..43ab040dc4 100644 --- a/selling/doctype/sales_bom/sales_bom.py +++ b/selling/doctype/sales_bom/sales_bom.py @@ -31,6 +31,9 @@ class DocType: self.check_duplicate() self.validate_main_item() + from utilities.transaction_base import validate_uom_is_integer + validate_uom_is_integer(self.doclist, "uom", "qty") + def validate_main_item(self): """main item must have Is Stock Item as No and Is Sales Item as Yes""" if not webnotes.conn.sql("""select name from tabItem where name=%s and diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js index 7eeb22d23e..88442ea974 100644 --- a/selling/doctype/sales_order/sales_order.js +++ b/selling/doctype/sales_order/sales_order.js @@ -197,12 +197,6 @@ cur_frm.cscript['Unstop Sales Order'] = function() { } } -cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { - return{ - filters:{ 'is_group': "No"} - } -} - cur_frm.cscript.on_submit = function(doc, cdt, cdn) { if(cint(wn.boot.notification_settings.sales_order)) { cur_frm.email_doc(wn.boot.notification_settings.sales_order_message); diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index fb04714a07..55abf9dbfa 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -139,6 +139,7 @@ class DocType(SellingController): self.validate_mandatory() self.validate_proj_cust() self.validate_po() + self.validate_uom_is_integer("stock_uom", "qty") if self.doc.docstatus == 1: self.validate_for_items() diff --git a/selling/doctype/sales_order_item/sales_order_item.txt b/selling/doctype/sales_order_item/sales_order_item.txt index 84e44b0e2b..3211b2e2fb 100644 --- a/selling/doctype/sales_order_item/sales_order_item.txt +++ b/selling/doctype/sales_order_item/sales_order_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-03-07 11:42:58", "docstatus": 0, - "modified": "2013-07-10 14:54:21", + "modified": "2013-07-25 16:36:10", "modified_by": "Administrator", "owner": "Administrator" }, @@ -104,12 +104,13 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "hidden": 0, "in_list_view": 0, "label": "UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "print_width": "70px", "read_only": 1, "reqd": 0, diff --git a/setup/doctype/uom/uom.txt b/setup/doctype/uom/uom.txt index 0837558415..6577f6c005 100644 --- a/setup/doctype/uom/uom.txt +++ b/setup/doctype/uom/uom.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:24", "docstatus": 0, - "modified": "2013-07-23 12:03:54", + "modified": "2013-07-25 16:18:17", "modified_by": "Administrator", "owner": "Administrator" }, @@ -23,6 +23,7 @@ "permlevel": 0 }, { + "amend": 0, "doctype": "DocPerm", "name": "__common__", "parent": "UOM", @@ -30,7 +31,8 @@ "parenttype": "DocType", "permlevel": 0, "read": 1, - "report": 1 + "report": 1, + "submit": 0 }, { "doctype": "DocType", @@ -62,34 +64,31 @@ "reqd": 1 }, { - "amend": 0, + "description": "Check this to disallow fractions. (for Nos)", + "doctype": "DocField", + "fieldname": "must_be_whole_number", + "fieldtype": "Check", + "label": "Must be Whole Number" + }, + { "cancel": 1, "create": 1, "doctype": "DocPerm", "role": "Material Master Manager", - "submit": 0, "write": 1 }, { - "amend": 0, "cancel": 0, "create": 0, "doctype": "DocPerm", "role": "Material Manager", - "submit": 0, "write": 0 }, { - "amend": 0, "cancel": 0, "create": 0, "doctype": "DocPerm", "role": "Material User", - "submit": 0, "write": 0 - }, - { - "doctype": "DocPerm", - "role": "All" } ] \ No newline at end of file diff --git a/startup/install.py b/startup/install.py index 896a6cdc72..9408c6177c 100644 --- a/startup/install.py +++ b/startup/install.py @@ -151,13 +151,13 @@ def import_defaults(): {'doctype': 'Sales Person', 'sales_person_name': 'Sales Team', 'is_group': "Yes", "parent_sales_person": ""}, # UOM - {'uom_name': 'Unit', 'doctype': 'UOM', 'name': 'Unit'}, - {'uom_name': 'Box', 'doctype': 'UOM', 'name': 'Box'}, + {'uom_name': 'Unit', 'doctype': 'UOM', 'name': 'Unit', "must_be_whole_number": 1}, + {'uom_name': 'Box', 'doctype': 'UOM', 'name': 'Box', "must_be_whole_number": 1}, {'uom_name': 'Kg', 'doctype': 'UOM', 'name': 'Kg'}, - {'uom_name': 'Nos', 'doctype': 'UOM', 'name': 'Nos'}, - {'uom_name': 'Pair', 'doctype': 'UOM', 'name': 'Pair'}, - {'uom_name': 'Set', 'doctype': 'UOM', 'name': 'Set'}, - {'uom_name': 'Hour', 'doctype': 'UOM', 'name': 'Hour'}, + {'uom_name': 'Nos', 'doctype': 'UOM', 'name': 'Nos', "must_be_whole_number": 1}, + {'uom_name': 'Pair', 'doctype': 'UOM', 'name': 'Pair', "must_be_whole_number": 1}, + {'uom_name': 'Set', 'doctype': 'UOM', 'name': 'Set', "must_be_whole_number": 1}, + {'uom_name': 'Hour', 'doctype': 'UOM', 'name': 'Hour'}, {'uom_name': 'Minute', 'doctype': 'UOM', 'name': 'Minute'}, ] diff --git a/stock/doctype/bin/bin.txt b/stock/doctype/bin/bin.txt index 676976aeb4..1455fa68a7 100644 --- a/stock/doctype/bin/bin.txt +++ b/stock/doctype/bin/bin.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:25", "docstatus": 0, - "modified": "2013-07-10 18:32:13", + "modified": "2013-07-25 16:36:35", "modified_by": "Administrator", "owner": "Administrator" }, @@ -146,11 +146,12 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_filter": 1, "label": "UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "search_index": 0 }, { diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js index a006766179..de6e9dcc87 100644 --- a/stock/doctype/delivery_note/delivery_note.js +++ b/stock/doctype/delivery_note/delivery_note.js @@ -129,14 +129,6 @@ cur_frm.cscript['Make Packing Slip'] = function() { loaddoc('Packing Slip', n); } - -//get query select Territory -cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { - return{ - filters: { 'is_group': "No" } - } -} - var set_print_hide= function(doc, cdt, cdn){ var dn_fields = wn.meta.docfield_map['Delivery Note']; var dn_item_fields = wn.meta.docfield_map['Delivery Note Item']; diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index 8cd57563eb..f7283eb862 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -99,6 +99,7 @@ class DocType(SellingController): sales_com_obj.get_prevdoc_date(self) self.validate_for_items() self.validate_warehouse() + self.validate_uom_is_integer("stock_uom", "qty") sales_com_obj.validate_max_discount(self, 'delivery_note_details') sales_com_obj.check_conversion_rate(self) diff --git a/stock/doctype/delivery_note/test_delivery_note.py b/stock/doctype/delivery_note/test_delivery_note.py index f4b9bbb276..eac140d7d3 100644 --- a/stock/doctype/delivery_note/test_delivery_note.py +++ b/stock/doctype/delivery_note/test_delivery_note.py @@ -141,7 +141,7 @@ test_records = [ "export_rate": 100.0, "amount": 500.0, "warehouse": "_Test Warehouse - _TC", - "stock_uom": "No." + "stock_uom": "_Test UOM" } ] diff --git a/stock/doctype/delivery_note_item/delivery_note_item.txt b/stock/doctype/delivery_note_item/delivery_note_item.txt index 346673f46e..8f133d2df2 100644 --- a/stock/doctype/delivery_note_item/delivery_note_item.txt +++ b/stock/doctype/delivery_note_item/delivery_note_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-04-22 13:15:44", "docstatus": 0, - "modified": "2013-07-10 14:54:07", + "modified": "2013-07-25 16:37:09", "modified_by": "Administrator", "owner": "Administrator" }, @@ -111,11 +111,12 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_list_view": 0, "label": "UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "print_hide": 0, "print_width": "50px", "read_only": 1, diff --git a/stock/doctype/material_request/material_request.py b/stock/doctype/material_request/material_request.py index 0830fd451d..86de99e5c6 100644 --- a/stock/doctype/material_request/material_request.py +++ b/stock/doctype/material_request/material_request.py @@ -60,6 +60,7 @@ class DocType(BuyingController): super(DocType, self).validate() self.validate_schedule_date() + self.validate_uom_is_integer("uom", "qty") if not self.doc.status: self.doc.status = "Draft" diff --git a/stock/doctype/packing_slip/packing_slip.py b/stock/doctype/packing_slip/packing_slip.py index 63aa6a9431..9a0da823db 100644 --- a/stock/doctype/packing_slip/packing_slip.py +++ b/stock/doctype/packing_slip/packing_slip.py @@ -37,6 +37,10 @@ class DocType: self.validate_case_nos() self.validate_qty() + from utilities.transaction_base import validate_uom_is_integer + validate_uom_is_integer(self.doclist, "stock_uom", "qty") + validate_uom_is_integer(self.doclist, "weight_uom", "net_weight") + def validate_delivery_note(self): """ Validates if delivery note has status as draft diff --git a/stock/doctype/packing_slip_item/packing_slip_item.txt b/stock/doctype/packing_slip_item/packing_slip_item.txt index 8dea8779ac..41dd044c7c 100644 --- a/stock/doctype/packing_slip_item/packing_slip_item.txt +++ b/stock/doctype/packing_slip_item/packing_slip_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-04-08 13:10:16", "docstatus": 0, - "modified": "2013-07-10 14:54:11", + "modified": "2013-07-25 16:37:30", "modified_by": "Administrator", "owner": "Administrator" }, @@ -61,9 +61,10 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_list_view": 0, "label": "UOM", + "options": "UOM", "print_width": "100px", "read_only": 1, "width": "100px" diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py index 89a40e706c..744130a71b 100644 --- a/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/stock/doctype/purchase_receipt/purchase_receipt.py @@ -120,7 +120,10 @@ class DocType(BuyingController): self.validate_with_previous_doc() self.validate_accepted_rejected_qty() - self.validate_inspection() # Validate Inspection + self.validate_inspection() + self.validate_uom_is_integer("uom", ["qty", "received_qty"]) + self.validate_uom_is_integer("stock_uom", "stock_qty") + get_obj('Stock Ledger').validate_serial_no(self, 'purchase_receipt_details') self.validate_challan_no() diff --git a/stock/doctype/purchase_receipt_item/purchase_receipt_item.txt b/stock/doctype/purchase_receipt_item/purchase_receipt_item.txt index 60b1b567ac..913cdf5bf2 100755 --- a/stock/doctype/purchase_receipt_item/purchase_receipt_item.txt +++ b/stock/doctype/purchase_receipt_item/purchase_receipt_item.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-24 19:29:10", "docstatus": 0, - "modified": "2013-07-10 14:54:16", + "modified": "2013-07-25 16:30:24", "modified_by": "Administrator", "owner": "Administrator" }, @@ -267,11 +267,12 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "in_list_view": 0, "label": "Stock UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "print_hide": 1, "print_width": "100px", "read_only": 1, diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py index d38962005e..58f17c7401 100644 --- a/stock/doctype/stock_entry/stock_entry.py +++ b/stock/doctype/stock_entry/stock_entry.py @@ -49,6 +49,9 @@ class DocType(StockController): get_obj('Production Order', self.doc.production_order) or None self.validate_item() + self.validate_uom_is_integer("uom", "qty") + self.validate_uom_is_integer("stock_uom", "transfer_qty") + self.validate_warehouse(pro_obj) self.validate_production_order(pro_obj) self.get_stock_and_rate() diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt b/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt index 6ca9cc629e..5b65e973d4 100644 --- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt +++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-29 19:25:42", "docstatus": 0, - "modified": "2013-07-10 18:34:09", + "modified": "2013-07-25 16:39:10", "modified_by": "Administrator", "owner": "Administrator" }, @@ -181,10 +181,11 @@ { "doctype": "DocField", "fieldname": "stock_uom", - "fieldtype": "Data", + "fieldtype": "Link", "label": "Stock UOM", "oldfieldname": "stock_uom", "oldfieldtype": "Data", + "options": "UOM", "print_width": "150px", "read_only": 1, "width": "150px" diff --git a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py index f353629bae..7e5d972afd 100644 --- a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py +++ b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py @@ -17,15 +17,13 @@ from __future__ import unicode_literals import webnotes -from webnotes.utils import cstr, flt, now +from webnotes.utils import cstr, flt, now, cint from webnotes.model import db_exists from webnotes.model.bean import copy_doclist from webnotes.model.code import get_obj from webnotes import msgprint sql = webnotes.conn.sql - - class DocType: def __init__(self, d, dl=[]): @@ -97,7 +95,8 @@ class DocType: def update_stock_uom(self): # validate mandatory self.validate_mandatory() - + self.validate_uom_integer_type() + # update item master self.update_item_master() @@ -108,6 +107,19 @@ class DocType: self.update_bin() get_obj("Item", self.doc.item_code).on_update() + + def validate_uom_integer_type(self): + current_is_integer = webnotes.conn.get_value("UOM", self.doc.current_stock_uom, "must_be_whole_number") + new_is_integer = webnotes.conn.get_value("UOM", self.doc.new_stock_uom, "must_be_whole_number") + + if current_is_integer and not new_is_integer: + webnotes.msgprint("New UOM must be of type Whole Number", raise_exception=True) + + if not current_is_integer and new_is_integer: + webnotes.msgprint("New UOM must NOT be of type Whole Number", raise_exception=True) + + if current_is_integer and new_is_integer and cint(self.doc.conversion_factor)!=self.doc.conversion_factor: + webnotes.msgprint("Conversion Factor cannot be fraction", raise_exception=True) @webnotes.whitelist() def get_stock_uom(item_code): diff --git a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.txt b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.txt index d820b01649..6862a86ef5 100644 --- a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.txt +++ b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:30", "docstatus": 0, - "modified": "2013-07-05 14:56:45", + "modified": "2013-07-25 17:39:14", "modified_by": "Administrator", "owner": "Administrator" }, @@ -62,6 +62,12 @@ "label": "New Stock UOM", "options": "UOM" }, + { + "doctype": "DocField", + "fieldname": "conversion_factor", + "fieldtype": "Float", + "label": "Conversion Factor" + }, { "doctype": "DocField", "fieldname": "update", @@ -69,12 +75,6 @@ "label": "Update", "options": "update_stock_uom" }, - { - "doctype": "DocField", - "fieldname": "conversion_factor", - "fieldtype": "Float", - "label": "Conversion Factor" - }, { "doctype": "DocPerm", "role": "Material Master Manager" diff --git a/support/doctype/customer_issue/customer_issue.js b/support/doctype/customer_issue/customer_issue.js index 226849363a..96662b95c7 100644 --- a/support/doctype/customer_issue/customer_issue.js +++ b/support/doctype/customer_issue/customer_issue.js @@ -117,11 +117,6 @@ cur_frm.fields_dict['item_code'].get_query = function(doc, cdt, cdn) { cur_frm.add_fetch('item_code', 'item_name', 'item_name'); cur_frm.add_fetch('item_code', 'description', 'description'); -cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { - return{ - filters:{ 'is_group': "No"} - } -} cur_frm.fields_dict.customer.get_query = function(doc,cdt,cdn) { return{ query:"controllers.queries.customer_query" } } diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.js b/support/doctype/maintenance_schedule/maintenance_schedule.js index fab9b2a625..d84726986a 100644 --- a/support/doctype/maintenance_schedule/maintenance_schedule.js +++ b/support/doctype/maintenance_schedule/maintenance_schedule.js @@ -123,11 +123,5 @@ cur_frm.cscript.generate_schedule = function(doc, cdt, cdn) { } } -cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { - return{ - filters:{ 'is_group': "No"} - } -} - cur_frm.fields_dict.customer.get_query = function(doc,cdt,cdn) { return{ query:"controllers.queries.customer_query" } } diff --git a/support/doctype/maintenance_visit/maintenance_visit.js b/support/doctype/maintenance_visit/maintenance_visit.js index 0b0d0109bd..f3faf3f292 100644 --- a/support/doctype/maintenance_visit/maintenance_visit.js +++ b/support/doctype/maintenance_visit/maintenance_visit.js @@ -118,14 +118,6 @@ cur_frm.cscript.item_code = function(doc, cdt, cdn) { } } -//get query select Territory -cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { - return{ - filters:{ - 'is_group': "No" - } - } -} cur_frm.fields_dict.customer.get_query = function(doc,cdt,cdn) { return {query: "controllers.queries.customer_query" } diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py index 14c23b8588..4acfdf4e59 100644 --- a/utilities/transaction_base.py +++ b/utilities/transaction_base.py @@ -17,7 +17,7 @@ from __future__ import unicode_literals import webnotes from webnotes import msgprint, _ -from webnotes.utils import load_json, cstr, flt, now_datetime +from webnotes.utils import load_json, cstr, flt, now_datetime, cint from webnotes.model.doc import addchild from controllers.status_updater import StatusUpdater @@ -292,6 +292,9 @@ class TransactionBase(StatusUpdater): webnotes.bean(event_doclist).insert() + def validate_uom_is_integer(self, uom_field, qty_fields): + validate_uom_is_integer(self.doclist, uom_field, qty_fields) + def validate_with_previous_doc(self, source_dt, ref): for key, val in ref.items(): is_child = val.get("is_child_table") @@ -498,3 +501,23 @@ def validate_currency(args, item, meta=None): def delete_events(ref_type, ref_name): webnotes.delete_doc("Event", webnotes.conn.sql_list("""select name from `tabEvent` where ref_type=%s and ref_name=%s""", (ref_type, ref_name)), for_reload=True) + +def validate_uom_is_integer(doclist, uom_field, qty_fields): + if isinstance(qty_fields, basestring): + qty_fields = [qty_fields] + + integer_uoms = filter(lambda uom: webnotes.conn.get_value("UOM", uom, + "must_be_whole_number") or None, doclist.get_distinct_values(uom_field)) + + if not integer_uoms: + return + + for d in doclist: + if d.fields.get(uom_field) in integer_uoms: + for f in qty_fields: + if d.fields.get(f): + if cint(d.fields[f])!=d.fields[f]: + webnotes.msgprint(_("For UOM") + " '" + d.fields[uom_field] \ + + "': " + _("Quantity cannot be a fraction.") \ + + " " + _("In Row") + ": " + str(d.idx), + raise_exception=True)