Merge pull request #22634 from Anurag810/retention-bonus-fixes
fix: default overwrite property and 'company' is not defined
diff --git a/erpnext/accounts/doctype/item_tax_template/item_tax_template.js b/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
index 42abdb8..e921a0d 100644
--- a/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
+++ b/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
@@ -6,6 +6,18 @@
frm.set_query("tax_type", "taxes", function(doc) {
return {
filters: [
+ ['Account', 'company', '=', frm.doc.company],
+ ['Account', 'is_group', '=', 0],
+ ['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Income Account', 'Expense Account', 'Expenses Included In Valuation']]
+ ]
+ }
+ });
+ },
+ company: function (frm) {
+ frm.set_query("tax_type", "taxes", function(doc) {
+ return {
+ filters: [
+ ['Account', 'company', '=', frm.doc.company],
['Account', 'is_group', '=', 0],
['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Income Account', 'Expense Account', 'Expenses Included In Valuation']]
]
diff --git a/erpnext/accounts/doctype/item_tax_template/item_tax_template.json b/erpnext/accounts/doctype/item_tax_template/item_tax_template.json
index f713cfc..856c371 100644
--- a/erpnext/accounts/doctype/item_tax_template/item_tax_template.json
+++ b/erpnext/accounts/doctype/item_tax_template/item_tax_template.json
@@ -1,168 +1,85 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:title",
- "beta": 0,
- "creation": "2018-11-22 22:45:00.370913",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Setup",
- "editable_grid": 1,
- "engine": "InnoDB",
+ "allow_import": 1,
+ "allow_rename": 1,
+ "autoname": "field:title",
+ "creation": "2018-11-22 22:45:00.370913",
+ "doctype": "DocType",
+ "document_type": "Setup",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "title",
+ "company",
+ "taxes"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "title",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 1,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Title",
- "length": 0,
- "no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
+ "fieldname": "title",
+ "fieldtype": "Data",
+ "in_filter": 1,
+ "in_list_view": 1,
+ "label": "Title",
+ "no_copy": 1,
+ "reqd": 1,
"unique": 1
- },
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "taxes",
- "fieldtype": "Table",
- "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": "Tax Rates",
- "length": 0,
- "no_copy": 0,
- "options": "Item Tax Template Detail",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "fieldname": "taxes",
+ "fieldtype": "Table",
+ "label": "Tax Rates",
+ "options": "Item Tax Template Detail",
+ "reqd": 1
+ },
+ {
+ "fieldname": "company",
+ "fieldtype": "Link",
+ "label": "Company",
+ "options": "Company",
+ "reqd": 1
}
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2018-12-21 23:51:16.328340",
- "modified_by": "Administrator",
- "module": "Accounts",
- "name": "Item Tax Template",
- "name_case": "",
- "owner": "Administrator",
+ ],
+ "modified": "2020-06-18 20:27:42.615842",
+ "modified_by": "ahmad@havenir.com",
+ "module": "Accounts",
+ "name": "Item Tax Template",
+ "owner": "Administrator",
"permissions": [
{
- "amend": 0,
- "cancel": 0,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "System Manager",
+ "share": 1,
"write": 1
- },
+ },
{
- "amend": 0,
- "cancel": 0,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Accounts Manager",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Accounts Manager",
+ "share": 1,
"write": 1
- },
+ },
{
- "amend": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Accounts User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
- "write": 0
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Accounts User",
+ "share": 1
}
- ],
- "quick_entry": 0,
- "read_only": 0,
- "read_only_onload": 0,
- "search_fields": "",
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
+ ],
+ "show_name_in_global_search": 1,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 7360b39..cfdae93 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -840,6 +840,7 @@
return [{"account": a, "balance": get_balance_on(a)} for a in accounts]
+@frappe.whitelist()
def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""select jv.name, jv.posting_date, jv.user_remark
from `tabJournal Entry` jv, `tabJournal Entry Account` jv_detail
diff --git a/erpnext/accounts/doctype/payment_order/payment_order.py b/erpnext/accounts/doctype/payment_order/payment_order.py
index 7ecdc41..4702e58 100644
--- a/erpnext/accounts/doctype/payment_order/payment_order.py
+++ b/erpnext/accounts/doctype/payment_order/payment_order.py
@@ -26,6 +26,7 @@
for d in self.references:
frappe.db.set_value(self.payment_order_type, d.get(frappe.scrub(self.payment_order_type)), ref_field, status)
+@frappe.whitelist()
def get_mop_query(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql(""" select mode_of_payment from `tabPayment Order Reference`
where parent = %(parent)s and mode_of_payment like %(txt)s
@@ -36,6 +37,7 @@
'txt': "%%%s%%" % txt
})
+@frappe.whitelist()
def get_supplier_query(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql(""" select supplier from `tabPayment Order Reference`
where parent = %(parent)s and supplier like %(txt)s and
@@ -86,4 +88,4 @@
je.flags.ignore_mandatory = True
je.save()
- frappe.msgprint(_("{0} {1} created").format(je.doctype, je.name))
\ No newline at end of file
+ frappe.msgprint(_("{0} {1} created").format(je.doctype, je.name))
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index 3080496..8eaad7a 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -101,10 +101,10 @@
Having
amount > 0
""".format(
- doc=voucher_type,
- dr_or_cr=dr_or_cr,
- reconciled_dr_or_cr=reconciled_dr_or_cr,
- party_type_field=frappe.scrub(self.party_type)),
+ doc=voucher_type,
+ dr_or_cr=dr_or_cr,
+ reconciled_dr_or_cr=reconciled_dr_or_cr,
+ party_type_field=frappe.scrub(self.party_type)),
{
'party': self.party,
'party_type': self.party_type,
@@ -170,7 +170,7 @@
reconcile_against_document(lst)
if dr_or_cr_notes:
- reconcile_dr_cr_note(dr_or_cr_notes)
+ reconcile_dr_cr_note(dr_or_cr_notes, self.company)
msgprint(_("Successfully Reconciled"))
self.get_unreconciled_entries()
@@ -261,7 +261,7 @@
return cond
-def reconcile_dr_cr_note(dr_cr_notes):
+def reconcile_dr_cr_note(dr_cr_notes, company):
for d in dr_cr_notes:
voucher_type = ('Credit Note'
if d.voucher_type == 'Sales Invoice' else 'Debit Note')
@@ -273,6 +273,7 @@
"doctype": "Journal Entry",
"voucher_type": voucher_type,
"posting_date": today(),
+ "company": company,
"accounts": [
{
'account': d.account,
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.py b/erpnext/accounts/doctype/pos_profile/pos_profile.py
index 4f17e9f..f186967 100644
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.py
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.py
@@ -115,6 +115,7 @@
def get_series():
return frappe.get_meta("Sales Invoice").get_field("naming_series").options or ""
+@frappe.whitelist()
def pos_profile_query(doctype, txt, searchfield, start, page_len, filters):
user = frappe.session['user']
company = filters.get('company') or frappe.defaults.get_user_default('company')
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index ead300e..d4d83af 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -432,6 +432,7 @@
return doc
+@frappe.whitelist()
def get_item_uoms(doctype, txt, searchfield, start, page_len, filters):
items = [filters.get('value')]
if filters.get('apply_on') != 'Item Code':
@@ -442,4 +443,4 @@
return frappe.get_all('UOM Conversion Detail',
filters = {'parent': ('in', items), 'uom': ("like", "{0}%".format(txt))},
- fields = ["distinct uom"], as_list=1)
\ No newline at end of file
+ fields = ["distinct uom"], as_list=1)
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index 63c34ed..02b4206 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -189,6 +189,8 @@
{
"fieldname": "customer_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"options": "fa fa-user"
},
{
@@ -197,6 +199,8 @@
"fieldname": "title",
"fieldtype": "Data",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Title",
"no_copy": 1,
"print_hide": 1
@@ -205,6 +209,8 @@
"bold": 1,
"fieldname": "naming_series",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Series",
"no_copy": 1,
"oldfieldname": "naming_series",
@@ -218,6 +224,8 @@
"bold": 1,
"fieldname": "customer",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_standard_filter": 1,
"label": "Customer",
"oldfieldname": "customer",
@@ -232,6 +240,8 @@
"fetch_from": "customer.customer_name",
"fieldname": "customer_name",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_global_search": 1,
"label": "Customer Name",
"oldfieldname": "customer_name",
@@ -241,6 +251,8 @@
{
"fieldname": "tax_id",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Tax Id",
"print_hide": 1,
"read_only": 1
@@ -248,6 +260,8 @@
{
"fieldname": "project",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_global_search": 1,
"label": "Project",
"oldfieldname": "project_name",
@@ -259,6 +273,8 @@
"default": "0",
"fieldname": "is_pos",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Include Payment (POS)",
"oldfieldname": "is_pos",
"oldfieldtype": "Check",
@@ -268,6 +284,8 @@
"depends_on": "is_pos",
"fieldname": "pos_profile",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "POS Profile",
"options": "POS Profile",
"print_hide": 1
@@ -276,6 +294,8 @@
"fieldname": "offline_pos_name",
"fieldtype": "Data",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Offline POS Name",
"print_hide": 1,
"read_only": 1
@@ -284,6 +304,8 @@
"default": "0",
"fieldname": "is_return",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Is Return (Credit Note)",
"no_copy": 1,
"print_hide": 1
@@ -291,11 +313,15 @@
{
"fieldname": "column_break1",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break"
},
{
"fieldname": "company",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_standard_filter": 1,
"label": "Company",
"oldfieldname": "company",
@@ -308,6 +334,8 @@
{
"fieldname": "cost_center",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Cost Center",
"options": "Cost Center"
},
@@ -316,6 +344,8 @@
"default": "Today",
"fieldname": "posting_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Date",
"no_copy": 1,
"oldfieldname": "posting_date",
@@ -326,6 +356,8 @@
{
"fieldname": "posting_time",
"fieldtype": "Time",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Posting Time",
"no_copy": 1,
"oldfieldname": "posting_time",
@@ -337,12 +369,16 @@
"depends_on": "eval:doc.docstatus==0",
"fieldname": "set_posting_time",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Edit Posting Date and Time",
"print_hide": 1
},
{
"fieldname": "due_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payment Due Date",
"no_copy": 1,
"oldfieldname": "due_date",
@@ -351,6 +387,8 @@
{
"fieldname": "amended_from",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"ignore_user_permissions": 1,
"label": "Amended From",
"no_copy": 1,
@@ -364,12 +402,16 @@
"depends_on": "return_against",
"fieldname": "returns",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Returns"
},
{
"depends_on": "return_against",
"fieldname": "return_against",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Return Against Sales Invoice",
"no_copy": 1,
"options": "Sales Invoice",
@@ -379,13 +421,17 @@
},
{
"fieldname": "column_break_21",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"default": "0",
"depends_on": "eval: doc.is_return && doc.return_against",
"fieldname": "update_billed_amount_in_sales_order",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Update Billed Amount in Sales Order"
},
{
@@ -393,35 +439,47 @@
"collapsible_depends_on": "po_no",
"fieldname": "customer_po_details",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer PO Details"
},
{
"allow_on_submit": 1,
"fieldname": "po_no",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer's Purchase Order",
"no_copy": 1,
"print_hide": 1
},
{
"fieldname": "column_break_23",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"allow_on_submit": 1,
"fieldname": "po_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer's Purchase Order Date"
},
{
"collapsible": 1,
"fieldname": "address_and_contact",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Address and Contact"
},
{
"fieldname": "customer_address",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer Address",
"options": "Address",
"print_hide": 1
@@ -429,12 +487,16 @@
{
"fieldname": "address_display",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Address",
"read_only": 1
},
{
"fieldname": "contact_person",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_global_search": 1,
"label": "Contact Person",
"options": "Contact",
@@ -443,6 +505,8 @@
{
"fieldname": "contact_display",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Contact",
"read_only": 1
},
@@ -450,6 +514,8 @@
"fieldname": "contact_mobile",
"fieldtype": "Small Text",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Mobile No",
"read_only": 1
},
@@ -457,6 +523,8 @@
"fieldname": "contact_email",
"fieldtype": "Data",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Contact Email",
"options": "Email",
"print_hide": 1,
@@ -465,17 +533,23 @@
{
"fieldname": "territory",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Territory",
"options": "Territory",
"print_hide": 1
},
{
"fieldname": "col_break4",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "shipping_address_name",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Shipping Address Name",
"options": "Address",
"print_hide": 1
@@ -483,6 +557,8 @@
{
"fieldname": "shipping_address",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Shipping Address",
"print_hide": 1,
"read_only": 1
@@ -490,6 +566,8 @@
{
"fieldname": "company_address",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Company Address Name",
"options": "Address",
"print_hide": 1
@@ -498,6 +576,8 @@
"fieldname": "company_address_display",
"fieldtype": "Small Text",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Company Address",
"print_hide": 1,
"read_only": 1
@@ -507,11 +587,15 @@
"depends_on": "customer",
"fieldname": "currency_and_price_list",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Currency and Price List"
},
{
"fieldname": "currency",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Currency",
"oldfieldname": "currency",
"oldfieldtype": "Select",
@@ -523,6 +607,8 @@
"description": "Rate at which Customer Currency is converted to customer's base currency",
"fieldname": "conversion_rate",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Exchange Rate",
"oldfieldname": "conversion_rate",
"oldfieldtype": "Currency",
@@ -533,11 +619,15 @@
{
"fieldname": "column_break2",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"width": "50%"
},
{
"fieldname": "selling_price_list",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Price List",
"oldfieldname": "price_list_name",
"oldfieldtype": "Select",
@@ -548,6 +638,8 @@
{
"fieldname": "price_list_currency",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Price List Currency",
"options": "Currency",
"print_hide": 1,
@@ -558,6 +650,8 @@
"description": "Rate at which Price list currency is converted to customer's base currency",
"fieldname": "plc_conversion_rate",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Price List Exchange Rate",
"precision": "9",
"print_hide": 1,
@@ -567,6 +661,8 @@
"default": "0",
"fieldname": "ignore_pricing_rule",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Ignore Pricing Rule",
"no_copy": 1,
"permlevel": 1,
@@ -574,12 +670,16 @@
},
{
"fieldname": "sec_warehouse",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"depends_on": "update_stock",
"fieldname": "set_warehouse",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Set Source Warehouse",
"options": "Warehouse",
"print_hide": 1
@@ -587,6 +687,8 @@
{
"fieldname": "items_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Section Break",
"options": "fa fa-shopping-cart"
},
@@ -594,6 +696,8 @@
"default": "0",
"fieldname": "update_stock",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Update Stock",
"oldfieldname": "update_stock",
"oldfieldtype": "Check",
@@ -602,12 +706,16 @@
{
"fieldname": "scan_barcode",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Scan Barcode"
},
{
"allow_bulk_edit": 1,
"fieldname": "items",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Items",
"oldfieldname": "entries",
"oldfieldtype": "Table",
@@ -617,11 +725,15 @@
{
"fieldname": "pricing_rule_details",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Pricing Rules"
},
{
"fieldname": "pricing_rules",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Pricing Rule Detail",
"options": "Pricing Rule Detail",
"read_only": 1
@@ -629,6 +741,8 @@
{
"fieldname": "packing_list",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Packing List",
"options": "fa fa-suitcase",
"print_hide": 1
@@ -636,6 +750,8 @@
{
"fieldname": "packed_items",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Packed Items",
"options": "Packed Item",
"print_hide": 1
@@ -643,6 +759,8 @@
{
"fieldname": "product_bundle_help",
"fieldtype": "HTML",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Product Bundle Help",
"print_hide": 1
},
@@ -651,11 +769,15 @@
"collapsible_depends_on": "eval:doc.total_billing_amount > 0",
"fieldname": "time_sheet_list",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Time Sheet List"
},
{
"fieldname": "timesheets",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Time Sheets",
"options": "Sales Invoice Timesheet",
"print_hide": 1
@@ -664,23 +786,31 @@
"default": "0",
"fieldname": "total_billing_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Billing Amount",
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "section_break_30",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "total_qty",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Quantity",
"read_only": 1
},
{
"fieldname": "base_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total (Company Currency)",
"options": "Company:company:default_currency",
"print_hide": 1,
@@ -689,6 +819,8 @@
{
"fieldname": "base_net_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Net Total (Company Currency)",
"oldfieldname": "net_total",
"oldfieldtype": "Currency",
@@ -699,11 +831,15 @@
},
{
"fieldname": "column_break_32",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total",
"options": "currency",
"read_only": 1
@@ -711,6 +847,8 @@
{
"fieldname": "net_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Net Total",
"options": "currency",
"print_hide": 1,
@@ -719,6 +857,8 @@
{
"fieldname": "total_net_weight",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Net Weight",
"print_hide": 1,
"read_only": 1
@@ -726,12 +866,16 @@
{
"fieldname": "taxes_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Section Break",
"options": "fa fa-money"
},
{
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Taxes and Charges Template",
"oldfieldname": "charge",
"oldfieldtype": "Link",
@@ -740,11 +884,15 @@
},
{
"fieldname": "column_break_38",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "shipping_rule",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Shipping Rule",
"oldfieldtype": "Button",
"options": "Shipping Rule",
@@ -753,17 +901,23 @@
{
"fieldname": "tax_category",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Tax Category",
"options": "Tax Category",
"print_hide": 1
},
{
"fieldname": "section_break_40",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "taxes",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Taxes and Charges",
"oldfieldname": "other_charges",
"oldfieldtype": "Table",
@@ -773,11 +927,15 @@
"collapsible": 1,
"fieldname": "sec_tax_breakup",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Tax Breakup"
},
{
"fieldname": "other_charges_calculation",
"fieldtype": "Long Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Taxes and Charges Calculation",
"no_copy": 1,
"oldfieldtype": "HTML",
@@ -786,11 +944,15 @@
},
{
"fieldname": "section_break_43",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "base_total_taxes_and_charges",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Taxes and Charges (Company Currency)",
"oldfieldname": "other_charges_total",
"oldfieldtype": "Currency",
@@ -800,11 +962,15 @@
},
{
"fieldname": "column_break_47",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "total_taxes_and_charges",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Taxes and Charges",
"options": "currency",
"print_hide": 1,
@@ -814,12 +980,16 @@
"collapsible": 1,
"fieldname": "loyalty_points_redemption",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Loyalty Points Redemption"
},
{
"depends_on": "redeem_loyalty_points",
"fieldname": "loyalty_points",
"fieldtype": "Int",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Loyalty Points",
"no_copy": 1,
"print_hide": 1
@@ -828,6 +998,8 @@
"depends_on": "redeem_loyalty_points",
"fieldname": "loyalty_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Loyalty Amount",
"no_copy": 1,
"options": "Company:company:default_currency",
@@ -838,18 +1010,24 @@
"default": "0",
"fieldname": "redeem_loyalty_points",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Redeem Loyalty Points",
"no_copy": 1,
"print_hide": 1
},
{
"fieldname": "column_break_77",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fetch_from": "customer.loyalty_program",
"fieldname": "loyalty_program",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Loyalty Program",
"no_copy": 1,
"options": "Loyalty Program",
@@ -860,6 +1038,8 @@
"depends_on": "redeem_loyalty_points",
"fieldname": "loyalty_redemption_account",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Redemption Account",
"no_copy": 1,
"options": "Account"
@@ -868,6 +1048,8 @@
"depends_on": "redeem_loyalty_points",
"fieldname": "loyalty_redemption_cost_center",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Redemption Cost Center",
"no_copy": 1,
"options": "Cost Center"
@@ -877,12 +1059,16 @@
"collapsible_depends_on": "discount_amount",
"fieldname": "section_break_49",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount"
},
{
"default": "Grand Total",
"fieldname": "apply_discount_on",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Apply Additional Discount On",
"options": "\nGrand Total\nNet Total",
"print_hide": 1
@@ -890,6 +1076,8 @@
{
"fieldname": "base_discount_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount Amount (Company Currency)",
"options": "Company:company:default_currency",
"print_hide": 1,
@@ -897,17 +1085,23 @@
},
{
"fieldname": "column_break_51",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "additional_discount_percentage",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount Percentage",
"print_hide": 1
},
{
"fieldname": "discount_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount Amount",
"options": "currency",
"print_hide": 1
@@ -915,6 +1109,8 @@
{
"fieldname": "totals",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Section Break",
"options": "fa fa-money",
"print_hide": 1
@@ -922,6 +1118,8 @@
{
"fieldname": "base_grand_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Grand Total (Company Currency)",
"oldfieldname": "grand_total",
"oldfieldtype": "Currency",
@@ -933,6 +1131,8 @@
{
"fieldname": "base_rounding_adjustment",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounding Adjustment (Company Currency)",
"no_copy": 1,
"options": "Company:company:default_currency",
@@ -942,6 +1142,8 @@
{
"fieldname": "base_rounded_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounded Total (Company Currency)",
"oldfieldname": "rounded_total",
"oldfieldtype": "Currency",
@@ -953,6 +1155,8 @@
"description": "In Words will be visible once you save the Sales Invoice.",
"fieldname": "base_in_words",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "In Words (Company Currency)",
"oldfieldname": "in_words",
"oldfieldtype": "Data",
@@ -962,6 +1166,8 @@
{
"fieldname": "column_break5",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break",
"print_hide": 1,
"width": "50%"
@@ -970,6 +1176,8 @@
"bold": 1,
"fieldname": "grand_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_list_view": 1,
"label": "Grand Total",
"oldfieldname": "grand_total_export",
@@ -981,6 +1189,8 @@
{
"fieldname": "rounding_adjustment",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounding Adjustment",
"no_copy": 1,
"options": "currency",
@@ -991,6 +1201,8 @@
"bold": 1,
"fieldname": "rounded_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounded Total",
"oldfieldname": "rounded_total_export",
"oldfieldtype": "Currency",
@@ -1000,6 +1212,8 @@
{
"fieldname": "in_words",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "In Words",
"oldfieldname": "in_words_export",
"oldfieldtype": "Data",
@@ -1009,6 +1223,8 @@
{
"fieldname": "total_advance",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Advance",
"oldfieldname": "total_advance",
"oldfieldtype": "Currency",
@@ -1019,6 +1235,8 @@
{
"fieldname": "outstanding_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Outstanding Amount",
"no_copy": 1,
"oldfieldname": "outstanding_amount",
@@ -1032,6 +1250,8 @@
"collapsible_depends_on": "advances",
"fieldname": "advances_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Advance Payments",
"oldfieldtype": "Section Break",
"options": "fa fa-money",
@@ -1041,18 +1261,24 @@
"default": "0",
"fieldname": "allocate_advances_automatically",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Allocate Advances Automatically (FIFO)"
},
{
"depends_on": "eval:!doc.allocate_advances_automatically",
"fieldname": "get_advances",
"fieldtype": "Button",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Get Advances Received",
"options": "set_advances"
},
{
"fieldname": "advances",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Advances",
"oldfieldname": "advance_adjustment_details",
"oldfieldtype": "Table",
@@ -1064,12 +1290,16 @@
"collapsible_depends_on": "eval:(!doc.is_pos && !doc.is_return)",
"fieldname": "payment_schedule_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payment Terms"
},
{
"depends_on": "eval:(!doc.is_pos && !doc.is_return)",
"fieldname": "payment_terms_template",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payment Terms Template",
"no_copy": 1,
"options": "Payment Terms Template",
@@ -1079,6 +1309,8 @@
"depends_on": "eval:(!doc.is_pos && !doc.is_return)",
"fieldname": "payment_schedule",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payment Schedule",
"no_copy": 1,
"options": "Payment Schedule",
@@ -1088,6 +1320,8 @@
"depends_on": "eval:doc.is_pos===1||(doc.advances && doc.advances.length>0)",
"fieldname": "payments_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payments",
"options": "fa fa-money"
},
@@ -1096,6 +1330,8 @@
"fieldname": "cash_bank_account",
"fieldtype": "Link",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Cash/Bank Account",
"oldfieldname": "cash_bank_account",
"oldfieldtype": "Link",
@@ -1106,17 +1342,23 @@
"depends_on": "eval:doc.is_pos===1",
"fieldname": "payments",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Invoice Payment",
"options": "Sales Invoice Payment",
"print_hide": 1
},
{
"fieldname": "section_break_84",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "base_paid_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Paid Amount (Company Currency)",
"no_copy": 1,
"options": "Company:company:default_currency",
@@ -1125,12 +1367,16 @@
},
{
"fieldname": "column_break_86",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"depends_on": "eval: doc.is_pos || doc.redeem_loyalty_points",
"fieldname": "paid_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Paid Amount",
"no_copy": 1,
"oldfieldname": "paid_amount",
@@ -1141,12 +1387,16 @@
},
{
"fieldname": "section_break_88",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"depends_on": "is_pos",
"fieldname": "base_change_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Base Change Amount (Company Currency)",
"no_copy": 1,
"options": "Company:company:default_currency",
@@ -1155,12 +1405,16 @@
},
{
"fieldname": "column_break_90",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"depends_on": "is_pos",
"fieldname": "change_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Change Amount",
"no_copy": 1,
"options": "currency",
@@ -1170,6 +1424,8 @@
"depends_on": "is_pos",
"fieldname": "account_for_change_amount",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Account for Change Amount",
"options": "Account",
"print_hide": 1
@@ -1180,12 +1436,16 @@
"depends_on": "grand_total",
"fieldname": "column_break4",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Write Off",
"width": "50%"
},
{
"fieldname": "write_off_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Write Off Amount",
"no_copy": 1,
"options": "currency",
@@ -1194,6 +1454,8 @@
{
"fieldname": "base_write_off_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Write Off Amount (Company Currency)",
"no_copy": 1,
"options": "Company:company:default_currency",
@@ -1205,16 +1467,22 @@
"depends_on": "is_pos",
"fieldname": "write_off_outstanding_amount_automatically",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Write Off Outstanding Amount",
"print_hide": 1
},
{
"fieldname": "column_break_74",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "write_off_account",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Write Off Account",
"options": "Account",
"print_hide": 1
@@ -1222,6 +1490,8 @@
{
"fieldname": "write_off_cost_center",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Write Off Cost Center",
"options": "Cost Center",
"print_hide": 1
@@ -1231,12 +1501,16 @@
"collapsible_depends_on": "terms",
"fieldname": "terms_section_break",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Terms and Conditions",
"oldfieldtype": "Section Break"
},
{
"fieldname": "tc_name",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Terms",
"oldfieldname": "tc_name",
"oldfieldtype": "Link",
@@ -1246,6 +1520,8 @@
{
"fieldname": "terms",
"fieldtype": "Text Editor",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Terms and Conditions Details",
"oldfieldname": "terms",
"oldfieldtype": "Text Editor"
@@ -1254,12 +1530,16 @@
"collapsible": 1,
"fieldname": "edit_printing_settings",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Printing Settings"
},
{
"allow_on_submit": 1,
"fieldname": "letter_head",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Letter Head",
"oldfieldname": "letter_head",
"oldfieldtype": "Select",
@@ -1271,24 +1551,32 @@
"default": "0",
"fieldname": "group_same_items",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Group same items",
"print_hide": 1
},
{
"fieldname": "language",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Print Language",
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "column_break_84",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"allow_on_submit": 1,
"fieldname": "select_print_heading",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Print Heading",
"no_copy": 1,
"oldfieldname": "select_print_heading",
@@ -1302,11 +1590,15 @@
"depends_on": "customer",
"fieldname": "more_information",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "More Information"
},
{
"fieldname": "inter_company_invoice_reference",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Inter Company Invoice Reference",
"options": "Purchase Invoice",
"read_only": 1
@@ -1315,6 +1607,8 @@
"fieldname": "customer_group",
"fieldtype": "Link",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer Group",
"options": "Customer Group",
"print_hide": 1
@@ -1322,6 +1616,8 @@
{
"fieldname": "campaign",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Campaign",
"oldfieldname": "campaign",
"oldfieldtype": "Link",
@@ -1332,6 +1628,8 @@
"default": "0",
"fieldname": "is_discounted",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Is Discounted",
"no_copy": 1,
"read_only": 1
@@ -1339,12 +1637,16 @@
{
"fieldname": "col_break23",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"width": "50%"
},
{
"default": "Draft",
"fieldname": "status",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_standard_filter": 1,
"label": "Status",
"no_copy": 1,
@@ -1355,6 +1657,8 @@
{
"fieldname": "source",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Source",
"oldfieldname": "source",
"oldfieldtype": "Select",
@@ -1365,6 +1669,8 @@
"collapsible": 1,
"fieldname": "more_info",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Accounting Details",
"oldfieldtype": "Section Break",
"options": "fa fa-file-text",
@@ -1373,6 +1679,8 @@
{
"fieldname": "debit_to",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Debit To",
"oldfieldname": "debit_to",
"oldfieldtype": "Link",
@@ -1385,6 +1693,8 @@
"fieldname": "party_account_currency",
"fieldtype": "Link",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Party Account Currency",
"no_copy": 1,
"options": "Currency",
@@ -1395,6 +1705,8 @@
"default": "No",
"fieldname": "is_opening",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Is Opening Entry",
"oldfieldname": "is_opening",
"oldfieldtype": "Select",
@@ -1404,6 +1716,8 @@
{
"fieldname": "c_form_applicable",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "C-Form Applicable",
"no_copy": 1,
"options": "No\nYes",
@@ -1412,6 +1726,8 @@
{
"fieldname": "c_form_no",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "C-Form No",
"no_copy": 1,
"options": "C-Form",
@@ -1421,12 +1737,16 @@
{
"fieldname": "column_break8",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break",
"print_hide": 1
},
{
"fieldname": "remarks",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Remarks",
"no_copy": 1,
"oldfieldname": "remarks",
@@ -1438,6 +1758,8 @@
"collapsible_depends_on": "sales_partner",
"fieldname": "sales_team_section_break",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Commission",
"oldfieldtype": "Section Break",
"options": "fa fa-group",
@@ -1446,6 +1768,8 @@
{
"fieldname": "sales_partner",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Partner",
"oldfieldname": "sales_partner",
"oldfieldtype": "Link",
@@ -1455,6 +1779,8 @@
{
"fieldname": "column_break10",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break",
"print_hide": 1,
"width": "50%"
@@ -1462,6 +1788,8 @@
{
"fieldname": "commission_rate",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Commission Rate (%)",
"oldfieldname": "commission_rate",
"oldfieldtype": "Currency",
@@ -1470,6 +1798,8 @@
{
"fieldname": "total_commission",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Commission",
"oldfieldname": "total_commission",
"oldfieldtype": "Currency",
@@ -1481,6 +1811,8 @@
"collapsible_depends_on": "sales_team",
"fieldname": "section_break2",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Team",
"print_hide": 1
},
@@ -1488,6 +1820,8 @@
"allow_on_submit": 1,
"fieldname": "sales_team",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Team1",
"oldfieldname": "sales_team",
"oldfieldtype": "Table",
@@ -1495,14 +1829,19 @@
"print_hide": 1
},
{
+ "collapsible": 1,
"fieldname": "subscription_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Subscription Section"
},
{
"allow_on_submit": 1,
"fieldname": "from_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "From Date",
"no_copy": 1,
"print_hide": 1
@@ -1511,18 +1850,24 @@
"allow_on_submit": 1,
"fieldname": "to_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "To Date",
"no_copy": 1,
"print_hide": 1
},
{
"fieldname": "column_break_140",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"allow_on_submit": 1,
"fieldname": "auto_repeat",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Auto Repeat",
"no_copy": 1,
"options": "Auto Repeat",
@@ -1534,12 +1879,16 @@
"depends_on": "eval: doc.auto_repeat",
"fieldname": "update_auto_repeat_reference",
"fieldtype": "Button",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Update Auto Repeat Reference"
},
{
"fieldname": "against_income_account",
"fieldtype": "Small Text",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Against Income Account",
"no_copy": 1,
"oldfieldname": "against_income_account",
@@ -1551,6 +1900,8 @@
"fieldname": "pos_total_qty",
"fieldtype": "Float",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Qty",
"print_hide": 1,
"print_hide_if_no_value": 1,
@@ -1560,17 +1911,23 @@
"collapsible": 1,
"fieldname": "accounting_dimensions_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Accounting Dimensions"
},
{
"fieldname": "dimension_col_break",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"default": "0",
"fetch_from": "customer.is_internal_customer",
"fieldname": "is_internal_customer",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Is Internal Customer",
"read_only": 1
}
@@ -1579,7 +1936,7 @@
"idx": 181,
"is_submittable": 1,
"links": [],
- "modified": "2020-05-19 17:00:57.208696",
+ "modified": "2020-06-30 12:00:03.890180",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index bfe35ab..a245d63 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -140,10 +140,8 @@
gle = frappe.new_doc("GL Entry")
gle.update(args)
gle.flags.ignore_permissions = 1
- gle.validate()
- gle.db_insert()
+ gle.insert()
gle.run_method("on_update_with_args", adv_adj, update_outstanding)
- gle.flags.ignore_validate = True
gle.submit()
# check against budget
diff --git a/erpnext/accounts/module_onboarding/accounts/accounts.json b/erpnext/accounts/module_onboarding/accounts/accounts.json
index 12da440..ba1a779 100644
--- a/erpnext/accounts/module_onboarding/accounts/accounts.json
+++ b/erpnext/accounts/module_onboarding/accounts/accounts.json
@@ -13,7 +13,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/accounts",
"idx": 0,
"is_complete": 0,
- "modified": "2020-05-14 22:11:06.475938",
+ "modified": "2020-07-08 14:06:09.033880",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts",
@@ -44,8 +44,7 @@
"step": "Configure Account Settings"
}
],
- "subtitle": "Accounts, invoices and taxation.",
- "success_message": "The Accounts module is now set up!",
- "title": "Let's Setup Your Accounts and Taxes.",
- "user_can_dismiss": 1
+ "subtitle": "Accounts, Invoices, Taxation, and more.",
+ "success_message": "The Accounts Module is all set up!",
+ "title": "Let's Set Up Your Accounts and Taxes."
}
\ No newline at end of file
diff --git a/erpnext/accounts/onboarding_step/create_a_customer/create_a_customer.json b/erpnext/accounts/onboarding_step/create_a_customer/create_a_customer.json
index bb396d2..5a403b0 100644
--- a/erpnext/accounts/onboarding_step/create_a_customer/create_a_customer.json
+++ b/erpnext/accounts/onboarding_step/create_a_customer/create_a_customer.json
@@ -8,7 +8,7 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-14 17:46:41.831517",
+ "modified": "2020-06-01 13:16:19.731719",
"modified_by": "Administrator",
"name": "Create a Customer",
"owner": "Administrator",
diff --git a/erpnext/accounts/onboarding_step/create_a_product/create_a_product.json b/erpnext/accounts/onboarding_step/create_a_product/create_a_product.json
index 450bee1..d2068e1 100644
--- a/erpnext/accounts/onboarding_step/create_a_product/create_a_product.json
+++ b/erpnext/accounts/onboarding_step/create_a_product/create_a_product.json
@@ -1,6 +1,6 @@
{
"action": "Create Entry",
- "creation": "2020-05-14 17:45:28.554605",
+ "creation": "2020-05-12 18:16:06.624554",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
@@ -8,7 +8,7 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-14 17:45:28.554605",
+ "modified": "2020-05-12 18:30:02.489949",
"modified_by": "Administrator",
"name": "Create a Product",
"owner": "Administrator",
diff --git a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py
index 69f9907..7df090b 100644
--- a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py
+++ b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py
@@ -21,7 +21,7 @@
if payment_doctype == "Payment Entry" and payment_entry.unallocated_amount > transaction.unallocated_amount:
frappe.throw(_("The unallocated amount of Payment Entry {0} \
is greater than the Bank Transaction's unallocated amount").format(payment_name))
-
+
if transaction.unallocated_amount == 0:
frappe.throw(_("This bank transaction is already fully reconciled"))
@@ -289,6 +289,7 @@
else:
return []
+@frappe.whitelist()
def payment_entry_query(doctype, txt, searchfield, start, page_len, filters):
account = frappe.db.get_value("Bank Account", filters.get("bank_account"), "account")
if not account:
@@ -317,6 +318,7 @@
}
)
+@frappe.whitelist()
def journal_entry_query(doctype, txt, searchfield, start, page_len, filters):
account = frappe.db.get_value("Bank Account", filters.get("bank_account"), "account")
@@ -352,6 +354,7 @@
}
)
+@frappe.whitelist()
def sales_invoices_query(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""
SELECT
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index db91b66..b764eff 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -388,7 +388,7 @@
from erpnext.accounts.doctype.tax_rule.tax_rule import get_tax_template, get_party_details
args = {
party_type.lower(): party,
- "company": company
+ "company": company
}
if tax_category:
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js
index 2aa9618..6abd6e5 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.js
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js
@@ -18,41 +18,6 @@
"default": frappe.datetime.get_today()
},
{
- "fieldname":"ageing_based_on",
- "label": __("Ageing Based On"),
- "fieldtype": "Select",
- "options": 'Posting Date\nDue Date\nSupplier Invoice Date',
- "default": "Due Date"
- },
- {
- "fieldname":"range1",
- "label": __("Ageing Range 1"),
- "fieldtype": "Int",
- "default": "30",
- "reqd": 1
- },
- {
- "fieldname":"range2",
- "label": __("Ageing Range 2"),
- "fieldtype": "Int",
- "default": "60",
- "reqd": 1
- },
- {
- "fieldname":"range3",
- "label": __("Ageing Range 3"),
- "fieldtype": "Int",
- "default": "90",
- "reqd": 1
- },
- {
- "fieldname":"range4",
- "label": __("Ageing Range 4"),
- "fieldtype": "Int",
- "default": "120",
- "reqd": 1
- },
- {
"fieldname":"finance_book",
"label": __("Finance Book"),
"fieldtype": "Link",
@@ -89,6 +54,41 @@
}
},
{
+ "fieldname":"ageing_based_on",
+ "label": __("Ageing Based On"),
+ "fieldtype": "Select",
+ "options": 'Posting Date\nDue Date\nSupplier Invoice Date',
+ "default": "Due Date"
+ },
+ {
+ "fieldname":"range1",
+ "label": __("Ageing Range 1"),
+ "fieldtype": "Int",
+ "default": "30",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range2",
+ "label": __("Ageing Range 2"),
+ "fieldtype": "Int",
+ "default": "60",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range3",
+ "label": __("Ageing Range 3"),
+ "fieldtype": "Int",
+ "default": "90",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range4",
+ "label": __("Ageing Range 4"),
+ "fieldtype": "Int",
+ "default": "120",
+ "reqd": 1
+ },
+ {
"fieldname":"payment_terms_template",
"label": __("Payment Terms Template"),
"fieldtype": "Link",
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
index 8dc558a..c999eb9 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
@@ -18,41 +18,6 @@
"default": frappe.datetime.get_today()
},
{
- "fieldname":"ageing_based_on",
- "label": __("Ageing Based On"),
- "fieldtype": "Select",
- "options": 'Posting Date\nDue Date',
- "default": "Due Date"
- },
- {
- "fieldname":"range1",
- "label": __("Ageing Range 1"),
- "fieldtype": "Int",
- "default": "30",
- "reqd": 1
- },
- {
- "fieldname":"range2",
- "label": __("Ageing Range 2"),
- "fieldtype": "Int",
- "default": "60",
- "reqd": 1
- },
- {
- "fieldname":"range3",
- "label": __("Ageing Range 3"),
- "fieldtype": "Int",
- "default": "90",
- "reqd": 1
- },
- {
- "fieldname":"range4",
- "label": __("Ageing Range 4"),
- "fieldtype": "Int",
- "default": "120",
- "reqd": 1
- },
- {
"fieldname":"finance_book",
"label": __("Finance Book"),
"fieldtype": "Link",
@@ -102,6 +67,41 @@
}
},
{
+ "fieldname":"ageing_based_on",
+ "label": __("Ageing Based On"),
+ "fieldtype": "Select",
+ "options": 'Posting Date\nDue Date',
+ "default": "Due Date"
+ },
+ {
+ "fieldname":"range1",
+ "label": __("Ageing Range 1"),
+ "fieldtype": "Int",
+ "default": "30",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range2",
+ "label": __("Ageing Range 2"),
+ "fieldtype": "Int",
+ "default": "60",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range3",
+ "label": __("Ageing Range 3"),
+ "fieldtype": "Int",
+ "default": "90",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range4",
+ "label": __("Ageing Range 4"),
+ "fieldtype": "Int",
+ "default": "120",
+ "reqd": 1
+ },
+ {
"fieldname":"customer_group",
"label": __("Customer Group"),
"fieldtype": "Link",
@@ -114,12 +114,6 @@
"options": "Payment Terms Template"
},
{
- "fieldname":"territory",
- "label": __("Territory"),
- "fieldtype": "Link",
- "options": "Territory"
- },
- {
"fieldname":"sales_partner",
"label": __("Sales Partner"),
"fieldtype": "Link",
@@ -132,6 +126,12 @@
"options": "Sales Person"
},
{
+ "fieldname":"territory",
+ "label": __("Territory"),
+ "fieldtype": "Link",
+ "options": "Territory"
+ },
+ {
"fieldname": "group_by_party",
"label": __("Group By Customer"),
"fieldtype": "Check"
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 533685d..ee1d54a 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -405,12 +405,12 @@
FROM `tabDistributed Cost Center`
WHERE cost_center IN %(cost_center)s
AND parent NOT IN %(cost_center)s
- AND is_cancelled = 0
GROUP BY parent
) as DCC_allocation
WHERE company=%(company)s
{additional_conditions}
AND posting_date <= %(to_date)s
+ AND is_cancelled = 0
AND cost_center = DCC_allocation.parent
""".format(additional_conditions=additional_conditions.replace("and cost_center in %(cost_center)s ", ''))
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 16146f4..69866e1 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -133,7 +133,7 @@
acc = frappe.get_doc("Account", account)
try:
- year_start_date = get_fiscal_year(date, verbose=0)[1]
+ year_start_date = get_fiscal_year(date, company=company, verbose=0)[1]
except FiscalYearError:
if getdate(date) > getdate(nowdate()):
# if fiscal year not found and the date is greater than today
@@ -787,10 +787,10 @@
company_currency = frappe.get_cached_value('Company', company, "default_currency")
for each in acc:
each["company_currency"] = company_currency
- each["balance"] = flt(get_balance_on(each.get("value"), in_account_currency=False))
+ each["balance"] = flt(get_balance_on(each.get("value"), in_account_currency=False, company=company))
if each.account_currency != company_currency:
- each["balance_in_account_currency"] = flt(get_balance_on(each.get("value")))
+ each["balance_in_account_currency"] = flt(get_balance_on(each.get("value"), company=company))
return acc
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 9ae5a87..0bd03a8 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -35,11 +35,9 @@
if not self.booked_fixed_asset and self.validate_make_gl_entry():
self.make_gl_entries()
- def before_cancel(self):
- self.cancel_auto_gen_movement()
-
def on_cancel(self):
self.validate_cancellation()
+ self.cancel_movement_entries()
self.delete_depreciation_entries()
self.set_status()
self.ignore_linked_doctypes = ('GL Entry', 'Stock Ledger Entry')
@@ -134,19 +132,6 @@
Please do not book expense of multiple assets against one single Asset.")
.format(frappe.bold("equal"), "<br>"), title=_("Invalid Gross Purchase Amount"))
- def cancel_auto_gen_movement(self):
- movements = frappe.db.sql(
- """SELECT asm.name, asm.docstatus
- FROM `tabAsset Movement` asm, `tabAsset Movement Item` asm_item
- WHERE asm_item.parent=asm.name and asm_item.asset=%s and asm.docstatus=1""", self.name, as_dict=1)
- if len(movements) > 1:
- frappe.throw(_('Asset has multiple Asset Movement Entries which has to be \
- cancelled manually to cancel this asset.'))
- if movements:
- movement = frappe.get_doc('Asset Movement', movements[0].get('name'))
- movement.flags.ignore_validate = True
- movement.cancel()
-
def make_asset_movement(self):
reference_doctype = 'Purchase Receipt' if self.purchase_receipt else 'Purchase Invoice'
reference_docname = self.purchase_receipt or self.purchase_invoice
@@ -413,6 +398,16 @@
if self.status not in ("Submitted", "Partially Depreciated", "Fully Depreciated"):
frappe.throw(_("Asset cannot be cancelled, as it is already {0}").format(self.status))
+ def cancel_movement_entries(self):
+ movements = frappe.db.sql(
+ """SELECT asm.name, asm.docstatus
+ FROM `tabAsset Movement` asm, `tabAsset Movement Item` asm_item
+ WHERE asm_item.parent=asm.name and asm_item.asset=%s and asm.docstatus=1""", self.name, as_dict=1)
+
+ for movement in movements:
+ movement = frappe.get_doc('Asset Movement', movement.get('name'))
+ movement.cancel()
+
def delete_depreciation_entries(self):
for d in self.get("schedules"):
if d.journal_entry:
diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.py b/erpnext/assets/doctype/asset_movement/asset_movement.py
index 3da355e..b2de250 100644
--- a/erpnext/assets/doctype/asset_movement/asset_movement.py
+++ b/erpnext/assets/doctype/asset_movement/asset_movement.py
@@ -87,33 +87,9 @@
def on_submit(self):
self.set_latest_location_in_asset()
-
- def before_cancel(self):
- self.validate_last_movement()
def on_cancel(self):
self.set_latest_location_in_asset()
-
- def validate_last_movement(self):
- for d in self.assets:
- auto_gen_movement_entry = frappe.db.sql(
- """
- SELECT asm.name
- FROM `tabAsset Movement Item` asm_item, `tabAsset Movement` asm
- WHERE
- asm.docstatus=1 and
- asm_item.parent=asm.name and
- asm_item.asset=%s and
- asm.company=%s and
- asm_item.source_location is NULL and
- asm.purpose=%s
- ORDER BY
- asm.transaction_date asc
- """, (d.asset, self.company, 'Receipt'), as_dict=1)
-
- if auto_gen_movement_entry and auto_gen_movement_entry[0].get('name') == self.name:
- frappe.throw(_('{0} will be cancelled automatically on asset cancellation as it was \
- auto generated for Asset {1}').format(self.name, d.asset))
def set_latest_location_in_asset(self):
current_location, current_employee = '', ''
diff --git a/erpnext/assets/module_onboarding/assets/assets.json b/erpnext/assets/module_onboarding/assets/assets.json
index 66dd60a..1086ab4 100644
--- a/erpnext/assets/module_onboarding/assets/assets.json
+++ b/erpnext/assets/module_onboarding/assets/assets.json
@@ -13,7 +13,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/asset",
"idx": 0,
"is_complete": 0,
- "modified": "2020-05-08 16:17:31.685943",
+ "modified": "2020-07-08 14:05:51.828497",
"modified_by": "Administrator",
"module": "Assets",
"name": "Assets",
@@ -27,7 +27,7 @@
},
{
"step": "Create an Asset Category"
- },
+ },
{
"step": "Purchase an Asset Item"
},
@@ -35,8 +35,7 @@
"step": "Create an Asset"
}
],
- "subtitle": "Assets, Depreciations, Repairs and more",
- "success_message": "The Asset Module is all set up!",
- "title": "Let's Setup Asset Management",
- "user_can_dismiss": 1
+ "subtitle": "Assets, Depreciations, Repairs, and more.",
+ "success_message": "The Assets Module is all set up!",
+ "title": "Let's Set Up the Assets Module."
}
\ No newline at end of file
diff --git a/erpnext/assets/onboarding_step/create_a_fixed_asset_item/create_a_fixed_asset_item.json b/erpnext/assets/onboarding_step/create_a_fixed_asset_item/create_a_fixed_asset_item.json
index f5818c0..51702d9 100644
--- a/erpnext/assets/onboarding_step/create_a_fixed_asset_item/create_a_fixed_asset_item.json
+++ b/erpnext/assets/onboarding_step/create_a_fixed_asset_item/create_a_fixed_asset_item.json
@@ -6,11 +6,14 @@
"idx": 0,
"is_complete": 0,
"is_mandatory": 0,
+ "is_single": 0,
"is_skipped": 0,
"modified": "2020-05-08 13:20:00.259985",
"modified_by": "Administrator",
"name": "Create a Fixed Asset Item",
"owner": "Administrator",
"reference_document": "Item",
- "title": "Create a Fixed Asset Item"
+ "show_full_form": 0,
+ "title": "Create a Fixed Asset Item",
+ "validate_action": 0
}
\ No newline at end of file
diff --git a/erpnext/assets/onboarding_step/create_an_asset/create_an_asset.json b/erpnext/assets/onboarding_step/create_an_asset/create_an_asset.json
index 5488b1d..b4f8a05 100644
--- a/erpnext/assets/onboarding_step/create_an_asset/create_an_asset.json
+++ b/erpnext/assets/onboarding_step/create_an_asset/create_an_asset.json
@@ -6,11 +6,14 @@
"idx": 0,
"is_complete": 0,
"is_mandatory": 0,
+ "is_single": 0,
"is_skipped": 0,
"modified": "2020-05-08 13:21:53.332538",
"modified_by": "Administrator",
"name": "Create an Asset",
"owner": "Administrator",
"reference_document": "Asset",
- "title": "Create an Asset"
+ "show_full_form": 0,
+ "title": "Create an Asset",
+ "validate_action": 0
}
\ No newline at end of file
diff --git a/erpnext/assets/onboarding_step/create_an_asset_category/create_an_asset_category.json b/erpnext/assets/onboarding_step/create_an_asset_category/create_an_asset_category.json
index 3bf54af..ffdb954 100644
--- a/erpnext/assets/onboarding_step/create_an_asset_category/create_an_asset_category.json
+++ b/erpnext/assets/onboarding_step/create_an_asset_category/create_an_asset_category.json
@@ -1,16 +1,19 @@
{
- "action": "Create Entry",
- "creation": "2020-05-08 13:21:53.332538",
- "docstatus": 0,
- "doctype": "Onboarding Step",
- "idx": 0,
- "is_complete": 0,
- "is_mandatory": 0,
- "is_skipped": 0,
- "modified": "2020-05-08 13:21:53.332538",
- "modified_by": "Administrator",
- "name": "Create an Asset Category",
- "owner": "Administrator",
- "reference_document": "Asset Category",
- "title": "Create an Asset Category"
- }
\ No newline at end of file
+ "action": "Create Entry",
+ "creation": "2020-05-08 13:21:53.332538",
+ "docstatus": 0,
+ "doctype": "Onboarding Step",
+ "idx": 0,
+ "is_complete": 0,
+ "is_mandatory": 0,
+ "is_single": 0,
+ "is_skipped": 0,
+ "modified": "2020-05-08 13:21:53.332538",
+ "modified_by": "Administrator",
+ "name": "Create an Asset Category",
+ "owner": "Administrator",
+ "reference_document": "Asset Category",
+ "show_full_form": 0,
+ "title": "Create an Asset Category",
+ "validate_action": 0
+}
\ No newline at end of file
diff --git a/erpnext/assets/onboarding_step/introduction_to_assets/introduction_to_assets.json b/erpnext/assets/onboarding_step/introduction_to_assets/introduction_to_assets.json
index d48dd1c..d89da27 100644
--- a/erpnext/assets/onboarding_step/introduction_to_assets/introduction_to_assets.json
+++ b/erpnext/assets/onboarding_step/introduction_to_assets/introduction_to_assets.json
@@ -6,11 +6,14 @@
"idx": 0,
"is_complete": 0,
"is_mandatory": 0,
+ "is_single": 0,
"is_skipped": 0,
"modified": "2020-05-08 16:06:16.625646",
"modified_by": "Administrator",
"name": "Introduction to Assets",
"owner": "Administrator",
+ "show_full_form": 0,
"title": "Introduction to Assets",
+ "validate_action": 0,
"video_url": "https://www.youtube.com/watch?v=I-K8pLRmvSo"
}
\ No newline at end of file
diff --git a/erpnext/assets/onboarding_step/purchase_an_asset_item/purchase_an_asset_item.json b/erpnext/assets/onboarding_step/purchase_an_asset_item/purchase_an_asset_item.json
index 732ff7f..ce3185e 100644
--- a/erpnext/assets/onboarding_step/purchase_an_asset_item/purchase_an_asset_item.json
+++ b/erpnext/assets/onboarding_step/purchase_an_asset_item/purchase_an_asset_item.json
@@ -6,11 +6,14 @@
"idx": 0,
"is_complete": 0,
"is_mandatory": 0,
+ "is_single": 0,
"is_skipped": 0,
"modified": "2020-05-08 13:21:28.208059",
"modified_by": "Administrator",
"name": "Purchase an Asset Item",
"owner": "Administrator",
"reference_document": "Purchase Receipt",
- "title": "Purchase an Asset Item"
+ "show_full_form": 0,
+ "title": "Purchase an Asset Item",
+ "validate_action": 0
}
\ No newline at end of file
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index 4a8146a..84e3a31 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -123,14 +123,14 @@
}
if(doc.status != "Closed") {
if (doc.status != "On Hold") {
- if(flt(doc.per_received, 2) < 100 && allow_receipt) {
+ if(flt(doc.per_received) < 100 && allow_receipt) {
cur_frm.add_custom_button(__('Receipt'), this.make_purchase_receipt, __('Create'));
if(doc.is_subcontracted==="Yes" && me.has_unsupplied_items()) {
cur_frm.add_custom_button(__('Material to Supplier'),
function() { me.make_stock_entry(); }, __("Transfer"));
}
}
- if(flt(doc.per_billed, 2) < 100)
+ if(flt(doc.per_billed) < 100)
cur_frm.add_custom_button(__('Invoice'),
this.make_purchase_invoice, __('Create'));
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
index 56af4d9..4b85230 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
@@ -206,6 +206,7 @@
})
return list_context
+@frappe.whitelist()
def get_supplier_contacts(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""select `tabContact`.name from `tabContact`, `tabDynamic Link`
where `tabDynamic Link`.link_doctype = 'Supplier' and (`tabDynamic Link`.link_name=%(name)s
diff --git a/erpnext/buying/module_onboarding/buying/buying.json b/erpnext/buying/module_onboarding/buying/buying.json
index 6e4bbc9..887f85b 100644
--- a/erpnext/buying/module_onboarding/buying/buying.json
+++ b/erpnext/buying/module_onboarding/buying/buying.json
@@ -19,7 +19,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/buying",
"idx": 0,
"is_complete": 0,
- "modified": "2020-06-01 12:55:09.234944",
+ "modified": "2020-07-08 14:05:28.273641",
"modified_by": "Administrator",
"module": "Buying",
"name": "Buying",
@@ -47,8 +47,7 @@
"step": "Buying Settings"
}
],
- "subtitle": "Products, Purchases, Analysis and more.",
+ "subtitle": "Products, Purchases, Analysis, and more.",
"success_message": "The Buying Module is all set up!",
- "title": "Let's Set Up the Buying Module.",
- "user_can_dismiss": 1
+ "title": "Let's Set Up the Buying Module."
}
\ No newline at end of file
diff --git a/erpnext/buying/onboarding_step/buying_settings/buying_settings.json b/erpnext/buying/onboarding_step/buying_settings/buying_settings.json
index 6d765af..a788ccd 100644
--- a/erpnext/buying/onboarding_step/buying_settings/buying_settings.json
+++ b/erpnext/buying/onboarding_step/buying_settings/buying_settings.json
@@ -1,19 +1,19 @@
{
- "action": "Show Form Tour",
+ "action": "Update Settings",
"creation": "2020-05-06 15:53:44.667414",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
- "is_mandatory": 1,
- "is_single": 1,
+ "is_mandatory": 0,
+ "is_single": 0,
"is_skipped": 0,
- "modified": "2020-06-01 12:52:57.668870",
+ "modified": "2020-05-12 18:30:06.323797",
"modified_by": "Administrator",
"name": "Buying Settings",
"owner": "Administrator",
"reference_document": "Buying Settings",
"show_full_form": 0,
"title": "Configure Buying Settings.",
- "validate_action": 0
+ "validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/buying/onboarding_step/setup_your_warehouse/setup_your_warehouse.json b/erpnext/buying/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
index 557c905..9457dee 100644
--- a/erpnext/buying/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
+++ b/erpnext/buying/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
@@ -8,13 +8,13 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-19 18:54:19.383397",
+ "modified": "2020-07-04 12:33:16.970031",
"modified_by": "Administrator",
"name": "Setup your Warehouse",
"owner": "Administrator",
"path": "Tree/Warehouse",
"reference_document": "Warehouse",
"show_full_form": 0,
- "title": "Setup your Warehouse",
+ "title": "Set up your Warehouse",
"validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index f6a8d27..31e3498 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -10,7 +10,8 @@
from erpnext.stock.get_item_details import _get_item_tax_template
from frappe.utils import unique
- # searches for active employees
+# searches for active employees
+@frappe.whitelist()
def employee_query(doctype, txt, searchfield, start, page_len, filters):
conditions = []
fields = get_fields("Employee", ["name", "employee_name"])
@@ -40,6 +41,7 @@
# searches for leads which are not converted
+@frappe.whitelist()
def lead_query(doctype, txt, searchfield, start, page_len, filters):
fields = get_fields("Lead", ["name", "lead_name", "company_name"])
@@ -69,6 +71,7 @@
# searches for customer
+@frappe.whitelist()
def customer_query(doctype, txt, searchfield, start, page_len, filters):
conditions = []
cust_master_name = frappe.defaults.get_user_default("cust_master_name")
@@ -106,6 +109,7 @@
# searches for supplier
+@frappe.whitelist()
def supplier_query(doctype, txt, searchfield, start, page_len, filters):
supp_master_name = frappe.defaults.get_user_default("supp_master_name")
if supp_master_name == "Supplier Name":
@@ -137,6 +141,7 @@
})
+@frappe.whitelist()
def tax_account_query(doctype, txt, searchfield, start, page_len, filters):
company_currency = erpnext.get_company_currency(filters.get('company'))
@@ -162,6 +167,7 @@
return tax_accounts
+@frappe.whitelist()
def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=False):
conditions = []
@@ -224,6 +230,7 @@
}, as_dict=as_dict)
+@frappe.whitelist()
def bom(doctype, txt, searchfield, start, page_len, filters):
conditions = []
fields = get_fields("BOM", ["name", "item"])
@@ -250,6 +257,7 @@
})
+@frappe.whitelist()
def get_project_name(doctype, txt, searchfield, start, page_len, filters):
cond = ''
if filters.get('customer'):
@@ -276,6 +284,7 @@
})
+@frappe.whitelist()
def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, filters, as_dict):
fields = get_fields("Delivery Note", ["name", "customer", "posting_date"])
@@ -305,6 +314,7 @@
}, {"txt": ("%%%s%%" % txt)}, as_dict=as_dict)
+@frappe.whitelist()
def get_batch_no(doctype, txt, searchfield, start, page_len, filters):
cond = ""
if filters.get("posting_date"):
@@ -362,6 +372,7 @@
limit %(start)s, %(page_len)s""".format(cond, match_conditions=get_match_cond(doctype)), args)
+@frappe.whitelist()
def get_account_list(doctype, txt, searchfield, start, page_len, filters):
filter_list = []
@@ -385,6 +396,7 @@
limit_start=start, limit_page_length=page_len, as_list=True)
+@frappe.whitelist()
def get_blanket_orders(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""select distinct bo.name, bo.blanket_order_type, bo.to_date
from `tabBlanket Order` bo, `tabBlanket Order Item` boi
@@ -570,7 +582,8 @@
args = {
'item_code': filters.get('item_code'),
'posting_date': filters.get('valid_from'),
- 'tax_category': filters.get('tax_category')
+ 'tax_category': filters.get('tax_category'),
+ 'company': filters.get('company')
}
taxes = _get_item_tax_template(args, taxes, for_validate=True)
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 4e568e2..a9eb996 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -53,7 +53,8 @@
'tax_category': self.doc.get('tax_category'),
'posting_date': self.doc.get('posting_date'),
'bill_date': self.doc.get('bill_date'),
- 'transaction_date': self.doc.get('transaction_date')
+ 'transaction_date': self.doc.get('transaction_date'),
+ 'company': self.doc.get('company')
}
item_group = item_doc.item_group
diff --git a/erpnext/crm/dashboard_fixtures.py b/erpnext/crm/dashboard_fixtures.py
index 0535cbb..901c058 100644
--- a/erpnext/crm/dashboard_fixtures.py
+++ b/erpnext/crm/dashboard_fixtures.py
@@ -172,7 +172,9 @@
"doctype": "Number Card",
"document_type": "Lead",
"name": "New Lead (Last 1 Month)",
- "filters_json": json.dumps([["Lead","creation","Previous","1 month",False]]),
+ "filters_json": json.dumps([
+ ["Lead", "creation", "Timespan", "last month"]
+ ]),
"function": "Count",
"is_public": 1,
"label": _("New Lead (Last 1 Month)"),
@@ -183,7 +185,9 @@
"doctype": "Number Card",
"document_type": "Opportunity",
"name": "New Opportunity (Last 1 Month)",
- "filters_json": json.dumps([["Opportunity","creation","Previous","1 month",False]]),
+ "filters_json": json.dumps([
+ ["Opportunity", "creation", "Timespan", "last month"]
+ ]),
"function": "Count",
"is_public": 1,
"label": _("New Opportunity (Last 1 Month)"),
@@ -194,7 +198,10 @@
"doctype": "Number Card",
"document_type": "Opportunity",
"name": "Won Opportunity (Last 1 Month)",
- "filters_json": json.dumps([["Opportunity","creation","Previous","1 month",False]]),
+ "filters_json": json.dumps([
+ ["Opportunity", "status", "=", "Converted",False],
+ ["Opportunity", "creation", "Timespan", "last month"]
+ ]),
"function": "Count",
"is_public": 1,
"label": _("Won Opportunity (Last 1 Month)"),
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index ec7d14d..315d298 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -114,10 +114,12 @@
def set_lead_name(self):
if not self.lead_name:
# Check for leads being created through data import
- if not self.company_name and not self.flags.ignore_mandatory:
+ if not self.company_name and not self.email_id and not self.flags.ignore_mandatory:
frappe.throw(_("A Lead requires either a person's name or an organization's name"))
-
- self.lead_name = self.company_name
+ elif self.company_name:
+ self.lead_name = self.company_name
+ else:
+ self.lead_name = self.email_id.split("@")[0]
def set_title(self):
if self.organization_lead:
diff --git a/erpnext/crm/module_onboarding/crm/crm.json b/erpnext/crm/module_onboarding/crm/crm.json
index 44d672a..8315218 100644
--- a/erpnext/crm/module_onboarding/crm/crm.json
+++ b/erpnext/crm/module_onboarding/crm/crm.json
@@ -16,7 +16,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/CRM",
"idx": 0,
"is_complete": 0,
- "modified": "2020-05-28 21:07:41.278784",
+ "modified": "2020-07-08 14:05:42.644448",
"modified_by": "Administrator",
"module": "CRM",
"name": "CRM",
@@ -35,8 +35,7 @@
"step": "Create and Send Quotation"
}
],
- "subtitle": "Lead, Opportunity, Customer and more.",
- "success_message": "CRM Module is all Set Up!",
- "title": "Let's Set Up Your CRM.",
- "user_can_dismiss": 1
+ "subtitle": "Lead, Opportunity, Customer, and more.",
+ "success_message": "The CRM Module is all set up!",
+ "title": "Let's Set Up Your CRM."
}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.json b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.json
index eaf8d80..b1d62da 100644
--- a/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.json
+++ b/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.json
@@ -11,6 +11,7 @@
"title",
"appointment",
"procedure_template",
+ "medical_code",
"column_break_30",
"company",
"invoiced",
@@ -290,11 +291,19 @@
"no_copy": 1,
"print_hide": 1,
"read_only": 1
+ },
+ {
+ "fetch_from": "procedure_template.medical_code",
+ "fieldname": "medical_code",
+ "fieldtype": "Link",
+ "label": "Medical Code",
+ "options": "Medical Code",
+ "read_only": 1
}
],
"is_submittable": 1,
"links": [],
- "modified": "2020-04-27 21:36:23.796924",
+ "modified": "2020-06-29 14:28:11.779815",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Clinical Procedure",
diff --git a/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.js b/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.js
index 16d4540..1ef110d 100644
--- a/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.js
+++ b/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.js
@@ -30,6 +30,16 @@
mark_change_in_item(frm);
},
+ medical_code: function(frm) {
+ frm.set_query("medical_code", function() {
+ return {
+ filters: {
+ medical_code_standard: frm.doc.medical_code_standard
+ }
+ };
+ });
+ },
+
refresh: function(frm) {
frm.fields_dict['items'].grid.set_column_disp('barcode', false);
frm.fields_dict['items'].grid.set_column_disp('batch_no', false);
diff --git a/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json b/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json
index 9cfd682..17ac7eb 100644
--- a/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json
+++ b/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.json
@@ -21,6 +21,9 @@
"is_billable",
"rate",
"medical_department",
+ "medical_coding_section",
+ "medical_code_standard",
+ "medical_code",
"consumables",
"consume_stock",
"items",
@@ -46,7 +49,6 @@
"fieldname": "item_code",
"fieldtype": "Data",
"label": "Item Code",
- "options": "Item",
"read_only_depends_on": "eval: !doc.__islocal ",
"reqd": 1
},
@@ -173,10 +175,29 @@
"no_copy": 1,
"options": "Item",
"read_only": 1
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "medical_coding_section",
+ "fieldtype": "Section Break",
+ "label": "Medical Coding"
+ },
+ {
+ "fieldname": "medical_code_standard",
+ "fieldtype": "Link",
+ "label": "Medical Code Standard",
+ "options": "Medical Code Standard"
+ },
+ {
+ "depends_on": "medical_code_standard",
+ "fieldname": "medical_code",
+ "fieldtype": "Link",
+ "label": "Medical Code",
+ "options": "Medical Code"
}
],
"links": [],
- "modified": "2020-02-28 14:16:13.184981",
+ "modified": "2020-06-29 14:12:27.158130",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Clinical Procedure Template",
diff --git a/erpnext/healthcare/doctype/lab_test/lab_test.json b/erpnext/healthcare/doctype/lab_test/lab_test.json
index 17dc1ed..88eeb46a 100644
--- a/erpnext/healthcare/doctype/lab_test/lab_test.json
+++ b/erpnext/healthcare/doctype/lab_test/lab_test.json
@@ -33,9 +33,10 @@
"user",
"invoiced",
"sb_first",
+ "template",
"lab_test_name",
"column_break_26",
- "template",
+ "medical_code",
"lab_test_group",
"sb_normal",
"normal_test_items",
@@ -424,11 +425,19 @@
"print_hide": 1,
"read_only": 1,
"report_hide": 1
+ },
+ {
+ "fetch_from": "template.medical_code",
+ "fieldname": "medical_code",
+ "fieldtype": "Link",
+ "label": "Medical Code",
+ "options": "Medical Code",
+ "read_only": 1
}
],
"is_submittable": 1,
"links": [],
- "modified": "2020-04-04 19:16:29.131168",
+ "modified": "2020-06-29 14:24:26.509721",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Lab Test",
diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js
index 5c9bf49..c3eedbb 100644
--- a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js
+++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js
@@ -8,7 +8,7 @@
if (!frm.doc.lab_test_description)
frm.set_value("lab_test_description", frm.doc.lab_test_name);
},
- refresh : function(frm) {
+ refresh: function(frm) {
// Restrict Special, Grouped type templates in Child TestGroups
frm.set_query("lab_test_template", "lab_test_groups", function() {
return {
@@ -17,6 +17,15 @@
}
};
});
+ },
+ medical_code: function(frm) {
+ frm.set_query("medical_code", function() {
+ return {
+ filters: {
+ medical_code_standard: frm.doc.medical_code_standard
+ }
+ };
+ });
}
});
diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json
index a606bc4..ebd2ec0 100644
--- a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json
+++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json
@@ -19,6 +19,9 @@
"disabled",
"is_billable",
"lab_test_rate",
+ "medical_coding_section",
+ "medical_code_standard",
+ "medical_code",
"section_break_normal",
"lab_test_uom",
"lab_test_normal_range",
@@ -237,10 +240,29 @@
"fieldtype": "Text",
"ignore_xss_filter": 1,
"label": "Collection Details"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "medical_coding_section",
+ "fieldtype": "Section Break",
+ "label": "Medical Coding"
+ },
+ {
+ "depends_on": "medical_code_standard",
+ "fieldname": "medical_code",
+ "fieldtype": "Link",
+ "label": "Medical Code",
+ "options": "Medical Code"
+ },
+ {
+ "fieldname": "medical_code_standard",
+ "fieldtype": "Link",
+ "label": "Medical Code Standard",
+ "options": "Medical Code Standard"
}
],
"links": [],
- "modified": "2020-03-25 16:53:01.740103",
+ "modified": "2020-06-29 14:07:20.772219",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Lab Test Template",
diff --git a/erpnext/healthcare/doctype/medical_code/medical_code.json b/erpnext/healthcare/doctype/medical_code/medical_code.json
index a2e7247..5d69830 100644
--- a/erpnext/healthcare/doctype/medical_code/medical_code.json
+++ b/erpnext/healthcare/doctype/medical_code/medical_code.json
@@ -1,156 +1,69 @@
{
- "allow_copy": 1,
- "allow_guest_to_view": 0,
- "allow_import": 1,
- "allow_rename": 1,
- "beta": 1,
- "creation": "2017-06-21 13:02:56.122897",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
+ "actions": [],
+ "allow_copy": 1,
+ "allow_import": 1,
+ "allow_rename": 1,
+ "beta": 1,
+ "creation": "2017-06-21 13:02:56.122897",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "medical_code_standard",
+ "code",
+ "description"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "medical_code_standard",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 1,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Medical Code Standard",
- "length": 0,
- "no_copy": 0,
- "options": "Medical Code Standard",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "medical_code_standard",
+ "fieldtype": "Link",
+ "ignore_user_permissions": 1,
+ "label": "Medical Code Standard",
+ "options": "Medical Code Standard",
+ "reqd": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "code",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 1,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Code",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "code",
+ "fieldtype": "Data",
+ "ignore_xss_filter": 1,
+ "in_list_view": 1,
+ "label": "Code",
+ "reqd": 1,
+ "unique": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 1,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "description",
- "fieldtype": "Small Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 1,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Description",
- "length": 0,
- "no_copy": 0,
- "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,
- "unique": 0
+ "bold": 1,
+ "fieldname": "description",
+ "fieldtype": "Small Text",
+ "ignore_xss_filter": 1,
+ "in_list_view": 1,
+ "label": "Description"
}
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2017-10-04 17:08:11.053418",
- "modified_by": "Administrator",
- "module": "Healthcare",
- "name": "Medical Code",
- "name_case": "",
- "owner": "Administrator",
+ ],
+ "links": [],
+ "modified": "2020-06-29 14:02:30.980032",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Medical Code",
+ "owner": "Administrator",
"permissions": [
{
- "amend": 0,
- "apply_user_permissions": 0,
- "cancel": 0,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Physician",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Physician",
+ "share": 1,
"write": 1
}
- ],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "restrict_to_domain": "Healthcare",
- "search_fields": "code, description",
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "",
- "track_changes": 1,
- "track_seen": 0
+ ],
+ "quick_entry": 1,
+ "restrict_to_domain": "Healthcare",
+ "search_fields": "code, description",
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/patient_encounter/patient_encounter.py b/erpnext/healthcare/doctype/patient_encounter/patient_encounter.py
index 56401a3..262fc46 100644
--- a/erpnext/healthcare/doctype/patient_encounter/patient_encounter.py
+++ b/erpnext/healthcare/doctype/patient_encounter/patient_encounter.py
@@ -73,7 +73,7 @@
insert_encounter_to_medical_record(encounter)
def delete_medical_record(encounter):
- frappe.db.delete_doc_if_exists('Patient Medical Record', 'reference_name', encounter.name)
+ frappe.delete_doc_if_exists('Patient Medical Record', 'reference_name', encounter.name)
def set_subject_field(encounter):
subject = frappe.bold(_('Healthcare Practitioner: ')) + encounter.practitioner + '<br>'
diff --git a/erpnext/healthcare/doctype/therapy_session/therapy_session.json b/erpnext/healthcare/doctype/therapy_session/therapy_session.json
index 00d74a0..c75d934 100644
--- a/erpnext/healthcare/doctype/therapy_session/therapy_session.json
+++ b/erpnext/healthcare/doctype/therapy_session/therapy_session.json
@@ -19,6 +19,7 @@
"practitioner",
"department",
"details_section",
+ "medical_code",
"duration",
"rate",
"location",
@@ -206,11 +207,19 @@
"fieldtype": "Data",
"label": "Patient Name",
"read_only": 1
+ },
+ {
+ "fetch_from": "therapy_type.medical_code",
+ "fieldname": "medical_code",
+ "fieldtype": "Link",
+ "label": "Medical Code",
+ "options": "Medical Code",
+ "read_only": 1
}
],
"is_submittable": 1,
"links": [],
- "modified": "2020-04-29 16:49:16.286006",
+ "modified": "2020-06-29 14:33:34.836594",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Therapy Session",
diff --git a/erpnext/healthcare/doctype/therapy_type/therapy_type.js b/erpnext/healthcare/doctype/therapy_type/therapy_type.js
index 7a61b0d..6e155dc 100644
--- a/erpnext/healthcare/doctype/therapy_type/therapy_type.js
+++ b/erpnext/healthcare/doctype/therapy_type/therapy_type.js
@@ -45,6 +45,16 @@
medical_department: function(frm) {
mark_change_in_item(frm);
+ },
+
+ medical_code: function(frm) {
+ frm.set_query("medical_code", function() {
+ return {
+ filters: {
+ medical_code_standard: frm.doc.medical_code_standard
+ }
+ };
+ });
}
});
diff --git a/erpnext/healthcare/doctype/therapy_type/therapy_type.json b/erpnext/healthcare/doctype/therapy_type/therapy_type.json
index 0b3c3ca..f365b1d 100644
--- a/erpnext/healthcare/doctype/therapy_type/therapy_type.json
+++ b/erpnext/healthcare/doctype/therapy_type/therapy_type.json
@@ -22,6 +22,9 @@
"item_group",
"column_break_12",
"description",
+ "medical_coding_section",
+ "medical_code_standard",
+ "medical_code",
"section_break_18",
"therapy_for",
"add_exercises",
@@ -160,10 +163,30 @@
{
"fieldname": "section_break_18",
"fieldtype": "Section Break"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "medical_coding_section",
+ "fieldtype": "Section Break",
+ "label": "Medical Coding",
+ "options": "Medical Coding"
+ },
+ {
+ "fieldname": "medical_code_standard",
+ "fieldtype": "Link",
+ "label": "Medical Code Standard",
+ "options": "Medical Code Standard"
+ },
+ {
+ "depends_on": "medical_code_standard",
+ "fieldname": "medical_code",
+ "fieldtype": "Link",
+ "label": "Medical Code",
+ "options": "Medical Code"
}
],
"links": [],
- "modified": "2020-04-21 13:09:04.006289",
+ "modified": "2020-06-29 14:18:50.669951",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Therapy Type",
diff --git a/erpnext/healthcare/module_onboarding/healthcare/healthcare.json b/erpnext/healthcare/module_onboarding/healthcare/healthcare.json
index 3e50726..56c3c13 100644
--- a/erpnext/healthcare/module_onboarding/healthcare/healthcare.json
+++ b/erpnext/healthcare/module_onboarding/healthcare/healthcare.json
@@ -10,7 +10,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/healthcare",
"idx": 0,
"is_complete": 0,
- "modified": "2020-05-26 23:16:37.603361",
+ "modified": "2020-07-08 14:06:19.512946",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Healthcare",
@@ -35,8 +35,7 @@
"step": "Explore Clinical Procedure Templates"
}
],
- "subtitle": "Patients, Practitioner Schedules, Settings and more.",
- "success_message": "Yayy! The Healthcare Module is all set up!",
- "title": "Let's Setup the Healthcare Module",
- "user_can_dismiss": 1
+ "subtitle": "Patients, Practitioner Schedules, Settings, and more.",
+ "success_message": "The Healthcare Module is all set up!",
+ "title": "Let's Set Up the Healthcare Module."
}
\ No newline at end of file
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 835d92e..70217dc 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -13,7 +13,7 @@
app_logo_url = '/assets/erpnext/images/erp-icon.svg'
-develop_version = '12.x.x-develop'
+develop_version = '13.x.x-develop'
app_include_js = "assets/js/erpnext.min.js"
app_include_css = "assets/css/erpnext.css"
diff --git a/erpnext/hr/dashboard_fixtures.py b/erpnext/hr/dashboard_fixtures.py
index 6d8091b..1e9b4f3 100644
--- a/erpnext/hr/dashboard_fixtures.py
+++ b/erpnext/hr/dashboard_fixtures.py
@@ -123,7 +123,7 @@
number_cards.append(
get_number_cards_doc("Employee", "New Joinees (Last year)", filters_json = json.dumps([
- ["Employee","date_of_joining","Previous","1 year"],
+ ["Employee","date_of_joining","Timespan","last year"],
["Employee","status","=","Active"]
])
)
@@ -131,7 +131,7 @@
number_cards.append(
get_number_cards_doc("Employee", "Employees Left (Last year)", filters_json = json.dumps([
- ["Employee", "relieving_date", "Previous", "1 year"],
+ ["Employee", "relieving_date", "Timespan", "last year"],
["Employee", "status", "=", "Left"]
])
)
@@ -139,7 +139,7 @@
number_cards.append(
get_number_cards_doc("Job Applicant", "Total Applicants (Last month)", filters_json = json.dumps([
- ["Job Applicant", "creation", "Previous", "1 month"]
+ ["Job Applicant", "creation", "Timespan", "last month"]
])
)
)
diff --git a/erpnext/hr/doctype/employee/employee.json b/erpnext/hr/doctype/employee/employee.json
index 7dacacf1..f2afe06 100644
--- a/erpnext/hr/doctype/employee/employee.json
+++ b/erpnext/hr/doctype/employee/employee.json
@@ -410,6 +410,8 @@
"options": "Branch"
},
{
+ "fetch_from": "grade.default_leave_policy",
+ "fetch_if_empty": 1,
"fieldname": "leave_policy",
"fieldtype": "Link",
"label": "Leave Policy",
@@ -804,16 +806,14 @@
"fieldname": "expense_approver",
"fieldtype": "Link",
"label": "Expense Approver",
- "options": "User",
- "show_days": 1,
- "show_seconds": 1
+ "options": "User"
}
],
"icon": "fa fa-user",
"idx": 24,
"image_field": "image",
"links": [],
- "modified": "2020-06-18 18:01:27.223535",
+ "modified": "2020-07-03 21:28:04.109189",
"modified_by": "Administrator",
"module": "HR",
"name": "Employee",
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index 4d49503..7338cbb 100755
--- a/erpnext/hr/doctype/employee/employee.py
+++ b/erpnext/hr/doctype/employee/employee.py
@@ -413,7 +413,11 @@
@frappe.whitelist()
def get_children(doctype, parent=None, company=None, is_root=False, is_tree=False):
- filters = [['company', '=', company]]
+
+ filters = []
+ if company and company != 'All Companies':
+ filters = [['company', '=', company]]
+
fields = ['name as value', 'employee_name as title']
if is_root:
diff --git a/erpnext/hr/doctype/employee/employee_tree.js b/erpnext/hr/doctype/employee/employee_tree.js
index 0a2da63..9ab091a 100644
--- a/erpnext/hr/doctype/employee/employee_tree.js
+++ b/erpnext/hr/doctype/employee/employee_tree.js
@@ -4,7 +4,7 @@
{
fieldname: "company",
fieldtype:"Select",
- options: erpnext.utils.get_tree_options("company"),
+ options: ['All Companies'].concat(erpnext.utils.get_tree_options("company")),
label: __("Company"),
default: erpnext.utils.get_tree_default("company")
}
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
index 8f8dafd..221300b 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.js
@@ -113,6 +113,14 @@
cur_frm.cscript.calculate_total(doc,cdt,cdn);
};
+cur_frm.fields_dict['cost_center'].get_query = function(doc) {
+ return {
+ filters: {
+ "company": doc.company
+ }
+ }
+};
+
erpnext.expense_claim = {
set_title: function(frm) {
if (!frm.doc.task) {
diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js
index fb1f2c0..4001a45 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.js
+++ b/erpnext/hr/doctype/leave_application/leave_application.js
@@ -40,6 +40,8 @@
validate: function(frm) {
if (frm.doc.from_date == frm.doc.to_date && frm.doc.half_day == 1){
frm.doc.half_day_date = frm.doc.from_date;
+ }else if (frm.doc.half_day == 0){
+ frm.doc.half_day_date = "";
}
frm.toggle_reqd("half_day_date", frm.doc.half_day == 1);
},
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 0423824..3f25f58 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -293,6 +293,8 @@
def set_half_day_date(self):
if self.from_date == self.to_date and self.half_day == 1:
self.half_day_date = self.from_date
+ elif self.half_day == 0:
+ self.half_day_date = None
def notify_employee(self):
employee = frappe.get_doc("Employee", self.employee)
diff --git a/erpnext/hr/module_onboarding/human_resource/human_resource.json b/erpnext/hr/module_onboarding/human_resource/human_resource.json
index e64582b..518c002 100644
--- a/erpnext/hr/module_onboarding/human_resource/human_resource.json
+++ b/erpnext/hr/module_onboarding/human_resource/human_resource.json
@@ -13,7 +13,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/human-resources",
"idx": 0,
"is_complete": 0,
- "modified": "2020-05-20 11:20:07.992597",
+ "modified": "2020-07-08 14:05:47.018799",
"modified_by": "Administrator",
"module": "HR",
"name": "Human Resource",
@@ -44,8 +44,7 @@
"step": "HR Settings"
}
],
- "subtitle": "Employee, Leaves and more.",
- "success_message": "The HR Module is all set up!",
- "title": "Let's Setup the Human Resource Module. ",
- "user_can_dismiss": 0
+ "subtitle": "Employee, Leaves, and more.",
+ "success_message": "The Human Resource Module is all set up!",
+ "title": "Let's Set Up the Human Resource Module. "
}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan/loan.js b/erpnext/loan_management/doctype/loan/loan.js
index 9cd8b2e..ffef60b 100644
--- a/erpnext/loan_management/doctype/loan/loan.js
+++ b/erpnext/loan_management/doctype/loan/loan.js
@@ -45,15 +45,6 @@
});
})
- frm.set_query('loan_security_pledge', function(doc, cdt, cdn) {
- return {
- filters: {
- applicant: frm.doc.applicant,
- docstatus: 1,
- loan_application: frm.doc.loan_application || ''
- }
- };
- });
},
refresh: function (frm) {
@@ -86,9 +77,6 @@
frm.toggle_display("repayment_periods", s1 - frm.doc.is_term_loan);
},
- is_secured_loan: function(frm) {
- frm.toggle_reqd("loan_security_pledge", frm.doc.is_secured_loan);
- },
make_loan_disbursement: function (frm) {
frappe.call({
diff --git a/erpnext/loan_management/doctype/loan/loan.json b/erpnext/loan_management/doctype/loan/loan.json
index b04e822..192beee 100644
--- a/erpnext/loan_management/doctype/loan/loan.json
+++ b/erpnext/loan_management/doctype/loan/loan.json
@@ -25,15 +25,12 @@
"disbursement_date",
"disbursed_amount",
"column_break_11",
+ "maximum_loan_amount",
"is_term_loan",
"repayment_method",
"repayment_periods",
"monthly_repayment_amount",
"repayment_start_date",
- "loan_security_details_section",
- "loan_security_pledge",
- "column_break_25",
- "maximum_loan_value",
"account_info",
"mode_of_payment",
"payment_account",
@@ -292,13 +289,8 @@
"default": "0",
"fieldname": "is_secured_loan",
"fieldtype": "Check",
- "label": "Is Secured Loan"
- },
- {
- "depends_on": "is_secured_loan",
- "fieldname": "loan_security_details_section",
- "fieldtype": "Section Break",
- "label": "Loan Security Details"
+ "label": "Is Secured Loan",
+ "read_only": 1
},
{
"default": "0",
@@ -325,12 +317,6 @@
"read_only": 1
},
{
- "fieldname": "loan_security_pledge",
- "fieldtype": "Link",
- "label": "Loan Security Pledge",
- "options": "Loan Security Pledge"
- },
- {
"fieldname": "disbursed_amount",
"fieldtype": "Currency",
"label": "Disbursed Amount",
@@ -338,21 +324,17 @@
"read_only": 1
},
{
- "fetch_from": "loan_security_pledge.maximum_loan_value",
- "fieldname": "maximum_loan_value",
+ "fetch_from": "loan_application.maximum_loan_amount",
+ "fieldname": "maximum_loan_amount",
"fieldtype": "Currency",
- "label": "Maximum Loan Value",
+ "label": "Maximum Loan Amount",
"options": "Company:company:default_currency",
"read_only": 1
- },
- {
- "fieldname": "column_break_25",
- "fieldtype": "Column Break"
}
],
"is_submittable": 1,
"links": [],
- "modified": "2020-04-13 13:16:10.192624",
+ "modified": "2020-07-02 20:46:40.128142",
"modified_by": "Administrator",
"module": "Loan Management",
"name": "Loan",
diff --git a/erpnext/loan_management/doctype/loan/loan.py b/erpnext/loan_management/doctype/loan/loan.py
index 4e805d4..e20b484 100644
--- a/erpnext/loan_management/doctype/loan/loan.py
+++ b/erpnext/loan_management/doctype/loan/loan.py
@@ -13,11 +13,9 @@
class Loan(AccountsController):
def validate(self):
self.set_loan_amount()
-
+ self.validate_loan_amount()
self.set_missing_fields()
self.validate_accounts()
- self.validate_loan_security_pledge()
- self.validate_loan_amount()
self.check_sanctioned_amount_limit()
self.validate_repay_from_salary()
@@ -56,21 +54,6 @@
if self.repayment_method == "Repay Over Number of Periods":
self.monthly_repayment_amount = get_monthly_repayment_amount(self.repayment_method, self.loan_amount, self.rate_of_interest, self.repayment_periods)
- def validate_loan_security_pledge(self):
-
- if self.is_secured_loan and not self.loan_security_pledge:
- frappe.throw(_("Loan Security Pledge is mandatory for secured loan"))
-
- if self.loan_security_pledge:
- loan_security_details = frappe.db.get_value("Loan Security Pledge", self.loan_security_pledge,
- ['loan', 'company'], as_dict=1)
-
- if loan_security_details.loan:
- frappe.throw(_("Loan Security Pledge already pledged against loan {0}").format(loan_security_details.loan))
-
- if loan_security_details.company != self.company:
- frappe.throw(_("Loan Security Pledge Company and Loan Company must be same"))
-
def check_sanctioned_amount_limit(self):
total_loan_amount = get_total_loan_amount(self.applicant_type, self.applicant, self.company)
sanctioned_amount_limit = get_sanctioned_amount_limit(self.applicant_type, self.applicant, self.company)
@@ -129,22 +112,29 @@
self.total_payment = self.loan_amount
def set_loan_amount(self):
+ if self.loan_application and not self.loan_amount:
+ self.loan_amount = frappe.db.get_value('Loan Application', self.loan_application, 'loan_amount')
- if not self.loan_amount and self.is_secured_loan and self.loan_security_pledge:
- self.loan_amount = self.maximum_loan_value
def validate_loan_amount(self):
- if self.is_secured_loan and self.loan_amount > self.maximum_loan_value:
- msg = _("Loan amount cannot be greater than {0}").format(self.maximum_loan_value)
+ if self.maximum_loan_amount and self.loan_amount > self.maximum_loan_amount:
+ msg = _("Loan amount cannot be greater than {0}").format(self.maximum_loan_amount)
frappe.throw(msg)
if not self.loan_amount:
frappe.throw(_("Loan amount is mandatory"))
def link_loan_security_pledge(self):
- frappe.db.sql("""UPDATE `tabLoan Security Pledge` SET
- loan = %s, status = 'Pledged', pledge_time = %s
- where name = %s """, (self.name, now_datetime(), self.loan_security_pledge))
+ if self.is_secured_loan:
+ loan_security_pledge = frappe.db.get_value('Loan Security Pledge', {'loan_application': self.loan_application},
+ 'name')
+
+ if loan_security_pledge:
+ frappe.db.set_value('Loan Security Pledge', loan_security_pledge, {
+ 'loan': self.name,
+ 'status': 'Pledged',
+ 'pledge_time': now_datetime()
+ })
def unlink_loan_security_pledge(self):
frappe.db.sql("""UPDATE `tabLoan Security Pledge` SET
diff --git a/erpnext/loan_management/doctype/loan/test_loan.py b/erpnext/loan_management/doctype/loan/test_loan.py
index 3f37a26..c65996e 100644
--- a/erpnext/loan_management/doctype/loan/test_loan.py
+++ b/erpnext/loan_management/doctype/loan/test_loan.py
@@ -16,6 +16,7 @@
from erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall import create_process_loan_security_shortfall
from erpnext.loan_management.doctype.loan.loan import create_loan_security_unpledge
from erpnext.loan_management.doctype.loan_security_unpledge.loan_security_unpledge import get_pledged_security_qty
+from erpnext.loan_management.doctype.loan_application.loan_application import create_pledge
class TestLoan(unittest.TestCase):
def setUp(self):
@@ -72,31 +73,31 @@
self.assertEquals(loan.total_payment, 302712)
def test_loan_with_security(self):
- pledges = []
- pledges.append({
+
+ pledge = [{
"loan_security": "Test Security 1",
"qty": 4000.00,
- "haircut": 50,
- "loan_security_price": 500.00
- })
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant2, pledges)
+ loan_application = create_loan_application('_Test Company', self.applicant2,
+ 'Stock Loan', pledge, "Repay Over Number of Periods", 12)
+ create_pledge(loan_application)
- loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_security_pledge.name)
-
+ loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods",
+ 12, loan_application)
self.assertEquals(loan.loan_amount, 1000000)
def test_loan_disbursement(self):
- pledges = []
- pledges.append({
+ pledge = [{
"loan_security": "Test Security 1",
- "qty": 4000.00,
- "haircut": 50
- })
+ "qty": 4000.00
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant2, pledges)
+ loan_application = create_loan_application('_Test Company', self.applicant2, 'Stock Loan', pledge, "Repay Over Number of Periods", 12)
- loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_security_pledge.name)
+ create_pledge(loan_application)
+
+ loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application)
self.assertEquals(loan.loan_amount, 1000000)
loan.submit()
@@ -121,18 +122,15 @@
self.assertTrue(gl_entries2)
def test_regular_loan_repayment(self):
- pledges = []
- pledges.append({
+ pledge = [{
"loan_security": "Test Security 1",
- "qty": 4000.00,
- "haircut": 50
- })
+ "qty": 4000.00
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant2, pledges)
+ loan_application = create_loan_application('_Test Company', self.applicant2, 'Demand Loan', pledge)
+ create_pledge(loan_application)
- loan = create_demand_loan(self.applicant2, "Demand Loan", loan_security_pledge.name,
- posting_date=get_first_day(nowdate()))
-
+ loan = create_demand_loan(self.applicant2, "Demand Loan", loan_application, posting_date=get_first_day(nowdate()))
loan.submit()
self.assertEquals(loan.loan_amount, 1000000)
@@ -166,16 +164,15 @@
penalty_amount - amounts[0], 2))
def test_loan_closure_repayment(self):
- pledges = []
- pledges.append({
+ pledge = [{
"loan_security": "Test Security 1",
- "qty": 4000.00,
- "haircut": 50
- })
+ "qty": 4000.00
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant2, pledges)
- loan = create_demand_loan(self.applicant2, "Demand Loan", loan_security_pledge.name,
- posting_date=get_first_day(nowdate()))
+ loan_application = create_loan_application('_Test Company', self.applicant2, 'Demand Loan', pledge)
+ create_pledge(loan_application)
+
+ loan = create_demand_loan(self.applicant2, "Demand Loan", loan_application, posting_date=get_first_day(nowdate()))
loan.submit()
self.assertEquals(loan.loan_amount, 1000000)
@@ -214,23 +211,21 @@
self.assertEquals(loan.status, "Loan Closure Requested")
def test_loan_repayment_for_term_loan(self):
- pledges = []
- pledges.append({
+ pledges = [{
"loan_security": "Test Security 2",
- "qty": 4000.00,
- "haircut": 50
- })
-
- pledges.append({
+ "qty": 4000.00
+ },
+ {
"loan_security": "Test Security 1",
- "qty": 2000.00,
- "haircut": 50
- })
+ "qty": 2000.00
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant2, pledges)
+ loan_application = create_loan_application('_Test Company', self.applicant2, 'Stock Loan', pledges,
+ "Repay Over Number of Periods", 12)
+ create_pledge(loan_application)
- loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12,
- loan_security_pledge.name, posting_date=add_months(nowdate(), -1))
+ loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application,
+ posting_date=add_months(nowdate(), -1))
loan.submit()
@@ -250,16 +245,18 @@
self.assertEquals(amounts[1], 78303.00)
def test_security_shortfall(self):
- pledges = []
- pledges.append({
+ pledges = [{
"loan_security": "Test Security 2",
"qty": 8000.00,
"haircut": 50,
- })
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant2, pledges)
+ loan_application = create_loan_application('_Test Company', self.applicant2,
+ 'Stock Loan', pledges, "Repay Over Number of Periods", 12)
- loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_security_pledge.name)
+ create_pledge(loan_application)
+
+ loan = create_loan_with_security(self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application)
loan.submit()
make_loan_disbursement_entry(loan.name, loan.loan_amount)
@@ -279,16 +276,15 @@
where loan_security='Test Security 2'""")
def test_loan_security_unpledge(self):
- pledges = []
- pledges.append({
+ pledge = [{
"loan_security": "Test Security 1",
- "qty": 4000.00,
- "haircut": 50
- })
+ "qty": 4000.00
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant2, pledges)
- loan = create_demand_loan(self.applicant2, "Demand Loan", loan_security_pledge.name,
- posting_date=get_first_day(nowdate()))
+ loan_application = create_loan_application('_Test Company', self.applicant2, 'Demand Loan', pledge)
+ create_pledge(loan_application)
+
+ loan = create_demand_loan(self.applicant2, "Demand Loan", loan_application, posting_date=get_first_day(nowdate()))
loan.submit()
self.assertEquals(loan.loan_amount, 1000000)
@@ -446,12 +442,13 @@
"haircut": 50.00,
}).insert(ignore_permissions=True)
-def create_loan_security_pledge(applicant, pledges):
+def create_loan_security_pledge(applicant, pledges, loan_application):
lsp = frappe.new_doc("Loan Security Pledge")
lsp.applicant_type = 'Customer'
lsp.applicant = applicant
lsp.company = "_Test Company"
+ lsp.loan_application = loan_application
for pledge in pledges:
lsp.append('securities', {
@@ -510,6 +507,31 @@
return lr
+def create_loan_application(company, applicant, loan_type, proposed_pledges, repayment_method=None,
+ repayment_periods=None, posting_date=None):
+ loan_application = frappe.new_doc('Loan Application')
+ loan_application.applicant_type = 'Customer'
+ loan_application.company = company
+ loan_application.applicant = applicant
+ loan_application.loan_type = loan_type
+ loan_application.posting_date = posting_date or nowdate()
+ loan_application.is_secured_loan = 1
+
+ if repayment_method:
+ loan_application.repayment_method = repayment_method
+ loan_application.repayment_periods = repayment_periods
+
+ for pledge in proposed_pledges:
+ loan_application.append('proposed_pledges', pledge)
+
+ loan_application.save()
+ loan_application.submit()
+
+ loan_application.status = 'Approved'
+ loan_application.save()
+
+ return loan_application.name
+
def create_loan(applicant, loan_type, loan_amount, repayment_method, repayment_periods,
repayment_start_date=None, posting_date=None):
@@ -531,14 +553,13 @@
loan.save()
return loan
-def create_loan_with_security(applicant, loan_type, repayment_method, repayment_periods, loan_security_pledge,
- posting_date=None, repayment_start_date=None):
-
+def create_loan_with_security(applicant, loan_type, repayment_method, repayment_periods, loan_application, posting_date=None, repayment_start_date=None):
loan = frappe.get_doc({
"doctype": "Loan",
"company": "_Test Company",
"applicant_type": "Customer",
"posting_date": posting_date or nowdate(),
+ "loan_application": loan_application,
"applicant": applicant,
"loan_type": loan_type,
"is_term_loan": 1,
@@ -547,7 +568,6 @@
"repayment_periods": repayment_periods,
"repayment_start_date": repayment_start_date or nowdate(),
"mode_of_payment": frappe.db.get_value('Mode of Payment', {'type': 'Cash'}, 'name'),
- "loan_security_pledge": loan_security_pledge,
"payment_account": 'Payment Account - _TC',
"loan_account": 'Loan Account - _TC',
"interest_income_account": 'Interest Income Account - _TC',
@@ -558,19 +578,19 @@
return loan
-def create_demand_loan(applicant, loan_type, loan_security_pledge, posting_date=None):
+def create_demand_loan(applicant, loan_type, loan_application, posting_date=None):
loan = frappe.get_doc({
"doctype": "Loan",
"company": "_Test Company",
"applicant_type": "Customer",
"posting_date": posting_date or nowdate(),
+ 'loan_application': loan_application,
"applicant": applicant,
"loan_type": loan_type,
"is_term_loan": 0,
"is_secured_loan": 1,
"mode_of_payment": frappe.db.get_value('Mode of Payment', {'type': 'Cash'}, 'name'),
- "loan_security_pledge": loan_security_pledge,
"payment_account": 'Payment Account - _TC',
"loan_account": 'Loan Account - _TC',
"interest_income_account": 'Interest Income Account - _TC',
diff --git a/erpnext/loan_management/doctype/loan_application/loan_application.py b/erpnext/loan_management/doctype/loan_application/loan_application.py
index d3b8164..f051755 100644
--- a/erpnext/loan_management/doctype/loan_application/loan_application.py
+++ b/erpnext/loan_management/doctype/loan_application/loan_application.py
@@ -103,10 +103,13 @@
if self.is_secured_loan and not self.proposed_pledges:
frappe.throw(_("Proposed Pledges are mandatory for secured Loans"))
- if not self.loan_amount and self.is_secured_loan and self.proposed_pledges:
- self.loan_amount = 0
+ if self.is_secured_loan and self.proposed_pledges:
+ self.maximum_loan_amount = 0
for security in self.proposed_pledges:
- self.loan_amount += security.post_haircut_amount
+ self.maximum_loan_amount += security.post_haircut_amount
+
+ if not self.loan_amount and self.is_secured_loan and self.proposed_pledges:
+ self.loan_amount = self.maximum_loan_amount
@frappe.whitelist()
def create_loan(source_name, target_doc=None, submit=0):
@@ -116,7 +119,6 @@
filters = {'name': source_doc.loan_type}
)[0]
- loan_security_pledge = frappe.db.get_value("Loan Security Pledge", {"loan_application": source_name}, 'name')
target_doc.mode_of_payment = account_details.mode_of_payment
target_doc.payment_account = account_details.payment_account
@@ -124,9 +126,6 @@
target_doc.interest_income_account = account_details.interest_income_account
target_doc.penalty_income_account = account_details.penalty_income_account
- if loan_security_pledge:
- target_doc.is_secured_loan = 1
- target_doc.loan_security_pledge = loan_security_pledge
doclist = get_mapped_doc("Loan Application", source_name, {
"Loan Application": {
diff --git a/erpnext/loan_management/doctype/loan_disbursement/test_loan_disbursement.py b/erpnext/loan_management/doctype/loan_disbursement/test_loan_disbursement.py
index 0c1578f..2cb2637 100644
--- a/erpnext/loan_management/doctype/loan_disbursement/test_loan_disbursement.py
+++ b/erpnext/loan_management/doctype/loan_disbursement/test_loan_disbursement.py
@@ -5,11 +5,12 @@
import frappe
import unittest
from frappe.utils import (nowdate, add_days, get_datetime, get_first_day, get_last_day, date_diff, flt, add_to_date)
-from erpnext.loan_management.doctype.loan.test_loan import (create_loan_type, create_loan_security_pledge, create_repayment_entry,
+from erpnext.loan_management.doctype.loan.test_loan import (create_loan_type, create_loan_security_pledge, create_repayment_entry, create_loan_application,
make_loan_disbursement_entry, create_loan_accounts, create_loan_security_type, create_loan_security, create_demand_loan, create_loan_security_price)
from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_demand_loans
from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import days_in_year
from erpnext.selling.doctype.customer.test_customer import get_customer_dict
+from erpnext.loan_management.doctype.loan_application.loan_application import create_pledge
class TestLoanDisbursement(unittest.TestCase):
@@ -31,18 +32,15 @@
self.applicant = frappe.db.get_value("Customer", {'name': '_Test Loan Customer'}, 'name')
def test_loan_topup(self):
- pledges = []
- pledges.append({
+ pledge = [{
"loan_security": "Test Security 1",
- "qty": 4000.00,
- "haircut": 50,
- "loan_security_price": 500.00
- })
+ "qty": 4000.00
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant, pledges)
+ loan_application = create_loan_application('_Test Company', self.applicant, 'Demand Loan', pledge)
+ create_pledge(loan_application)
- loan = create_demand_loan(self.applicant, "Demand Loan", loan_security_pledge.name,
- posting_date=get_first_day(nowdate()))
+ loan = create_demand_loan(self.applicant, "Demand Loan", loan_application, posting_date=get_first_day(nowdate()))
loan.submit()
diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/test_loan_interest_accrual.py b/erpnext/loan_management/doctype/loan_interest_accrual/test_loan_interest_accrual.py
index 2afed08..4b85b21 100644
--- a/erpnext/loan_management/doctype/loan_interest_accrual/test_loan_interest_accrual.py
+++ b/erpnext/loan_management/doctype/loan_interest_accrual/test_loan_interest_accrual.py
@@ -6,10 +6,11 @@
import unittest
from frappe.utils import (nowdate, add_days, get_datetime, get_first_day, get_last_day, date_diff, flt, add_to_date)
from erpnext.loan_management.doctype.loan.test_loan import (create_loan_type, create_loan_security_pledge, create_loan_security_price,
- make_loan_disbursement_entry, create_loan_accounts, create_loan_security_type, create_loan_security, create_demand_loan)
+ make_loan_disbursement_entry, create_loan_accounts, create_loan_security_type, create_loan_security, create_demand_loan, create_loan_application)
from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_demand_loans
from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import days_in_year
from erpnext.selling.doctype.customer.test_customer import get_customer_dict
+from erpnext.loan_management.doctype.loan_application.loan_application import create_pledge
class TestLoanInterestAccrual(unittest.TestCase):
def setUp(self):
@@ -29,17 +30,15 @@
self.applicant = frappe.db.get_value("Customer", {'name': '_Test Loan Customer'}, 'name')
def test_loan_interest_accural(self):
- pledges = []
- pledges.append({
+ pledge = [{
"loan_security": "Test Security 1",
- "qty": 4000.00,
- "haircut": 50,
- "loan_security_price": 500.00
- })
+ "qty": 4000.00
+ }]
- loan_security_pledge = create_loan_security_pledge(self.applicant, pledges)
+ loan_application = create_loan_application('_Test Company', self.applicant, 'Demand Loan', pledge)
+ create_pledge(loan_application)
- loan = create_demand_loan(self.applicant, "Demand Loan", loan_security_pledge.name,
+ loan = create_demand_loan(self.applicant, "Demand Loan", loan_application,
posting_date=get_first_day(nowdate()))
loan.submit()
diff --git a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.json b/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.json
index 1553844..4572e99 100644
--- a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.json
+++ b/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "LS-.{applicant}.-.#####",
"creation": "2019-08-29 18:48:51.371674",
"doctype": "DocType",
@@ -6,10 +7,10 @@
"engine": "InnoDB",
"field_order": [
"loan_details_section",
- "loan_application",
- "loan",
"applicant_type",
"applicant",
+ "loan",
+ "loan_application",
"column_break_3",
"company",
"pledge_time",
@@ -55,15 +56,13 @@
"fieldname": "loan",
"fieldtype": "Link",
"label": "Loan",
- "options": "Loan",
- "read_only": 1
+ "options": "Loan"
},
{
"fieldname": "loan_application",
"fieldtype": "Link",
"label": "Loan Application",
- "options": "Loan Application",
- "read_only": 1
+ "options": "Loan Application"
},
{
"fieldname": "total_security_value",
@@ -133,7 +132,8 @@
}
],
"is_submittable": 1,
- "modified": "2019-10-10 13:22:53.297519",
+ "links": [],
+ "modified": "2020-07-02 23:38:24.002382",
"modified_by": "Administrator",
"module": "Loan Management",
"name": "Loan Security Pledge",
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 7d31a1c..256c957 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -910,6 +910,7 @@
return out
+@frappe.whitelist()
def item_query(doctype, txt, searchfield, start, page_len, filters):
meta = frappe.get_meta("Item", cached=True)
searchfields = meta.get_search_fields()
@@ -989,4 +990,4 @@
},
}, target_doc, postprocess)
- return doc
\ No newline at end of file
+ return doc
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index e2233a3..f962a11 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -631,6 +631,7 @@
bom.set_bom_material_details()
return bom
+@frappe.whitelist()
def get_bom_operations(doctype, txt, searchfield, start, page_len, filters):
if txt:
filters['operation'] = ('like', '%%%s%%' % txt)
diff --git a/erpnext/manufacturing/module_onboarding/manufacturing/manufacturing.json b/erpnext/manufacturing/module_onboarding/manufacturing/manufacturing.json
index a36b63a..7b5747e 100644
--- a/erpnext/manufacturing/module_onboarding/manufacturing/manufacturing.json
+++ b/erpnext/manufacturing/module_onboarding/manufacturing/manufacturing.json
@@ -19,7 +19,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/manufacturing",
"idx": 0,
"is_complete": 0,
- "modified": "2020-06-29 20:25:36.899106",
+ "modified": "2020-07-08 14:05:56.197563",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Manufacturing",
@@ -50,7 +50,7 @@
"step": "Explore Manufacturing Settings"
}
],
- "subtitle": "Products, Raw Materials, BOM, Work Order and more.",
- "success_message": "Manufacturing module is all setup!",
- "title": "Let's Set Up the Manufacturing Module"
-}
+ "subtitle": "Products, Raw Materials, BOM, Work Order, and more.",
+ "success_message": "Manufacturing module is all set up!",
+ "title": "Let's Set Up the Manufacturing Module."
+}
\ No newline at end of file
diff --git a/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py b/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py
index c5627e0..e3e440e 100644
--- a/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py
+++ b/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py
@@ -19,7 +19,7 @@
"options": "Work Order",
"width": 120
}]
-
+
if not filters.get('bom_no'):
columns.extend([
{
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index c7a7abf..cd4a221 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -707,3 +707,4 @@
erpnext.patches.v13_0.move_payroll_setting_separately_from_hr_settings #22-06-2020
erpnext.patches.v13_0.check_is_income_tax_component #22-06-2020
erpnext.patches.v12_0.add_taxjar_integration_field
+erpnext.patches.v12_0.update_item_tax_template_company
diff --git a/erpnext/patches/v12_0/update_item_tax_template_company.py b/erpnext/patches/v12_0/update_item_tax_template_company.py
new file mode 100644
index 0000000..f749699
--- /dev/null
+++ b/erpnext/patches/v12_0/update_item_tax_template_company.py
@@ -0,0 +1,13 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ frappe.reload_doc('accounts', 'doctype', 'item_tax_template')
+
+ item_tax_template_list = frappe.get_list('Item Tax Template')
+ for template in item_tax_template_list:
+ doc = frappe.get_doc('Item Tax Template', template.name)
+ for tax in doc.taxes:
+ doc.company = frappe.get_value('Account', tax.tax_type, 'company')
+ break
+ doc.save()
\ No newline at end of file
diff --git a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py
index e166a70..d7d00e6 100644
--- a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py
+++ b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py
@@ -222,7 +222,7 @@
return benefit_amount
-
+@frappe.whitelist()
def get_earning_components(doctype, txt, searchfield, start, page_len, filters):
if len(filters) < 2:
return {}
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js b/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
index 1ae3553..8d35a7b 100644
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
+++ b/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
@@ -30,6 +30,7 @@
).toggleClass('btn-primary', !(frm.doc.employees || []).length);
}
if ((frm.doc.employees || []).length) {
+ frm.page.clear_primary_action();
frm.page.set_primary_action(__('Create Salary Slips'), () => {
frm.save('Submit').then(()=>{
frm.page.clear_primary_action();
@@ -49,13 +50,14 @@
return frappe.call({
doc: frm.doc,
method: 'fill_employee_details',
- callback: function(r) {
- if (r.docs[0].employees){
- frm.save();
- frm.refresh();
- if(r.docs[0].validate_attendance){
- render_employee_attendance(frm, r.message);
- }
+ }).then(r => {
+ if (r.docs && r.docs[0].employees){
+ frm.employees = r.docs[0].employees;
+ frm.dirty();
+ frm.save();
+ frm.refresh();
+ if(r.docs[0].validate_attendance){
+ render_employee_attendance(frm, r.message);
}
}
})
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.py b/erpnext/payroll/doctype/payroll_entry/payroll_entry.py
index e6bb708..ad9b6d8 100644
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.py
+++ b/erpnext/payroll/doctype/payroll_entry/payroll_entry.py
@@ -539,6 +539,7 @@
if not_submitted_ss:
frappe.msgprint(_("Could not submit some Salary Slips"))
+@frappe.whitelist()
def get_payroll_entries_for_jv(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql("""
select name from `tabPayroll Entry`
diff --git a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py b/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
index be9a2d3..37cd89a 100644
--- a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/payroll/doctype/salary_slip/test_salary_slip.py
@@ -105,7 +105,7 @@
#Gross pay calculation based on attendances
gross_pay = 78000 - ((78000 / (days_in_month - no_of_holidays)) * flt(ss.leave_without_pay))
- self.assertEqual(ss.gross_pay, gross_pay)
+ self.assertEqual(flt(ss.gross_pay, 2), flt(gross_pay, 2))
frappe.db.set_value("Payroll Settings", None, "payroll_based_on", "Leave")
diff --git a/erpnext/payroll/module_onboarding/payroll/payroll.json b/erpnext/payroll/module_onboarding/payroll/payroll.json
index 7ed786f..b5226b2 100644
--- a/erpnext/payroll/module_onboarding/payroll/payroll.json
+++ b/erpnext/payroll/module_onboarding/payroll/payroll.json
@@ -13,7 +13,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/human-resources/payroll-entry",
"idx": 0,
"is_complete": 0,
- "modified": "2020-06-29 17:00:25.113341",
+ "modified": "2020-07-08 14:06:13.994310",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Payroll",
@@ -44,8 +44,7 @@
"step": "Payroll Settings"
}
],
- "subtitle": "Salary, Compensations and more.",
- "success_message": "The Payroll is all set up!",
- "title": "Let's Setup the Payroll Module. ",
- "user_can_dismiss": 1
+ "subtitle": "Salary, Compensation, and more.",
+ "success_message": "The Payroll Module is all set up!",
+ "title": "Let's Set Up the Payroll Module. "
}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_employee/create_employee.json b/erpnext/payroll/onboarding_step/create_employee/create_employee.json
index 5839ae6..3aa33c6 100644
--- a/erpnext/payroll/onboarding_step/create_employee/create_employee.json
+++ b/erpnext/payroll/onboarding_step/create_employee/create_employee.json
@@ -15,5 +15,5 @@
"reference_document": "Employee",
"show_full_form": 0,
"title": "Create Employee",
- "validate_action": 1
+ "validate_action": 0
}
\ No newline at end of file
diff --git a/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json b/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json
index b1a7cc2..4bae675 100644
--- a/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json
+++ b/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json
@@ -8,7 +8,7 @@
"is_mandatory": 1,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-06-29 11:53:54.553947",
+ "modified": "2020-06-01 11:53:54.553947",
"modified_by": "Administrator",
"name": "Create Payroll Period",
"owner": "Administrator",
diff --git a/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json b/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json
index a7cf7bf..946b8c8 100644
--- a/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json
+++ b/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json
@@ -1,19 +1,19 @@
{
- "action": "Update Settings",
+ "action": "Go to Page",
"creation": "2020-06-04 16:34:29.664917",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_mandatory": 0,
- "is_single": 1,
+ "is_single": 0,
"is_skipped": 0,
- "modified": "2020-06-29 16:34:29.664917",
+ "modified": "2020-06-04 16:34:29.664917",
"modified_by": "Administrator",
"name": "Payroll Settings",
"owner": "Administrator",
- "reference_document": "Payroll Settings",
+ "path": "#Form/Payroll Settings",
"show_full_form": 0,
"title": "Payroll Settings",
- "validate_action": 0
+ "validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index afdb5b7..32ea05b 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -238,6 +238,7 @@
"row_template": "templates/includes/projects/project_row.html"
}
+@frappe.whitelist()
def get_users_for_project(doctype, txt, searchfield, start, page_len, filters):
conditions = []
return frappe.db.sql("""select name, concat_ws(' ', first_name, middle_name, last_name)
diff --git a/erpnext/projects/doctype/task/task.js b/erpnext/projects/doctype/task/task.js
index 5719276..a044e1d 100644
--- a/erpnext/projects/doctype/task/task.js
+++ b/erpnext/projects/doctype/task/task.js
@@ -3,55 +3,36 @@
frappe.provide("erpnext.projects");
-cur_frm.add_fetch("project", "company", "company");
-
frappe.ui.form.on("Task", {
- onload: function(frm) {
- frm.set_query("task", "depends_on", function() {
- var filters = {
+ setup: function (frm) {
+ frm.set_query("project", function () {
+ return {
+ query: "erpnext.projects.doctype.task.task.get_project"
+ }
+ });
+
+ frm.make_methods = {
+ 'Timesheet': () => frappe.model.open_mapped_doc({
+ method: 'erpnext.projects.doctype.task.task.make_timesheet',
+ frm: frm
+ })
+ }
+ },
+
+ onload: function (frm) {
+ frm.set_query("task", "depends_on", function () {
+ let filters = {
name: ["!=", frm.doc.name]
};
- if(frm.doc.project) filters["project"] = frm.doc.project;
+ if (frm.doc.project) filters["project"] = frm.doc.project;
return {
filters: filters
};
})
},
- refresh: function(frm) {
- frm.fields_dict['parent_task'].get_query = function () {
- return {
- filters: {
- "is_group": 1,
- }
- }
- }
-
- if (!frm.doc.is_group) {
- if (!frm.is_new()) {
- if (frappe.model.can_read("Timesheet")) {
- frm.add_custom_button(__("Timesheet"), () => {
- frappe.route_options = { "project": frm.doc.project, "task": frm.doc.name }
- frappe.set_route("List", "Timesheet");
- }, __("View"), true);
- }
-
- if (frappe.model.can_read("Expense Claim")) {
- frm.add_custom_button(__("Expense Claims"), () => {
- frappe.route_options = { "project": frm.doc.project, "task": frm.doc.name };
- frappe.set_route("List", "Expense Claim");
- }, __("View"), true);
- }
- }
- }
- },
-
- setup: function(frm) {
- frm.fields_dict.project.get_query = function() {
- return {
- query: "erpnext.projects.doctype.task.task.get_project"
- }
- };
+ refresh: function (frm) {
+ frm.set_query("parent_task", { "is_group": 1 });
},
is_group: function (frm) {
@@ -69,12 +50,8 @@
})
},
- validate: function(frm) {
+ validate: function (frm) {
frm.doc.project && frappe.model.remove_from_locals("Project",
frm.doc.project);
- },
-
+ }
});
-
-cur_frm.add_fetch('task', 'subject', 'subject');
-cur_frm.add_fetch('task', 'project', 'project');
diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json
index f4b3d3e..27f1a71 100644
--- a/erpnext/projects/doctype/task/task.json
+++ b/erpnext/projects/doctype/task/task.json
@@ -183,7 +183,8 @@
{
"fieldname": "progress",
"fieldtype": "Percent",
- "label": "% Progress"
+ "label": "% Progress",
+ "no_copy": 1
},
{
"default": "0",
@@ -324,6 +325,7 @@
"options": "Department"
},
{
+ "fetch_from": "project.company",
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
@@ -356,6 +358,7 @@
"fieldname": "completed_by",
"fieldtype": "Link",
"label": "Completed By",
+ "no_copy": 1,
"options": "User"
}
],
@@ -364,7 +367,7 @@
"is_tree": 1,
"links": [],
"max_attachments": 5,
- "modified": "2020-03-18 18:08:44.153211",
+ "modified": "2020-07-03 12:36:04.960457",
"modified_by": "Administrator",
"module": "Projects",
"name": "Task",
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index 1cb2c50..3b75cf4 100755
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -7,10 +7,11 @@
import frappe
from frappe import _, throw
+from frappe.desk.form.assign_to import clear, close_all_assignments
+from frappe.model.mapper import get_mapped_doc
from frappe.utils import add_days, cstr, date_diff, get_link_to_form, getdate, today
from frappe.utils.nestedset import NestedSet
-from frappe.desk.form.assign_to import close_all_assignments, clear
-from frappe.utils import date_diff
+
class CircularReferenceError(frappe.ValidationError): pass
class EndDateCannotBeGreaterThanProjectEndDateError(frappe.ValidationError): pass
@@ -188,6 +189,7 @@
return child_tasks
+@frappe.whitelist()
def get_project(doctype, txt, searchfield, start, page_len, filters):
from erpnext.controllers.queries import get_match_cond
return frappe.db.sql(""" select name from `tabProject`
@@ -219,6 +221,26 @@
continue
frappe.get_doc("Task", task.name).update_status()
+
+@frappe.whitelist()
+def make_timesheet(source_name, target_doc=None, ignore_permissions=False):
+ def set_missing_values(source, target):
+ target.append("time_logs", {
+ "hours": source.actual_time,
+ "completed": source.status == "Completed",
+ "project": source.project,
+ "task": source.name
+ })
+
+ doclist = get_mapped_doc("Task", source_name, {
+ "Task": {
+ "doctype": "Timesheet"
+ }
+ }, target_doc, postprocess=set_missing_values, ignore_permissions=ignore_permissions)
+
+ return doclist
+
+
@frappe.whitelist()
def get_children(doctype, parent, task=None, project=None, is_root=False):
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 905f6fb..3c56a63 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -1835,7 +1835,8 @@
if (doc.tax_category)
filters['tax_category'] = doc.tax_category;
-
+ if (doc.company)
+ filters['company'] = doc.company;
return {
query: "erpnext.controllers.queries.get_tax_template",
filters: filters
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 99c1b8a..0653267 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -4,7 +4,7 @@
frappe.provide("erpnext.utils");
erpnext.utils.get_party_details = function(frm, method, args, callback) {
- if(!method) {
+ if (!method) {
method = "erpnext.accounts.party.get_party_details";
}
@@ -22,12 +22,12 @@
}
}
- if(!args) {
- if((frm.doctype != "Purchase Order" && frm.doc.customer)
+ if (!args) {
+ if ((frm.doctype != "Purchase Order" && frm.doc.customer)
|| (frm.doc.party_name && in_list(['Quotation', 'Opportunity'], frm.doc.doctype))) {
let party_type = "Customer";
- if(frm.doc.quotation_to && frm.doc.quotation_to === "Lead") {
+ if (frm.doc.quotation_to && frm.doc.quotation_to === "Lead") {
party_type = "Lead";
}
@@ -36,7 +36,7 @@
party_type: party_type,
price_list: frm.doc.selling_price_list
};
- } else if(frm.doc.supplier) {
+ } else if (frm.doc.supplier) {
args = {
party: frm.doc.supplier,
party_type: "Supplier",
@@ -78,13 +78,17 @@
args.posting_date = frm.doc.posting_date || frm.doc.transaction_date;
}
}
- if(!args || !args.party) return;
+ if (!args || !args.party) return;
- if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
- if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
+ if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
+ if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
args.posting_date, args.party_type=="Customer" ? "customer": "supplier")) return;
}
+ if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, args.party_type=="Customer" ? "customer": "supplier")) {
+ return;
+ }
+
args.currency = frm.doc.currency;
args.company = frm.doc.company;
args.doctype = frm.doc.doctype;
@@ -92,14 +96,14 @@
method: method,
args: args,
callback: function(r) {
- if(r.message) {
+ if (r.message) {
frm.supplier_tds = r.message.supplier_tds;
frm.updating_party_details = true;
frappe.run_serially([
() => frm.set_value(r.message),
() => {
frm.updating_party_details = false;
- if(callback) callback();
+ if (callback) callback();
frm.refresh();
erpnext.utils.add_item(frm);
}
@@ -110,9 +114,9 @@
}
erpnext.utils.add_item = function(frm) {
- if(frm.is_new()) {
+ if (frm.is_new()) {
var prev_route = frappe.get_prev_route();
- if(prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
+ if (prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
// add row
var item = frm.add_child('items');
frm.refresh_field('items');
@@ -124,23 +128,23 @@
}
erpnext.utils.get_address_display = function(frm, address_field, display_field, is_your_company_address) {
- if(frm.updating_party_details) return;
+ if (frm.updating_party_details) return;
- if(!address_field) {
- if(frm.doctype != "Purchase Order" && frm.doc.customer) {
+ if (!address_field) {
+ if (frm.doctype != "Purchase Order" && frm.doc.customer) {
address_field = "customer_address";
- } else if(frm.doc.supplier) {
+ } else if (frm.doc.supplier) {
address_field = "supplier_address";
} else return;
}
- if(!display_field) display_field = "address_display";
- if(frm.doc[address_field]) {
+ if (!display_field) display_field = "address_display";
+ if (frm.doc[address_field]) {
frappe.call({
method: "frappe.contacts.doctype.address.address.get_address_display",
args: {"address_dict": frm.doc[address_field] },
callback: function(r) {
- if(r.message) {
+ if (r.message) {
frm.set_value(display_field, r.message)
}
}
@@ -151,15 +155,15 @@
};
erpnext.utils.set_taxes_from_address = function(frm, triggered_from_field, billing_address_field, shipping_address_field) {
- if(frm.updating_party_details) return;
+ if (frm.updating_party_details) return;
- if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
- if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier",
+ if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
+ if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
return;
}
- if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
+ if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
return;
}
@@ -175,8 +179,8 @@
"shipping_address": frm.doc[shipping_address_field]
},
callback: function(r) {
- if(!r.exc){
- if(frm.doc.tax_category != r.message) {
+ if (!r.exc){
+ if (frm.doc.tax_category != r.message) {
frm.set_value("tax_category", r.message);
} else {
erpnext.utils.set_taxes(frm, triggered_from_field);
@@ -187,13 +191,17 @@
};
erpnext.utils.set_taxes = function(frm, triggered_from_field) {
- if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
- if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier",
+ if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
+ if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, triggered_from_field)) {
+ return;
+ }
+
+ if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
return;
}
- if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
+ if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
return;
}
@@ -230,7 +238,7 @@
"shipping_address": frm.doc.shipping_address_name
},
callback: function(r) {
- if(r.message){
+ if (r.message){
frm.set_value("taxes_and_charges", r.message)
}
}
@@ -238,14 +246,14 @@
};
erpnext.utils.get_contact_details = function(frm) {
- if(frm.updating_party_details) return;
+ if (frm.updating_party_details) return;
- if(frm.doc["contact_person"]) {
+ if (frm.doc["contact_person"]) {
frappe.call({
method: "frappe.contacts.doctype.contact.contact.get_contact_details",
args: {contact: frm.doc.contact_person },
callback: function(r) {
- if(r.message)
+ if (r.message)
frm.set_value(r.message);
}
})
@@ -253,10 +261,10 @@
}
erpnext.utils.validate_mandatory = function(frm, label, value, trigger_on) {
- if(!value) {
+ if (!value) {
frm.doc[trigger_on] = "";
refresh_field(trigger_on);
- frappe.msgprint(__("Please enter {0} first", [label]));
+ frappe.throw({message:__("Please enter {0} first", [label]), title:__("Mandatory")});
return false;
}
return true;
@@ -271,12 +279,12 @@
address: frm.doc.shipping_address
},
callback: function(r){
- if(r.message){
+ if (r.message){
frm.set_value("shipping_address", r.message[0]) //Address title or name
frm.set_value("shipping_address_display", r.message[1]) //Address to be displayed on the page
}
- if(callback){
+ if (callback){
return callback();
}
}
diff --git a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js
index 63747af..dac6ac4 100644
--- a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js
+++ b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js
@@ -5,21 +5,28 @@
refresh: function(frm) {
frm.set_value("date", frappe.datetime.get_today());
},
- template: function(frm){
- frappe.call({
- "method": "frappe.client.get",
- args: {
- doctype: "Quality Feedback Template",
- name: frm.doc.template
- },
- callback: function(data){
- frm.fields_dict.parameters.grid.remove_all();
- for (var i in data.message.parameters){
- frm.add_child("parameters");
- frm.fields_dict.parameters.get_value()[i].parameter = data.message.parameters[i].parameter;
+
+ template: function(frm) {
+ if (frm.doc.template) {
+ frappe.call({
+ "method": "frappe.client.get",
+ args: {
+ doctype: "Quality Feedback Template",
+ name: frm.doc.template
+ },
+ callback: function(data) {
+ if (data && data.message) {
+ frm.fields_dict.parameters.grid.remove_all();
+
+ // fetch parameters from template and autofill
+ for (let template_parameter of data.message.parameters) {
+ let row = frm.add_child("parameters");
+ row.parameter = template_parameter.parameter;
+ }
+ frm.refresh();
+ }
}
- frm.refresh();
- }
- });
+ });
+ }
}
});
diff --git a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json
index 460438a..ab9084f 100644
--- a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json
+++ b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "format:FDBK-{#####}",
"creation": "2019-05-26 21:23:05.308379",
"doctype": "DocType",
@@ -53,12 +54,13 @@
{
"fieldname": "document_name",
"fieldtype": "Dynamic Link",
- "label": "Name",
+ "label": "Feedback By",
"options": "document_type",
"reqd": 1
}
],
- "modified": "2019-05-28 15:16:01.161662",
+ "links": [],
+ "modified": "2020-07-03 15:50:58.589302",
"modified_by": "Administrator",
"module": "Quality Management",
"name": "Quality Feedback",
diff --git a/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json b/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json
index 31efd04..bdc9dba 100644
--- a/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json
+++ b/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "format:TMPL-{template}",
"creation": "2019-05-26 21:17:24.283061",
"doctype": "DocType",
@@ -30,10 +31,12 @@
"fieldname": "parameters",
"fieldtype": "Table",
"label": "Parameters",
- "options": "Quality Feedback Template Parameter"
+ "options": "Quality Feedback Template Parameter",
+ "reqd": 1
}
],
- "modified": "2019-05-26 21:48:47.770610",
+ "links": [],
+ "modified": "2020-07-03 16:06:03.749415",
"modified_by": "Administrator",
"module": "Quality Management",
"name": "Quality Feedback Template",
diff --git a/erpnext/regional/united_arab_emirates/utils.py b/erpnext/regional/united_arab_emirates/utils.py
index 772bbf5..a0425f6 100644
--- a/erpnext/regional/united_arab_emirates/utils.py
+++ b/erpnext/regional/united_arab_emirates/utils.py
@@ -11,14 +11,17 @@
for row in doc.items:
tax_rate = 0.0
- item_tax_rate = frappe.parse_json(row.item_tax_rate)
+ item_tax_rate = 0.0
+
+ if row.item_tax_rate:
+ item_tax_rate = frappe.parse_json(row.item_tax_rate)
# First check if tax rate is present
# If not then look up in item_wise_tax_detail
if item_tax_rate:
for account, rate in iteritems(item_tax_rate):
tax_rate += rate
- elif itemised_tax.get(row.item_code):
+ elif row.item_code and itemised_tax.get(row.item_code):
tax_rate = sum([tax.get('tax_rate', 0) for d, tax in itemised_tax.get(row.item_code).items()])
row.tax_rate = flt(tax_rate, row.precision("tax_rate"))
diff --git a/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py b/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py
index a748f9a..357deaa 100644
--- a/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py
+++ b/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py
@@ -65,6 +65,7 @@
return invoice.name
+@frappe.whitelist()
def item_query_restaurant(doctype='Item', txt='', searchfield='name', start=0, page_len=20, filters=None, as_dict=False):
'''Return items that are selected in active menu of the restaurant'''
restaurant, menu = get_restaurant_and_menu_name(filters['table'])
@@ -84,4 +85,4 @@
if not menu:
frappe.throw(_('Please set an active menu for Restaurant {0}').format(restaurant))
- return restaurant, menu
\ No newline at end of file
+ return restaurant, menu
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index d70c64f..e614acd 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -342,11 +342,10 @@
@frappe.whitelist()
def get_customer_list(doctype, txt, searchfield, start, page_len, filters=None):
from erpnext.controllers.queries import get_fields
+ fields = ["name", "customer_name", "customer_group", "territory"]
if frappe.db.get_default("cust_master_name") == "Customer Name":
fields = ["name", "customer_group", "territory"]
- else:
- fields = ["name", "customer_name", "customer_group", "territory"]
fields = get_fields("Customer", fields)
@@ -542,6 +541,7 @@
return address
+@frappe.whitelist()
def get_customer_primary_contact(doctype, txt, searchfield, start, page_len, filters):
customer = filters.get('customer')
return frappe.db.sql("""
@@ -552,4 +552,4 @@
""", {
'customer': customer,
'txt': '%%%s%%' % txt
- })
+ })
\ No newline at end of file
diff --git a/erpnext/selling/doctype/product_bundle/product_bundle.py b/erpnext/selling/doctype/product_bundle/product_bundle.py
index c8a7167..0c85a1b 100644
--- a/erpnext/selling/doctype/product_bundle/product_bundle.py
+++ b/erpnext/selling/doctype/product_bundle/product_bundle.py
@@ -22,12 +22,13 @@
"""Validates, main Item is not a stock item"""
if frappe.db.get_value("Item", self.new_item_code, "is_stock_item"):
frappe.throw(_("Parent Item {0} must not be a Stock Item").format(self.new_item_code))
-
+
def validate_child_items(self):
for item in self.items:
if frappe.db.exists("Product Bundle", item.item_code):
- frappe.throw(_("Child Item should not be a Product Bundle. Please remove item `{0}` and save").format(item.item_code))
-
+ frappe.throw(_("Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save").format(item.idx, frappe.bold(item.item_code)))
+
+@frappe.whitelist()
def get_new_item_code(doctype, txt, searchfield, start, page_len, filters):
from erpnext.controllers.queries import get_match_cond
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index b57c4f3..cd4e1d0 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -143,11 +143,15 @@
{
"fieldname": "customer_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"options": "fa fa-user"
},
{
"fieldname": "column_break0",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break",
"width": "50%"
},
@@ -157,6 +161,8 @@
"fieldname": "title",
"fieldtype": "Data",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Title",
"no_copy": 1,
"print_hide": 1
@@ -164,6 +170,8 @@
{
"fieldname": "naming_series",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Series",
"no_copy": 1,
"oldfieldname": "naming_series",
@@ -177,6 +185,8 @@
"bold": 1,
"fieldname": "customer",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_global_search": 1,
"in_standard_filter": 1,
"label": "Customer",
@@ -192,6 +202,8 @@
"fetch_from": "customer.customer_name",
"fieldname": "customer_name",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_global_search": 1,
"label": "Customer Name",
"read_only": 1
@@ -200,6 +212,8 @@
"default": "Sales",
"fieldname": "order_type",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Order Type",
"oldfieldname": "order_type",
"oldfieldtype": "Select",
@@ -210,6 +224,8 @@
{
"fieldname": "column_break1",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break",
"width": "50%"
},
@@ -217,6 +233,8 @@
"fieldname": "amended_from",
"fieldtype": "Link",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"ignore_user_permissions": 1,
"label": "Amended From",
"no_copy": 1,
@@ -230,6 +248,8 @@
{
"fieldname": "company",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_standard_filter": 1,
"label": "Company",
"oldfieldname": "company",
@@ -244,6 +264,8 @@
"default": "Today",
"fieldname": "transaction_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_standard_filter": 1,
"label": "Date",
"no_copy": 1,
@@ -258,6 +280,8 @@
"depends_on": "eval:!doc.skip_delivery_note",
"fieldname": "delivery_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_list_view": 1,
"label": "Delivery Date",
"no_copy": 1
@@ -266,6 +290,8 @@
"allow_on_submit": 1,
"fieldname": "po_no",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer's Purchase Order",
"oldfieldname": "po_no",
"oldfieldtype": "Data",
@@ -276,6 +302,8 @@
"depends_on": "eval:doc.po_no",
"fieldname": "po_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer's Purchase Order Date",
"oldfieldname": "po_date",
"oldfieldtype": "Date",
@@ -285,6 +313,8 @@
"fetch_from": "customer.tax_id",
"fieldname": "tax_id",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Tax Id",
"read_only": 1,
"width": "100px"
@@ -294,6 +324,8 @@
"depends_on": "customer",
"fieldname": "contact_info",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Address and Contact",
"options": "fa fa-bullhorn"
},
@@ -301,6 +333,8 @@
"allow_on_submit": 1,
"fieldname": "customer_address",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer Address",
"options": "Address",
"print_hide": 1
@@ -309,12 +343,16 @@
"allow_on_submit": 1,
"fieldname": "address_display",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Address",
"read_only": 1
},
{
"fieldname": "contact_person",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Contact Person",
"options": "Contact",
"print_hide": 1
@@ -322,6 +360,8 @@
{
"fieldname": "contact_display",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_global_search": 1,
"label": "Contact",
"read_only": 1
@@ -329,6 +369,8 @@
{
"fieldname": "contact_mobile",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Mobile No",
"read_only": 1
},
@@ -336,6 +378,8 @@
"fieldname": "contact_email",
"fieldtype": "Data",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Contact Email",
"options": "Email",
"print_hide": 1,
@@ -344,24 +388,32 @@
{
"fieldname": "company_address_display",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Company Address",
"read_only": 1
},
{
"fieldname": "company_address",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Company Address Name",
"options": "Address"
},
{
"fieldname": "col_break46",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"width": "50%"
},
{
"allow_on_submit": 1,
"fieldname": "shipping_address_name",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Shipping Address Name",
"options": "Address",
"print_hide": 1
@@ -370,6 +422,8 @@
"allow_on_submit": 1,
"fieldname": "shipping_address",
"fieldtype": "Small Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Shipping Address",
"print_hide": 1,
"read_only": 1
@@ -378,6 +432,8 @@
"fieldname": "customer_group",
"fieldtype": "Link",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Customer Group",
"options": "Customer Group",
"print_hide": 1
@@ -385,6 +441,8 @@
{
"fieldname": "territory",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Territory",
"options": "Territory",
"print_hide": 1
@@ -393,6 +451,8 @@
"collapsible": 1,
"fieldname": "currency_and_price_list",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Currency and Price List",
"options": "fa fa-tag",
"print_hide": 1
@@ -400,6 +460,8 @@
{
"fieldname": "currency",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Currency",
"oldfieldname": "currency",
"oldfieldtype": "Select",
@@ -412,6 +474,8 @@
"description": "Rate at which customer's currency is converted to company's base currency",
"fieldname": "conversion_rate",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Exchange Rate",
"oldfieldname": "conversion_rate",
"oldfieldtype": "Currency",
@@ -423,11 +487,15 @@
{
"fieldname": "column_break2",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"width": "50%"
},
{
"fieldname": "selling_price_list",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Price List",
"oldfieldname": "price_list_name",
"oldfieldtype": "Select",
@@ -439,6 +507,8 @@
{
"fieldname": "price_list_currency",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Price List Currency",
"options": "Currency",
"print_hide": 1,
@@ -449,6 +519,8 @@
"description": "Rate at which Price list currency is converted to company's base currency",
"fieldname": "plc_conversion_rate",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Price List Exchange Rate",
"precision": "9",
"print_hide": 1,
@@ -458,6 +530,8 @@
"default": "0",
"fieldname": "ignore_pricing_rule",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Ignore Pricing Rule",
"no_copy": 1,
"permlevel": 1,
@@ -465,11 +539,15 @@
},
{
"fieldname": "sec_warehouse",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "set_warehouse",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Set Source Warehouse",
"options": "Warehouse",
"print_hide": 1
@@ -477,18 +555,24 @@
{
"fieldname": "items_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Section Break",
"options": "fa fa-shopping-cart"
},
{
"fieldname": "scan_barcode",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Scan Barcode"
},
{
"allow_bulk_edit": 1,
"fieldname": "items",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Items",
"oldfieldname": "sales_order_details",
"oldfieldtype": "Table",
@@ -498,32 +582,44 @@
{
"fieldname": "pricing_rule_details",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Pricing Rules"
},
{
"fieldname": "pricing_rules",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Pricing Rule Detail",
"options": "Pricing Rule Detail",
"read_only": 1
},
{
"fieldname": "section_break_31",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "column_break_33a",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "total_qty",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Quantity",
"read_only": 1
},
{
"fieldname": "base_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total (Company Currency)",
"options": "Company:company:default_currency",
"print_hide": 1,
@@ -532,6 +628,8 @@
{
"fieldname": "base_net_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Net Total (Company Currency)",
"oldfieldname": "net_total",
"oldfieldtype": "Currency",
@@ -542,11 +640,15 @@
},
{
"fieldname": "column_break_33",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total",
"options": "currency",
"read_only": 1
@@ -554,6 +656,8 @@
{
"fieldname": "net_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Net Total",
"options": "currency",
"print_hide": 1,
@@ -562,6 +666,8 @@
{
"fieldname": "total_net_weight",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Net Weight",
"print_hide": 1,
"read_only": 1
@@ -569,6 +675,8 @@
{
"fieldname": "taxes_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "fa fa-money"
@@ -576,17 +684,23 @@
{
"fieldname": "tax_category",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Tax Category",
"options": "Tax Category",
"print_hide": 1
},
{
"fieldname": "column_break_38",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "shipping_rule",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Shipping Rule",
"oldfieldtype": "Button",
"options": "Shipping Rule",
@@ -594,11 +708,15 @@
},
{
"fieldname": "section_break_40",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Taxes and Charges Template",
"oldfieldname": "charge",
"oldfieldtype": "Link",
@@ -608,6 +726,8 @@
{
"fieldname": "taxes",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Taxes and Charges",
"oldfieldname": "other_charges",
"oldfieldtype": "Table",
@@ -617,11 +737,15 @@
"collapsible": 1,
"fieldname": "sec_tax_breakup",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Tax Breakup"
},
{
"fieldname": "other_charges_calculation",
"fieldtype": "Long Text",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Taxes and Charges Calculation",
"no_copy": 1,
"oldfieldtype": "HTML",
@@ -630,11 +754,15 @@
},
{
"fieldname": "section_break_43",
- "fieldtype": "Section Break"
+ "fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "base_total_taxes_and_charges",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Taxes and Charges (Company Currency)",
"oldfieldname": "other_charges_total",
"oldfieldtype": "Currency",
@@ -645,11 +773,15 @@
},
{
"fieldname": "column_break_46",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "total_taxes_and_charges",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Taxes and Charges",
"options": "currency",
"print_hide": 1,
@@ -659,6 +791,8 @@
"fieldname": "loyalty_points_redemption",
"fieldtype": "Section Break",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Loyalty Points Redemption",
"print_hide": 1
},
@@ -666,6 +800,8 @@
"fieldname": "loyalty_points",
"fieldtype": "Int",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Loyalty Points",
"read_only": 1
},
@@ -673,6 +809,8 @@
"fieldname": "loyalty_amount",
"fieldtype": "Currency",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Loyalty Amount",
"print_hide": 1,
"read_only": 1
@@ -682,11 +820,15 @@
"collapsible_depends_on": "discount_amount",
"fieldname": "section_break_48",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount and Coupon Code"
},
{
"fieldname": "coupon_code",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Coupon Code",
"options": "Coupon Code"
},
@@ -694,6 +836,8 @@
"default": "Grand Total",
"fieldname": "apply_discount_on",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Apply Additional Discount On",
"options": "\nGrand Total\nNet Total",
"print_hide": 1
@@ -701,6 +845,8 @@
{
"fieldname": "base_discount_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount Amount (Company Currency)",
"options": "Company:company:default_currency",
"print_hide": 1,
@@ -708,17 +854,23 @@
},
{
"fieldname": "column_break_50",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "additional_discount_percentage",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount Percentage",
"print_hide": 1
},
{
"fieldname": "discount_amount",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Additional Discount Amount",
"options": "currency",
"print_hide": 1
@@ -726,6 +878,8 @@
{
"fieldname": "totals",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Section Break",
"options": "fa fa-money",
"print_hide": 1
@@ -733,6 +887,8 @@
{
"fieldname": "base_grand_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Grand Total (Company Currency)",
"oldfieldname": "grand_total",
"oldfieldtype": "Currency",
@@ -744,6 +900,8 @@
{
"fieldname": "base_rounding_adjustment",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounding Adjustment (Company Currency)",
"no_copy": 1,
"options": "Company:company:default_currency",
@@ -753,6 +911,8 @@
{
"fieldname": "base_rounded_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounded Total (Company Currency)",
"oldfieldname": "rounded_total",
"oldfieldtype": "Currency",
@@ -765,6 +925,8 @@
"description": "In Words will be visible once you save the Sales Order.",
"fieldname": "base_in_words",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "In Words (Company Currency)",
"oldfieldname": "in_words",
"oldfieldtype": "Data",
@@ -775,6 +937,8 @@
{
"fieldname": "column_break3",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break",
"print_hide": 1,
"width": "50%"
@@ -782,6 +946,8 @@
{
"fieldname": "grand_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_list_view": 1,
"label": "Grand Total",
"oldfieldname": "grand_total_export",
@@ -793,6 +959,8 @@
{
"fieldname": "rounding_adjustment",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounding Adjustment",
"no_copy": 1,
"options": "currency",
@@ -803,6 +971,8 @@
"bold": 1,
"fieldname": "rounded_total",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Rounded Total",
"oldfieldname": "rounded_total_export",
"oldfieldtype": "Currency",
@@ -813,6 +983,8 @@
{
"fieldname": "in_words",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "In Words",
"oldfieldname": "in_words_export",
"oldfieldtype": "Data",
@@ -823,6 +995,8 @@
{
"fieldname": "advance_paid",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Advance Paid",
"no_copy": 1,
"options": "party_account_currency",
@@ -834,6 +1008,8 @@
"collapsible_depends_on": "packed_items",
"fieldname": "packing_list",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Packing List",
"oldfieldtype": "Section Break",
"options": "fa fa-suitcase",
@@ -842,6 +1018,8 @@
{
"fieldname": "packed_items",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Packed Items",
"options": "Packed Item",
"print_hide": 1,
@@ -850,11 +1028,15 @@
{
"fieldname": "payment_schedule_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payment Terms"
},
{
"fieldname": "payment_terms_template",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payment Terms Template",
"options": "Payment Terms Template",
"print_hide": 1
@@ -862,6 +1044,8 @@
{
"fieldname": "payment_schedule",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Payment Schedule",
"no_copy": 1,
"options": "Payment Schedule",
@@ -872,6 +1056,8 @@
"collapsible_depends_on": "terms",
"fieldname": "terms_section_break",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Terms and Conditions",
"oldfieldtype": "Section Break",
"options": "fa fa-legal"
@@ -879,6 +1065,8 @@
{
"fieldname": "tc_name",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Terms",
"oldfieldname": "tc_name",
"oldfieldtype": "Link",
@@ -888,6 +1076,8 @@
{
"fieldname": "terms",
"fieldtype": "Text Editor",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Terms and Conditions Details",
"oldfieldname": "terms",
"oldfieldtype": "Text Editor"
@@ -897,6 +1087,8 @@
"collapsible_depends_on": "project",
"fieldname": "more_info",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "More Information",
"oldfieldtype": "Section Break",
"options": "fa fa-file-text",
@@ -905,6 +1097,8 @@
{
"fieldname": "inter_company_order_reference",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Inter Company Order Reference",
"options": "Purchase Order"
},
@@ -912,6 +1106,8 @@
"description": "Track this Sales Order against any Project",
"fieldname": "project",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Project",
"oldfieldname": "project",
"oldfieldtype": "Link",
@@ -921,6 +1117,8 @@
"fieldname": "party_account_currency",
"fieldtype": "Link",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Party Account Currency",
"no_copy": 1,
"options": "Currency",
@@ -929,11 +1127,15 @@
},
{
"fieldname": "column_break_77",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "source",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Source",
"oldfieldname": "source",
"oldfieldtype": "Select",
@@ -943,6 +1145,8 @@
{
"fieldname": "campaign",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Campaign",
"oldfieldname": "campaign",
"oldfieldtype": "Link",
@@ -953,11 +1157,15 @@
"collapsible": 1,
"fieldname": "printing_details",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Print Settings"
},
{
"fieldname": "language",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Print Language",
"print_hide": 1,
"read_only": 1
@@ -966,6 +1174,8 @@
"allow_on_submit": 1,
"fieldname": "letter_head",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Letter Head",
"oldfieldname": "letter_head",
"oldfieldtype": "Select",
@@ -975,6 +1185,8 @@
{
"fieldname": "column_break4",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"oldfieldtype": "Column Break",
"print_hide": 1,
"width": "50%"
@@ -983,6 +1195,8 @@
"allow_on_submit": 1,
"fieldname": "select_print_heading",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Print Heading",
"no_copy": 1,
"oldfieldname": "select_print_heading",
@@ -996,6 +1210,8 @@
"default": "0",
"fieldname": "group_same_items",
"fieldtype": "Check",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Group same items",
"print_hide": 1
},
@@ -1003,6 +1219,8 @@
"collapsible": 1,
"fieldname": "section_break_78",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Billing and Delivery Status",
"oldfieldtype": "Column Break",
"print_hide": 1,
@@ -1012,6 +1230,8 @@
"default": "Draft",
"fieldname": "status",
"fieldtype": "Select",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_list_view": 1,
"label": "Status",
"no_copy": 1,
@@ -1028,6 +1248,8 @@
"fieldname": "delivery_status",
"fieldtype": "Select",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_standard_filter": 1,
"label": "Delivery Status",
"no_copy": 1,
@@ -1039,6 +1261,8 @@
"description": "% of materials delivered against this Sales Order",
"fieldname": "per_delivered",
"fieldtype": "Percent",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_list_view": 1,
"label": "% Delivered",
"no_copy": 1,
@@ -1050,13 +1274,17 @@
},
{
"fieldname": "column_break_81",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"depends_on": "eval:!doc.__islocal",
"description": "% of materials billed against this Sales Order",
"fieldname": "per_billed",
"fieldtype": "Percent",
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_list_view": 1,
"label": "% Amount Billed",
"no_copy": 1,
@@ -1070,6 +1298,8 @@
"fieldname": "billing_status",
"fieldtype": "Select",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"in_standard_filter": 1,
"label": "Billing Status",
"no_copy": 1,
@@ -1081,6 +1311,8 @@
"collapsible_depends_on": "commission_rate",
"fieldname": "sales_team_section_break",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Commission",
"oldfieldtype": "Section Break",
"options": "fa fa-group",
@@ -1089,6 +1321,8 @@
{
"fieldname": "sales_partner",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Partner",
"oldfieldname": "sales_partner",
"oldfieldtype": "Link",
@@ -1099,12 +1333,16 @@
{
"fieldname": "column_break7",
"fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"print_hide": 1,
"width": "50%"
},
{
"fieldname": "commission_rate",
"fieldtype": "Float",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Commission Rate",
"oldfieldname": "commission_rate",
"oldfieldtype": "Currency",
@@ -1114,6 +1352,8 @@
{
"fieldname": "total_commission",
"fieldtype": "Currency",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Total Commission",
"oldfieldname": "total_commission",
"oldfieldtype": "Currency",
@@ -1125,6 +1365,8 @@
"collapsible_depends_on": "sales_team",
"fieldname": "section_break1",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Team",
"print_hide": 1
},
@@ -1132,6 +1374,8 @@
"allow_on_submit": 1,
"fieldname": "sales_team",
"fieldtype": "Table",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Sales Team",
"oldfieldname": "sales_team",
"oldfieldtype": "Table",
@@ -1140,8 +1384,11 @@
},
{
"allow_on_submit": 1,
+ "collapsible": 1,
"fieldname": "subscription_section",
"fieldtype": "Section Break",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Auto Repeat Section",
"no_copy": 1,
"print_hide": 1,
@@ -1151,6 +1398,8 @@
"allow_on_submit": 1,
"fieldname": "from_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "From Date",
"no_copy": 1
},
@@ -1158,16 +1407,22 @@
"allow_on_submit": 1,
"fieldname": "to_date",
"fieldtype": "Date",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "To Date",
"no_copy": 1
},
{
"fieldname": "column_break_108",
- "fieldtype": "Column Break"
+ "fieldtype": "Column Break",
+ "hide_days": 1,
+ "hide_seconds": 1
},
{
"fieldname": "auto_repeat",
"fieldtype": "Link",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Auto Repeat",
"options": "Auto Repeat"
},
@@ -1176,11 +1431,15 @@
"depends_on": "eval: doc.auto_repeat",
"fieldname": "update_auto_repeat_reference",
"fieldtype": "Button",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Update Auto Repeat Reference"
},
{
"fieldname": "contact_phone",
"fieldtype": "Data",
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Phone",
"read_only": 1
},
@@ -1189,6 +1448,8 @@
"fieldname": "skip_delivery_note",
"fieldtype": "Check",
"hidden": 1,
+ "hide_days": 1,
+ "hide_seconds": 1,
"label": "Skip Delivery Note",
"print_hide": 1
}
@@ -1197,7 +1458,7 @@
"idx": 105,
"is_submittable": 1,
"links": [],
- "modified": "2020-05-19 21:39:19.486684",
+ "modified": "2020-06-30 11:56:42.301317",
"modified_by": "Administrator",
"module": "Selling",
"name": "Sales Order",
diff --git a/erpnext/selling/module_onboarding/selling/selling.json b/erpnext/selling/module_onboarding/selling/selling.json
index 10a33c9..160208f 100644
--- a/erpnext/selling/module_onboarding/selling/selling.json
+++ b/erpnext/selling/module_onboarding/selling/selling.json
@@ -19,7 +19,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/selling",
"idx": 0,
"is_complete": 0,
- "modified": "2020-06-01 13:35:16.100512",
+ "modified": "2020-07-08 14:05:37.669753",
"modified_by": "Administrator",
"module": "Selling",
"name": "Selling",
@@ -47,8 +47,7 @@
"step": "Selling Settings"
}
],
- "subtitle": "Products, Sales, Analysis and more.",
+ "subtitle": "Products, Sales, Analysis, and more.",
"success_message": "The Selling Module is all set up!",
- "title": "Let's Set Up the Selling Module.",
- "user_can_dismiss": 1
+ "title": "Let's Set Up the Selling Module."
}
\ No newline at end of file
diff --git a/erpnext/selling/onboarding_step/setup_your_warehouse/setup_your_warehouse.json b/erpnext/selling/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
index 557c905..9457dee 100644
--- a/erpnext/selling/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
+++ b/erpnext/selling/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
@@ -8,13 +8,13 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-19 18:54:19.383397",
+ "modified": "2020-07-04 12:33:16.970031",
"modified_by": "Administrator",
"name": "Setup your Warehouse",
"owner": "Administrator",
"path": "Tree/Warehouse",
"reference_document": "Warehouse",
"show_full_form": 0,
- "title": "Setup your Warehouse",
+ "title": "Set up your Warehouse",
"validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py
index dfa0f7f..1ae1fde 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.py
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.py
@@ -167,6 +167,7 @@
return cond % tuple(item_groups)
+@frappe.whitelist()
def item_group_query(doctype, txt, searchfield, start, page_len, filters):
item_groups = []
cond = "1=1"
@@ -187,4 +188,4 @@
@frappe.whitelist()
def get_pos_fields():
return frappe.get_all("POS Field", fields=["label", "fieldname",
- "fieldtype", "default_value", "reqd", "read_only", "options"])
\ No newline at end of file
+ "fieldtype", "default_value", "reqd", "read_only", "options"])
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index c371999..963c87a 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -987,6 +987,7 @@
"read_only": 1
},
{
+ "collapsible": 1,
"depends_on": "eval:(!doc.is_item_from_hub)",
"fieldname": "hub_publishing_sb",
"fieldtype": "Section Break",
@@ -1060,7 +1061,7 @@
"image_field": "image",
"links": [],
"max_attachments": 1,
- "modified": "2020-04-08 15:56:06.195722",
+ "modified": "2020-06-30 12:01:07.534447",
"modified_by": "Administrator",
"module": "Stock",
"name": "Item",
@@ -1122,4 +1123,4 @@
"sort_order": "DESC",
"title_field": "item_name",
"track_changes": 1
-}
+}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/item_alternative/item_alternative.py b/erpnext/stock/doctype/item_alternative/item_alternative.py
index da0c3b7..522dfc6 100644
--- a/erpnext/stock/doctype/item_alternative/item_alternative.py
+++ b/erpnext/stock/doctype/item_alternative/item_alternative.py
@@ -42,6 +42,7 @@
'alternative_item_code': self.alternative_item_code, 'name': ('!=', self.name)}):
frappe.throw(_("Already record exists for the item {0}").format(self.item_code))
+@frappe.whitelist()
def get_alternative_items(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql(""" (select alternative_item_code from `tabItem Alternative`
where item_code = %(item_code)s and alternative_item_code like %(txt)s)
@@ -52,4 +53,4 @@
""".format(start, page_len), {
"item_code": filters.get('item_code'),
"txt": '%' + txt + '%'
- })
\ No newline at end of file
+ })
diff --git a/erpnext/stock/doctype/item_price/item_price.json b/erpnext/stock/doctype/item_price/item_price.json
index 2e0ddfd..5f62381 100644
--- a/erpnext/stock/doctype/item_price/item_price.json
+++ b/erpnext/stock/doctype/item_price/item_price.json
@@ -172,7 +172,7 @@
"default": "Today",
"fieldname": "valid_from",
"fieldtype": "Date",
- "label": "Valid From "
+ "label": "Valid From"
},
{
"default": "0",
@@ -187,7 +187,7 @@
{
"fieldname": "valid_upto",
"fieldtype": "Date",
- "label": "Valid Upto "
+ "label": "Valid Upto"
},
{
"fieldname": "section_break_24",
@@ -208,7 +208,7 @@
"icon": "fa fa-flag",
"idx": 1,
"links": [],
- "modified": "2020-02-28 14:21:25.580331",
+ "modified": "2020-07-06 22:31:32.943475",
"modified_by": "Administrator",
"module": "Stock",
"name": "Item Price",
diff --git a/erpnext/stock/doctype/item_tax/item_tax.json b/erpnext/stock/doctype/item_tax/item_tax.json
index a93e463..ae36efc 100644
--- a/erpnext/stock/doctype/item_tax/item_tax.json
+++ b/erpnext/stock/doctype/item_tax/item_tax.json
@@ -1,5 +1,4 @@
{
- "actions": [],
"creation": "2013-02-22 01:28:01",
"doctype": "DocType",
"editable_grid": 1,
@@ -38,8 +37,7 @@
],
"idx": 1,
"istable": 1,
- "links": [],
- "modified": "2019-12-28 21:54:40.807849",
+ "modified": "2020-06-25 01:40:28.859752",
"modified_by": "Administrator",
"module": "Stock",
"name": "Item Tax",
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 97606f4..25f1ed9 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -402,6 +402,7 @@
return material_requests
+@frappe.whitelist()
def get_default_supplier_query(doctype, txt, searchfield, start, page_len, filters):
doc = frappe.get_doc("Material Request", filters.get("doc"))
item_list = []
@@ -567,4 +568,4 @@
doc.set_item_locations()
- return doc
\ No newline at end of file
+ return doc
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.py b/erpnext/stock/doctype/packing_slip/packing_slip.py
index 7a5ae31..4f831d7 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.py
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.py
@@ -175,6 +175,7 @@
self.update_item_details()
+@frappe.whitelist()
def item_details(doctype, txt, searchfield, start, page_len, filters):
from erpnext.controllers.queries import get_match_cond
return frappe.db.sql("""select name, item_name, description from `tabItem`
diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.py b/erpnext/stock/doctype/quality_inspection/quality_inspection.py
index 37ab807..568e742 100644
--- a/erpnext/stock/doctype/quality_inspection/quality_inspection.py
+++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.py
@@ -58,6 +58,7 @@
.format(parent_doc=self.reference_type, child_doc=doctype),
(quality_inspection, self.modified, self.reference_name, self.item_code))
+@frappe.whitelist()
def item_query(doctype, txt, searchfield, start, page_len, filters):
if filters.get("from"):
from frappe.desk.reportview import get_match_cond
@@ -86,6 +87,7 @@
page_len = page_len, qi_condition = qi_condition),
{'parent': filters.get('parent'), 'txt': "%%%s%%" % txt})
+@frappe.whitelist()
def quality_inspection_query(doctype, txt, searchfield, start, page_len, filters):
return frappe.get_all('Quality Inspection',
limit_start=start,
@@ -118,4 +120,4 @@
}
}, target_doc, postprocess)
- return doc
\ No newline at end of file
+ return doc
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index f3514c7..90f0f58 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -190,23 +190,6 @@
if sle_exists:
frappe.throw(_("Cannot delete Serial No {0}, as it is used in stock transactions").format(self.name))
- def before_rename(self, old, new, merge=False):
- if merge:
- frappe.throw(_("Sorry, Serial Nos cannot be merged"))
-
- def after_rename(self, old, new, merge=False):
- """rename serial_no text fields"""
- for dt in frappe.db.sql("""select parent from tabDocField
- where fieldname='serial_no' and fieldtype in ('Text', 'Small Text')"""):
-
- for item in frappe.db.sql("""select name, serial_no from `tab%s`
- where serial_no like %s""" % (dt[0], frappe.db.escape('%' + old + '%'))):
-
- serial_nos = map(lambda i: new if i.upper()==old.upper() else i, item[1].split('\n'))
- frappe.db.sql("""update `tab%s` set serial_no = %s
- where name=%s""" % (dt[0], '%s', '%s'),
- ('\n'.join(list(serial_nos)), item[0]))
-
def update_serial_no_reference(self, serial_no=None):
last_sle = self.get_last_sle(serial_no)
self.set_purchase_details(last_sle.get("purchase_sle"))
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 0ed3b27..1f30f5a 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -413,7 +413,7 @@
continue
out[item_code] = {}
item = frappe.get_cached_doc("Item", item_code)
- get_item_tax_template({"tax_category": tax_category}, item, out[item_code])
+ get_item_tax_template({"company": company, "tax_category": tax_category}, item, out[item_code])
out[item_code]["item_tax_rate"] = get_item_tax_map(company, out[item_code].get("item_tax_template"), as_json=True)
return out
@@ -442,7 +442,8 @@
taxes_with_no_validity = []
for tax in taxes:
- if tax.valid_from:
+ tax_company = frappe.get_value("Item Tax Template", tax.item_tax_template, 'company')
+ if tax.valid_from and tax_company == args['company']:
# In purchase Invoice first preference will be given to supplier invoice date
# if supplier date is not present then posting date
validation_date = args.get('transaction_date') or args.get('bill_date') or args.get('posting_date')
@@ -450,7 +451,8 @@
if getdate(tax.valid_from) <= getdate(validation_date):
taxes_with_validity.append(tax)
else:
- taxes_with_no_validity.append(tax)
+ if tax_company == args['company']:
+ taxes_with_no_validity.append(tax)
if taxes_with_validity:
taxes = sorted(taxes_with_validity, key = lambda i: i.valid_from, reverse=True)
@@ -636,6 +638,10 @@
if args.get('transaction_date'):
conditions += """ and %(transaction_date)s between
ifnull(valid_from, '2000-01-01') and ifnull(valid_upto, '2500-12-31')"""
+
+ if args.get('posting_date'):
+ conditions += """ and %(posting_date)s between
+ ifnull(valid_from, '2000-01-01') and ifnull(valid_upto, '2500-12-31')"""
return frappe.db.sql(""" select name, price_list_rate, uom
from `tabItem Price` {conditions}
@@ -657,6 +663,7 @@
"supplier": args.get('supplier'),
"uom": args.get('uom'),
"transaction_date": args.get('transaction_date'),
+ "posting_date": args.get('posting_date'),
}
item_price_data = 0
diff --git a/erpnext/stock/module_onboarding/stock/stock.json b/erpnext/stock/module_onboarding/stock/stock.json
index 10f05d4..1d5bf8c 100644
--- a/erpnext/stock/module_onboarding/stock/stock.json
+++ b/erpnext/stock/module_onboarding/stock/stock.json
@@ -19,7 +19,7 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/stock",
"idx": 0,
"is_complete": 0,
- "modified": "2020-06-29 16:41:09.440378",
+ "modified": "2020-07-08 14:22:07.951891",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock",
@@ -47,7 +47,7 @@
"step": "Stock Settings"
}
],
- "subtitle": "Inventory, Warehouses, Analysis and more.",
+ "subtitle": "Inventory, Warehouses, Analysis, and more.",
"success_message": "The Stock Module is all set up!",
"title": "Let's Set Up the Stock Module."
}
\ No newline at end of file
diff --git a/erpnext/stock/onboarding_step/create_a_supplier/create_a_supplier.json b/erpnext/stock/onboarding_step/create_a_supplier/create_a_supplier.json
index 4e753f4..7a64224 100644
--- a/erpnext/stock/onboarding_step/create_a_supplier/create_a_supplier.json
+++ b/erpnext/stock/onboarding_step/create_a_supplier/create_a_supplier.json
@@ -8,7 +8,7 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-06-29 16:36:53.948242",
+ "modified": "2020-05-14 22:09:10.043554",
"modified_by": "Administrator",
"name": "Create a Supplier",
"owner": "Administrator",
diff --git a/erpnext/stock/onboarding_step/setup_your_warehouse/setup_your_warehouse.json b/erpnext/stock/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
index 557c905..9457dee 100644
--- a/erpnext/stock/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
+++ b/erpnext/stock/onboarding_step/setup_your_warehouse/setup_your_warehouse.json
@@ -8,13 +8,13 @@
"is_mandatory": 0,
"is_single": 0,
"is_skipped": 0,
- "modified": "2020-05-19 18:54:19.383397",
+ "modified": "2020-07-04 12:33:16.970031",
"modified_by": "Administrator",
"name": "Setup your Warehouse",
"owner": "Administrator",
"path": "Tree/Warehouse",
"reference_document": "Warehouse",
"show_full_form": 0,
- "title": "Setup your Warehouse",
+ "title": "Set up your Warehouse",
"validate_action": 1
}
\ No newline at end of file
diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
index 6a86889..5873a7a 100644
--- a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
+++ b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
@@ -21,7 +21,7 @@
for cd in consumed_details.get(item_code):
if (cd.voucher_no not in material_transfer_vouchers):
- if cd.voucher_type=="Delivery Note":
+ if cd.voucher_type in ["Delivery Note", "Sales Invoice"]:
delivered_qty += abs(flt(cd.actual_qty))
delivered_amount += abs(flt(cd.stock_value_difference))
elif cd.voucher_type!="Delivery Note":
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index 2359648..c8e3330 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -120,6 +120,15 @@
def validate_rate_with_reference_doc(self, ref_details):
+ buying_doctypes = ["Purchase Order", "Purchase Invoice", "Purchase Receipt"]
+
+ if self.doctype in buying_doctypes:
+ to_disable = "Maintain same rate throughout Purchase cycle"
+ settings_page = "Buying Settings"
+ else:
+ to_disable = "Maintain same rate throughout Sales cycle"
+ settings_page = "Selling Settings"
+
for ref_dt, ref_dn_field, ref_link_field in ref_details:
for d in self.get("items"):
if d.get(ref_link_field):
@@ -129,8 +138,8 @@
frappe.msgprint(_("Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ")
.format(d.idx, ref_dt, d.get(ref_dn_field), d.rate, ref_rate))
frappe.throw(_("To allow different rates, disable the {0} checkbox in {1}.")
- .format(frappe.bold(_("Maintain Same Rate Throughout Sales Cycle")),
- get_link_to_form("Selling Settings", "Selling Settings", frappe.bold("Selling Settings"))))
+ .format(frappe.bold(_(to_disable)),
+ get_link_to_form(settings_page, settings_page, frappe.bold(settings_page))))
def get_link_filters(self, for_doctype):
if hasattr(self, "prev_link_mapper") and self.prev_link_mapper.get(for_doctype):