Merge pull request #18095 from scmmishra/remove-move-stock-summary
refactor: move and add for serialized and batch items in stock summary
diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js
index dc4c69d..b70c6d2 100644
--- a/erpnext/accounts/doctype/account/account_tree.js
+++ b/erpnext/accounts/doctype/account/account_tree.js
@@ -121,7 +121,7 @@
},
onrender: function(node) {
if(frappe.boot.user.can_read.indexOf("GL Entry") !== -1){
- var dr_or_cr = node.data.balance < 0 ? "Cr" : "Dr";
+ var dr_or_cr = in_list(["Liability", "Income", "Equity"], node.data.root_type) ? "Cr" : "Dr";
if (node.data && node.data.balance!==undefined) {
$('<span class="balance-area pull-right text-muted small">'
+ (node.data.balance_in_account_currency ?
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
index dd20632..ffb6d5e 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
@@ -10,6 +10,14 @@
});
}
+ frm.set_query('document_type', () => {
+ return {
+ filters: {
+ name: ['not in', ['Accounting Dimension', 'Project', 'Cost Center']]
+ }
+ };
+ });
+
let button = frm.doc.disabled ? "Enable" : "Disable";
frm.add_custom_button(__(button), function() {
@@ -33,10 +41,10 @@
document_type: function(frm) {
frm.set_value('label', frm.doc.document_type);
- frm.set_value('fieldname', frappe.scrub(frm.doc.document_type));
+ frm.set_value('fieldname', frappe.model.scrub(frm.doc.document_type));
frappe.db.get_value('Accounting Dimension', {'document_type': frm.doc.document_type}, 'document_type', (r) => {
- if (r.document_type) {
+ if (r && r.document_type) {
frm.set_df_property('document_type', 'description', "Document type is already set as dimension");
}
});
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json
index 57543a0..6a4dc5c 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json
@@ -38,6 +38,7 @@
"default": "0",
"fieldname": "disabled",
"fieldtype": "Check",
+ "hidden": 1,
"label": "Disable",
"read_only": 1
},
@@ -54,7 +55,7 @@
"label": "Mandatory For Profit and Loss Account"
}
],
- "modified": "2019-07-07 18:56:19.517450",
+ "modified": "2019-07-14 17:25:01.307948",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Dimension",
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
index 15ace72..3148498 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
@@ -155,7 +155,7 @@
return doclist
def get_accounting_dimensions(as_list=True):
- accounting_dimensions = frappe.get_all("Accounting Dimension", fields=["label", "fieldname", "mandatory_for_pl", "mandatory_for_bs", "disabled"])
+ accounting_dimensions = frappe.get_all("Accounting Dimension", fields=["label", "fieldname", "mandatory_for_pl", "mandatory_for_bs", "disabled"], filters={"disabled": 0})
if as_list:
return [d.fieldname for d in accounting_dimensions]
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
index c2372bd..4ff4212 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
@@ -10,6 +10,7 @@
"acc_frozen_upto",
"frozen_accounts_modifier",
"determine_address_tax_category_from",
+ "over_billing_allowance",
"column_break_4",
"credit_controller",
"check_supplier_invoice_uniqueness",
@@ -168,12 +169,18 @@
"fieldname": "automatically_fetch_payment_terms",
"fieldtype": "Check",
"label": "Automatically Fetch Payment Terms"
+ },
+ {
+ "description": "Percentage you are allowed to bill more against the amount ordered. For example: If the order value is $100 for an item and tolerance is set as 10% then you are allowed to bill for $110.",
+ "fieldname": "over_billing_allowance",
+ "fieldtype": "Currency",
+ "label": "Over Billing Allowance (%)"
}
],
"icon": "icon-cog",
"idx": 1,
"issingle": 1,
- "modified": "2019-04-28 18:20:55.789946",
+ "modified": "2019-07-04 18:20:55.789946",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",
@@ -200,4 +207,4 @@
"quick_entry": 1,
"sort_order": "ASC",
"track_changes": 1
- }
\ No newline at end of file
+ }
diff --git a/erpnext/accounts/doctype/discounted_invoice/discounted_invoice.json b/erpnext/accounts/doctype/discounted_invoice/discounted_invoice.json
index 0d04b19..8d7ed74 100644
--- a/erpnext/accounts/doctype/discounted_invoice/discounted_invoice.json
+++ b/erpnext/accounts/doctype/discounted_invoice/discounted_invoice.json
@@ -1,177 +1,64 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
"creation": "2019-03-07 12:07:09.416101",
- "custom": 0,
- "docstatus": 0,
"doctype": "DocType",
- "document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
+ "field_order": [
+ "sales_invoice",
+ "customer",
+ "column_break_3",
+ "posting_date",
+ "outstanding_amount"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "sales_invoice",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Invoice",
- "length": 0,
- "no_copy": 0,
"options": "Sales Invoice",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fetch_from": "sales_invoice.customer",
"fieldname": "customer",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Customer",
- "length": 0,
- "no_copy": 0,
"options": "Customer",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fetch_from": "sales_invoice.posting_date",
"fieldname": "posting_date",
"fieldtype": "Date",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Date",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fetch_from": "sales_invoice.grand_total",
"fieldname": "outstanding_amount",
"fieldtype": "Currency",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Outstanding Amount",
- "length": 0,
- "no_copy": 0,
"options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
+ },
+ {
+ "fieldname": "column_break_3",
+ "fieldtype": "Column Break"
}
],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
"istable": 1,
- "max_attachments": 0,
- "modified": "2019-03-07 16:38:03.622666",
+ "modified": "2019-05-30 19:27:29.436153",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Discounted Invoice",
- "name_case": "",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
+ "track_changes": 1
}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index c543225..84276ea 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -91,13 +91,13 @@
if account_type == "Profit and Loss" \
and dimension.mandatory_for_pl and not dimension.disabled:
if not self.get(dimension.fieldname):
- frappe.throw(_("{0} is required for 'Profit and Loss' account {1}.")
+ frappe.throw(_("Accounting Dimension <b>{0}</b> is required for 'Profit and Loss' account {1}.")
.format(dimension.label, self.account))
if account_type == "Balance Sheet" \
and dimension.mandatory_for_bs and not dimension.disabled:
if not self.get(dimension.fieldname):
- frappe.throw(_("{0} is required for 'Balance Sheet' account {1}.")
+ frappe.throw(_("Accounting Dimension <b>{0}</b> is required for 'Balance Sheet' account {1}.")
.format(dimension.label, self.account))
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.json b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.json
index 8927ca7..3bfe259 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.json
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.json
@@ -1,744 +1,177 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
"allow_import": 1,
- "allow_rename": 0,
"autoname": "ACC-INV-DISC-.YYYY.-.#####",
- "beta": 0,
"creation": "2019-03-07 12:01:56.296952",
- "custom": 0,
- "docstatus": 0,
"doctype": "DocType",
- "document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
+ "field_order": [
+ "posting_date",
+ "loan_start_date",
+ "loan_period",
+ "loan_end_date",
+ "column_break_3",
+ "status",
+ "company",
+ "section_break_5",
+ "invoices",
+ "section_break_7",
+ "total_amount",
+ "column_break_9",
+ "bank_charges",
+ "section_break_6",
+ "short_term_loan",
+ "bank_account",
+ "bank_charges_account",
+ "column_break_15",
+ "accounts_receivable_credit",
+ "accounts_receivable_discounted",
+ "accounts_receivable_unpaid",
+ "amended_from"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
+ "default": "Today",
"fieldname": "posting_date",
"fieldtype": "Date",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Posting Date",
- "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,
- "translatable": 0,
- "unique": 0
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "loan_start_date",
"fieldtype": "Date",
- "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": "Loan Start Date",
- "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,
- "translatable": 0,
- "unique": 0
+ "label": "Loan Start Date"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "loan_period",
"fieldtype": "Int",
- "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": "Loan Period",
- "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,
- "translatable": 0,
- "unique": 0
+ "label": "Loan Period (Days)"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "loan_end_date",
"fieldtype": "Date",
- "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": "Loan End Date",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "column_break_3",
- "fieldtype": "Column Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Column Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "status",
"fieldtype": "Select",
- "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": "Status",
- "length": 0,
"no_copy": 1,
"options": "Draft\nSanctioned\nDisbursed\nSettled\nCancelled",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "company",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Company",
- "length": 0,
- "no_copy": 0,
"options": "Company",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "section_break_5",
- "fieldtype": "Section Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Section Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "invoices",
"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": "Invoices",
- "length": 0,
- "no_copy": 0,
"options": "Discounted Invoice",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "section_break_7",
- "fieldtype": "Section Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Section Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "total_amount",
"fieldtype": "Currency",
- "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": "Total Amount",
- "length": 0,
- "no_copy": 0,
"options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "column_break_9",
- "fieldtype": "Column Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Column Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "bank_charges",
"fieldtype": "Currency",
- "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": "Bank Charges",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Company:company:default_currency"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "section_break_6",
- "fieldtype": "Section Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Section Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "short_term_loan",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Short Term Loan Account",
- "length": 0,
- "no_copy": 0,
"options": "Account",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "bank_account",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Bank Account",
- "length": 0,
- "no_copy": 0,
"options": "Account",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "bank_charges_account",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Bank Charges Account",
- "length": 0,
- "no_copy": 0,
"options": "Account",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "column_break_15",
- "fieldtype": "Column Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Column Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "accounts_receivable_credit",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Accounts Receivable Credit Account",
- "length": 0,
- "no_copy": 0,
"options": "Account",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "accounts_receivable_discounted",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Accounts Receivable Discounted Account",
- "length": 0,
- "no_copy": 0,
"options": "Account",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "accounts_receivable_unpaid",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Accounts Receivable Unpaid Account",
- "length": 0,
- "no_copy": 0,
"options": "Account",
- "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
+ "reqd": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "amended_from",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Amended From",
- "length": 0,
"no_copy": 1,
"options": "Invoice Discounting",
- "permlevel": 0,
"print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
}
],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
"is_submittable": 1,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2019-03-08 14:24:31.222027",
+ "modified": "2019-05-30 19:08:21.199759",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Invoice Discounting",
- "name_case": "",
"owner": "Administrator",
"permissions": [
{
@@ -748,26 +181,17 @@
"delete": 1,
"email": 1,
"export": 1,
- "if_owner": 0,
"import": 1,
- "permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
- "set_user_permissions": 0,
"share": 1,
"submit": 1,
"write": 1
}
],
- "quick_entry": 0,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
+ "track_changes": 1
}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
index c8756af..29475d5 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
@@ -28,18 +28,39 @@
self.total_amount = sum([flt(d.outstanding_amount) for d in self.invoices])
def on_submit(self):
+ self.update_sales_invoice()
self.make_gl_entries()
def on_cancel(self):
self.set_status()
+ self.update_sales_invoice()
self.make_gl_entries()
- def set_status(self):
- self.status = "Draft"
- if self.docstatus == 1:
- self.status = "Sanctioned"
- elif self.docstatus == 2:
- self.status = "Cancelled"
+ def set_status(self, status=None):
+ if status:
+ self.status = status
+ self.db_set("status", status)
+ for d in self.invoices:
+ frappe.get_doc("Sales Invoice", d.sales_invoice).set_status(update=True, update_modified=False)
+ else:
+ self.status = "Draft"
+ if self.docstatus == 1:
+ self.status = "Sanctioned"
+ elif self.docstatus == 2:
+ self.status = "Cancelled"
+
+ def update_sales_invoice(self):
+ for d in self.invoices:
+ if self.docstatus == 1:
+ is_discounted = 1
+ else:
+ discounted_invoice = frappe.db.exists({
+ "doctype": "Discounted Invoice",
+ "sales_invoice": d.sales_invoice,
+ "docstatus": 1
+ })
+ is_discounted = 1 if discounted_invoice else 0
+ frappe.db.set_value("Sales Invoice", d.sales_invoice, "is_discounted", is_discounted)
def make_gl_entries(self):
company_currency = frappe.get_cached_value('Company', self.company, "default_currency")
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 8fbddb9..eb75d0d 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -105,24 +105,28 @@
invoice_discounting_list = list(set([d.reference_name for d in self.accounts if d.reference_type=="Invoice Discounting"]))
for inv_disc in invoice_discounting_list:
- short_term_loan_account, id_status = frappe.db.get_value("Invoice Discounting", inv_disc, ["short_term_loan", "status"])
+ inv_disc_doc = frappe.get_doc("Invoice Discounting", inv_disc)
+ status = None
for d in self.accounts:
- if d.account == short_term_loan_account and d.reference_name == inv_disc:
+ if d.account == inv_disc_doc.short_term_loan and d.reference_name == inv_disc:
if self.docstatus == 1:
if d.credit > 0:
- _validate_invoice_discounting_status(inv_disc, id_status, "Sanctioned", d.idx)
+ _validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Sanctioned", d.idx)
status = "Disbursed"
elif d.debit > 0:
- _validate_invoice_discounting_status(inv_disc, id_status, "Disbursed", d.idx)
+ _validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Disbursed", d.idx)
status = "Settled"
else:
if d.credit > 0:
- _validate_invoice_discounting_status(inv_disc, id_status, "Disbursed", d.idx)
+ _validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Disbursed", d.idx)
status = "Sanctioned"
elif d.debit > 0:
- _validate_invoice_discounting_status(inv_disc, id_status, "Settled", d.idx)
+ _validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Settled", d.idx)
status = "Disbursed"
- frappe.db.set_value("Invoice Discounting", inv_disc, "status", status)
+ break
+ if status:
+ inv_disc_doc.set_status(status=status)
+
def unlink_advance_entry_reference(self):
for d in self.get("accounts"):
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 699f046..3683898 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -601,7 +601,7 @@
condition += " and company = {0}".format(frappe.db.escape(args.get("company")))
outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"),
- args.get("party_account"), filters=args, condition=condition, limit=100)
+ args.get("party_account"), filters=args, condition=condition)
for d in outstanding_invoices:
d["exchange_rate"] = 1
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index c3c3e26..1fe6895 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -83,10 +83,14 @@
}
}
- if (doc.outstanding_amount>0 && !cint(doc.is_return)) {
+ if (doc.outstanding_amount>0) {
cur_frm.add_custom_button(__('Payment Request'), function() {
me.make_payment_request();
}, __('Create'));
+
+ cur_frm.add_custom_button(__('Invoice Discounting'), function() {
+ cur_frm.events.create_invoice_discounting(cur_frm);
+ }, __('Create'));
}
if (doc.docstatus === 1) {
@@ -808,6 +812,13 @@
frm.set_df_property("patient_name", "hidden", 1);
frm.set_df_property("ref_practitioner", "hidden", 1);
}
+ },
+
+ create_invoice_discounting: function(frm) {
+ frappe.model.open_mapped_doc({
+ method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.create_invoice_discounting",
+ frm: frm
+ });
}
})
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index 4aec1c8..1f57836 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -155,6 +155,7 @@
"inter_company_invoice_reference",
"customer_group",
"campaign",
+ "is_discounted",
"col_break23",
"status",
"source",
@@ -1325,6 +1326,13 @@
"print_hide": 1
},
{
+ "fieldname": "is_discounted",
+ "fieldtype": "Check",
+ "label": "Is Discounted",
+ "no_copy": 1,
+ "read_only": 1
+ },
+ {
"fieldname": "col_break23",
"fieldtype": "Column Break",
"width": "50%"
@@ -1336,7 +1344,7 @@
"in_standard_filter": 1,
"label": "Status",
"no_copy": 1,
- "options": "\nDraft\nReturn\nCredit Note Issued\nSubmitted\nPaid\nUnpaid\nOverdue\nCancelled",
+ "options": "\nDraft\nReturn\nCredit Note Issued\nSubmitted\nPaid\nUnpaid\nUnpaid and Discounted\nOverdue and Discounted\nOverdue\nOverdue\nCancelled",
"print_hide": 1,
"read_only": 1
},
@@ -1558,7 +1566,7 @@
"icon": "fa fa-file-text",
"idx": 181,
"is_submittable": 1,
- "modified": "2019-05-25 22:05:03.474745",
+ "modified": "2019-07-04 22:05:03.474745",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",
@@ -1612,4 +1620,4 @@
"title_field": "title",
"track_changes": 1,
"track_seen": 1
- }
\ No newline at end of file
+ }
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index f8bb971..88ad6b3 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -1177,6 +1177,56 @@
self.set_missing_values(for_validate = True)
+ def get_discounting_status(self):
+ status = None
+ if self.is_discounted:
+ invoice_discounting_list = frappe.db.sql("""
+ select status
+ from `tabInvoice Discounting` id, `tabDiscounted Invoice` d
+ where
+ id.name = d.parent
+ and d.sales_invoice=%s
+ and id.docstatus=1
+ and status in ('Disbursed', 'Settled')
+ """, self.name)
+ for d in invoice_discounting_list:
+ status = d[0]
+ if status == "Disbursed":
+ break
+ return status
+
+ def set_status(self, update=False, status=None, update_modified=True):
+ if self.is_new():
+ if self.get('amended_from'):
+ self.status = 'Draft'
+ return
+
+ if not status:
+ if self.docstatus == 2:
+ status = "Cancelled"
+ elif self.docstatus == 1:
+ if flt(self.outstanding_amount) > 0 and getdate(self.due_date) < getdate(nowdate()) and self.is_discounted and self.get_discounting_status()=='Disbursed':
+ self.status = "Overdue and Discounted"
+ elif flt(self.outstanding_amount) > 0 and getdate(self.due_date) < getdate(nowdate()):
+ self.status = "Overdue"
+ elif flt(self.outstanding_amount) > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.is_discounted and self.get_discounting_status()=='Disbursed':
+ self.status = "Unpaid and Discounted"
+ elif flt(self.outstanding_amount) > 0 and getdate(self.due_date) >= getdate(nowdate()):
+ self.status = "Unpaid"
+ elif flt(self.outstanding_amount) < 0 and self.is_return==0 and frappe.db.get_value('Sales Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1}):
+ self.status = "Credit Note Issued"
+ elif self.is_return == 1:
+ self.status = "Return"
+ elif flt(self.outstanding_amount)<=0:
+ self.status = "Paid"
+ else:
+ self.status = "Submitted"
+ else:
+ self.status = "Draft"
+
+ if update:
+ self.db_set('status', self.status, update_modified = update_modified)
+
def validate_inter_company_party(doctype, party, company, inter_company_reference):
if not party:
return
@@ -1431,4 +1481,18 @@
frappe.db.set(customer, 'loyalty_program', lp_details[0])
return []
else:
- return lp_details
\ No newline at end of file
+ return lp_details
+
+@frappe.whitelist()
+def create_invoice_discounting(source_name, target_doc=None):
+ invoice = frappe.get_doc("Sales Invoice", source_name)
+ invoice_discounting = frappe.new_doc("Invoice Discounting")
+ invoice_discounting.company = invoice.company
+ invoice_discounting.append("invoices", {
+ "sales_invoice": source_name,
+ "customer": invoice.customer,
+ "posting_date": invoice.posting_date,
+ "outstanding_amount": invoice.outstanding_amount
+ })
+
+ return invoice_discounting
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
index 52d2924..05d49df 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
@@ -6,17 +6,18 @@
add_fields: ["customer", "customer_name", "base_grand_total", "outstanding_amount", "due_date", "company",
"currency", "is_return"],
get_indicator: function(doc) {
- if(flt(doc.outstanding_amount) < 0) {
- return [__("Credit Note Issued"), "darkgrey", "outstanding_amount,<,0"]
- } else if (flt(doc.outstanding_amount) > 0 && doc.due_date >= frappe.datetime.get_today()) {
- return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"]
- } else if (flt(doc.outstanding_amount) > 0 && doc.due_date < frappe.datetime.get_today()) {
- return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"]
- } else if(cint(doc.is_return)) {
- return [__("Return"), "darkgrey", "is_return,=,Yes"];
- } else if(flt(doc.outstanding_amount)==0) {
- return [__("Paid"), "green", "outstanding_amount,=,0"]
- }
+ var status_color = {
+ "Draft": "grey",
+ "Unpaid": "orange",
+ "Paid": "green",
+ "Return": "darkgrey",
+ "Credit Note Issued": "darkgrey",
+ "Unpaid and Discounted": "orange",
+ "Overdue and Discounted": "red",
+ "Overdue": "red"
+
+ };
+ return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
},
right_column: "grand_total"
};
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js
index f6a561f..cfcc575 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.js
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js
@@ -89,6 +89,12 @@
}
},
{
+ "fieldname":"payment_terms_template",
+ "label": __("Payment Terms Template"),
+ "fieldtype": "Link",
+ "options": "Payment Terms Template"
+ },
+ {
"fieldname":"supplier_group",
"label": __("Supplier Group"),
"fieldtype": "Link",
diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
index ec4f0c9..006068a 100644
--- a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
+++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
@@ -78,6 +78,12 @@
"options": "Supplier"
},
{
+ "fieldname":"payment_terms_template",
+ "label": __("Payment Terms Template"),
+ "fieldtype": "Link",
+ "options": "Payment Terms Template"
+ },
+ {
"fieldname":"supplier_group",
"label": __("Supplier Group"),
"fieldtype": "Link",
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 0cda2c1..ecf149b 100755
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -541,6 +541,10 @@
where supplier_group=%s)""")
values.append(self.filters.get("supplier_group"))
+ if self.filters.get("payment_terms_template"):
+ conditions.append("party in (select name from tabSupplier where payment_terms=%s)")
+ values.append(self.filters.get("payment_terms_template"))
+
if self.filters.get("cost_center"):
lft, rgt = frappe.get_cached_value("Cost Center",
self.filters.get("cost_center"), ['lft', 'rgt'])
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index f7c0250..86fd108 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -11,6 +11,7 @@
from erpnext.accounts.report.financial_statements import get_cost_centers_with_children
from six import iteritems
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from collections import OrderedDict
def execute(filters=None):
if not filters:
@@ -274,7 +275,7 @@
return 'voucher_no'
def initialize_gle_map(gl_entries, filters):
- gle_map = frappe._dict()
+ gle_map = OrderedDict()
group_by = group_by_field(filters.get('group_by'))
for gle in gl_entries:
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 542c7e4..e41c74c 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -104,6 +104,9 @@
# get balance of all entries that exist
date = nowdate()
+ if account:
+ acc = frappe.get_doc("Account", account)
+
try:
year_start_date = get_fiscal_year(date, verbose=0)[1]
except FiscalYearError:
@@ -118,7 +121,7 @@
allow_cost_center_in_entry_of_bs_account = get_allow_cost_center_in_entry_of_bs_account()
- if cost_center and allow_cost_center_in_entry_of_bs_account:
+ if cost_center and (allow_cost_center_in_entry_of_bs_account or acc.report_type =='Profit and Loss'):
cc = frappe.get_doc("Cost Center", cost_center)
if cc.is_group:
cond.append(""" exists (
@@ -132,20 +135,13 @@
if account:
- acc = frappe.get_doc("Account", account)
-
if not frappe.flags.ignore_account_permission:
acc.check_permission("read")
-
- if not allow_cost_center_in_entry_of_bs_account and acc.report_type == 'Profit and Loss':
+ if acc.report_type == 'Profit and Loss':
# for pl accounts, get balance within a fiscal year
cond.append("posting_date >= '%s' and voucher_type != 'Period Closing Voucher'" \
% year_start_date)
- elif allow_cost_center_in_entry_of_bs_account:
- # for all accounts, get balance within a fiscal year if maintain cost center in balance account is checked
- cond.append("posting_date >= '%s' and voucher_type != 'Period Closing Voucher'" \
- % year_start_date)
# different filter for group and ledger - improved performance
if acc.is_group:
cond.append("""exists (
@@ -734,6 +730,7 @@
parent_fieldname = 'parent_' + doctype.lower().replace(' ', '_')
fields = [
'name as value',
+ 'root_type',
'is_group as expandable'
]
filters = [['docstatus', '<', 2]]
@@ -741,7 +738,7 @@
filters.append(['ifnull(`{0}`,"")'.format(parent_fieldname), '=', '' if is_root else parent])
if is_root:
- fields += ['root_type', 'report_type', 'account_currency'] if doctype == 'Account' else []
+ fields += ['report_type', 'account_currency'] if doctype == 'Account' else []
filters.append(['company', '=', company])
else:
diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index be68594..ff0b65b 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -4,6 +4,7 @@
from __future__ import unicode_literals
import unittest
import frappe
+import json
import frappe.defaults
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
from frappe.utils import flt, add_days, nowdate, getdate
@@ -15,7 +16,7 @@
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
from erpnext.controllers.accounts_controller import update_child_qty_rate
-import json
+from erpnext.controllers.status_updater import OverAllowanceError
class TestPurchaseOrder(unittest.TestCase):
def test_make_purchase_receipt(self):
@@ -41,7 +42,7 @@
po.load_from_db()
self.assertEqual(po.get("items")[0].received_qty, 4)
- frappe.db.set_value('Item', '_Test Item', 'tolerance', 50)
+ frappe.db.set_value('Item', '_Test Item', 'over_delivery_receipt_allowance', 50)
pr = create_pr_against_po(po.name, received_qty=8)
self.assertEqual(get_ordered_qty(), existing_ordered_qty)
@@ -57,12 +58,12 @@
def test_ordered_qty_against_pi_with_update_stock(self):
existing_ordered_qty = get_ordered_qty()
-
po = create_purchase_order()
self.assertEqual(get_ordered_qty(), existing_ordered_qty + 10)
- frappe.db.set_value('Item', '_Test Item', 'tolerance', 50)
+ frappe.db.set_value('Item', '_Test Item', 'over_delivery_receipt_allowance', 50)
+ frappe.db.set_value('Item', '_Test Item', 'over_billing_allowance', 20)
pi = make_pi_from_po(po.name)
pi.update_stock = 1
@@ -81,6 +82,11 @@
po.load_from_db()
self.assertEqual(po.get("items")[0].received_qty, 0)
+ frappe.db.set_value('Item', '_Test Item', 'over_delivery_receipt_allowance', 0)
+ frappe.db.set_value('Item', '_Test Item', 'over_billing_allowance', 0)
+ frappe.db.set_value("Accounts Settings", None, "over_billing_allowance", 0)
+
+
def test_update_child_qty_rate(self):
mr = make_material_request(qty=10)
po = make_purchase_order(mr.name)
diff --git a/erpnext/config/accounting.py b/erpnext/config/accounting.py
index ce1384a..ab75f21 100644
--- a/erpnext/config/accounting.py
+++ b/erpnext/config/accounting.py
@@ -6,11 +6,12 @@
def get_data():
config = [
{
- "label": _("Masters and Accounts"),
+ "label": _("Accounts Receivable"),
"items": [
{
"type": "doctype",
- "name": "Item",
+ "name": "Sales Invoice",
+ "description": _("Bills raised to Customers."),
"onboard": 1,
},
{
@@ -21,12 +22,115 @@
},
{
"type": "doctype",
+ "name": "Payment Entry",
+ "description": _("Bank/Cash transactions against party or for internal transfer")
+ },
+ {
+ "type": "doctype",
+ "name": "Payment Request",
+ "description": _("Payment Request"),
+ },
+ {
+ "type": "report",
+ "name": "Accounts Receivable",
+ "doctype": "Sales Invoice",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Accounts Receivable Summary",
+ "doctype": "Sales Invoice",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Sales Register",
+ "doctype": "Sales Invoice",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Item-wise Sales Register",
+ "is_query_report": True,
+ "doctype": "Sales Invoice"
+ },
+ {
+ "type": "report",
+ "name": "Ordered Items To Be Billed",
+ "is_query_report": True,
+ "doctype": "Sales Invoice"
+ },
+ {
+ "type": "report",
+ "name": "Delivered Items To Be Billed",
+ "is_query_report": True,
+ "doctype": "Sales Invoice"
+ },
+ ]
+ },
+ {
+ "label": _("Accounts Payable"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Purchase Invoice",
+ "description": _("Bills raised by Suppliers."),
+ "onboard": 1
+ },
+ {
+ "type": "doctype",
"name": "Supplier",
"description": _("Supplier database."),
"onboard": 1,
},
{
"type": "doctype",
+ "name": "Payment Entry",
+ "description": _("Bank/Cash transactions against party or for internal transfer")
+ },
+ {
+ "type": "report",
+ "name": "Accounts Payable",
+ "doctype": "Purchase Invoice",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Accounts Payable Summary",
+ "doctype": "Purchase Invoice",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Purchase Register",
+ "doctype": "Purchase Invoice",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Item-wise Purchase Register",
+ "is_query_report": True,
+ "doctype": "Purchase Invoice"
+ },
+ {
+ "type": "report",
+ "name": "Purchase Order Items To Be Billed",
+ "is_query_report": True,
+ "doctype": "Purchase Invoice"
+ },
+ {
+ "type": "report",
+ "name": "Received Items To Be Billed",
+ "is_query_report": True,
+ "doctype": "Purchase Invoice"
+ },
+ ]
+ },
+ {
+ "label": _("Accounting Masters"),
+ "items": [
+ {
+ "type": "doctype",
"name": "Company",
"description": _("Company (not Customer or Supplier) master."),
"onboard": 1,
@@ -40,70 +144,9 @@
"description": _("Tree of financial accounts."),
"onboard": 1,
},
- ]
- },
- {
- "label": _("Billing"),
- "items": [
- {
- "type": "doctype",
- "name": "Sales Invoice",
- "description": _("Bills raised to Customers."),
- "onboard": 1,
- },
- {
- "type": "doctype",
- "name": "Purchase Invoice",
- "description": _("Bills raised by Suppliers."),
- "onboard": 1
- },
- {
- "type": "doctype",
- "name": "Payment Request",
- "description": _("Payment Request"),
- },
- {
- "type": "doctype",
- "name": "Payment Term",
- "description": _("Payment Terms based on conditions")
- },
-
- # Reports
- {
- "type": "report",
- "name": "Ordered Items To Be Billed",
- "is_query_report": True,
- "reference_doctype": "Sales Invoice"
- },
- {
- "type": "report",
- "name": "Delivered Items To Be Billed",
- "is_query_report": True,
- "reference_doctype": "Sales Invoice"
- },
- {
- "type": "report",
- "name": "Purchase Order Items To Be Billed",
- "is_query_report": True,
- "reference_doctype": "Purchase Invoice"
- },
- {
- "type": "report",
- "name": "Received Items To Be Billed",
- "is_query_report": True,
- "reference_doctype": "Purchase Invoice"
- },
- ]
-
- },
- {
- "label": _("Settings"),
- "icon": "fa fa-cog",
- "items": [
{
"type": "doctype",
"name": "Accounts Settings",
- "description": _("Default settings for accounting transactions.")
},
{
"type": "doctype",
@@ -112,129 +155,20 @@
},
{
"type": "doctype",
- "name": "Currency",
- "description": _("Enable / disable currencies.")
- },
- {
- "type": "doctype",
- "name": "Currency Exchange",
- "description": _("Currency exchange rate master.")
- },
- {
- "type": "doctype",
- "name": "Exchange Rate Revaluation",
- "description": _("Exchange Rate Revaluation master.")
- },
- {
- "type": "doctype",
- "name": "Payment Gateway Account",
- "description": _("Setup Gateway accounts.")
- },
- {
- "type": "doctype",
- "name": "Terms and Conditions",
- "label": _("Terms and Conditions Template"),
- "description": _("Template of terms or contract.")
- },
- {
- "type": "doctype",
- "name": "Mode of Payment",
- "description": _("e.g. Bank, Cash, Credit Card")
- },
- {
- "type": "doctype",
- "name": "Auto Repeat",
- "label": _("Auto Repeat"),
- "description": _("To make recurring documents")
- },
- {
- "type": "doctype",
- "name": "C-Form",
- "description": _("C-Form records"),
- "country": "India"
- },
- {
- "type": "doctype",
- "name": "Cheque Print Template",
- "description": _("Setup cheque dimensions for printing")
- },
- {
- "type": "doctype",
"name": "Accounting Dimension",
- "description": _("Setup custom dimensions for accounting")
},
{
"type": "doctype",
- "name": "Opening Invoice Creation Tool",
- "description": _("Create Opening Sales and Purchase Invoices")
- }
- ]
- },
- {
- "label": _("Accounting Entries"),
- "items": [
- {
- "type": "doctype",
- "name": "Payment Entry",
- "description": _("Bank/Cash transactions against party or for internal transfer")
+ "name": "Finance Book",
},
{
"type": "doctype",
- "name": "Journal Entry",
- "description": _("Accounting journal entries.")
- }
- ]
- },
- {
- "label": _("Financial Statements"),
- "items": [
- {
- "type": "report",
- "name": "General Ledger",
- "doctype": "GL Entry",
- "is_query_report": True,
+ "name": "Accounting Period",
},
{
- "type": "report",
- "name": "Accounts Receivable",
- "doctype": "Sales Invoice",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Accounts Payable",
- "doctype": "Purchase Invoice",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Trial Balance",
- "doctype": "GL Entry",
- "is_query_report": True,
- },
- {
- "type": "report",
- "name": "Balance Sheet",
- "doctype": "GL Entry",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Cash Flow",
- "doctype": "GL Entry",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Profit and Loss Statement",
- "doctype": "GL Entry",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Consolidated Financial Statement",
- "doctype": "GL Entry",
- "is_query_report": True
+ "type": "doctype",
+ "name": "Payment Term",
+ "description": _("Payment Terms based on conditions")
},
]
},
@@ -243,44 +177,11 @@
"items": [
{
"type": "doctype",
- "label": _("Bank"),
- "name": "Bank",
+ "label": _("Match Payments with Invoices"),
+ "name": "Payment Reconciliation",
+ "description": _("Match non-linked Invoices and Payments.")
},
{
- "type": "page",
- "label": _("Reconcile payments and bank transactions"),
- "name": "bank-reconciliation",
- "description": _("Link bank transactions with payments.")
- },
- {
- "type": "doctype",
- "label": _("Bank Account"),
- "name": "Bank Account",
- },
- {
- "type": "doctype",
- "label": _("Invoice Discounting"),
- "name": "Invoice Discounting",
- },
- {
- "type": "doctype",
- "label": _("Bank Statement Transaction Entry List"),
- "name": "Bank Statement Transaction Entry",
- "route": "#List/Bank Statement Transaction Entry",
- },
- {
- "type": "doctype",
- "label": _("Bank Statement Transaction Entry Report"),
- "name": "Bank Statement Transaction Entry",
- "route": "#Report/Bank Statement Transaction Entry",
- },
- {
- "type": "doctype",
- "label": _("Bank Statement Settings"),
- "name": "Bank Statement Settings",
- },
-
- {
"type": "doctype",
"label": _("Update Bank Transaction Dates"),
"name": "Bank Reconciliation",
@@ -288,9 +189,8 @@
},
{
"type": "doctype",
- "label": _("Match Payments with Invoices"),
- "name": "Payment Reconciliation",
- "description": _("Match non-linked Invoices and Payments.")
+ "label": _("Invoice Discounting"),
+ "name": "Invoice Discounting",
},
{
"type": "report",
@@ -306,8 +206,75 @@
},
{
"type": "doctype",
- "name": "Bank Guarantee",
- "doctype": "Bank Guarantee"
+ "name": "Bank Guarantee"
+ },
+ {
+ "type": "doctype",
+ "name": "Cheque Print Template",
+ "description": _("Setup cheque dimensions for printing")
+ },
+ ]
+ },
+ {
+ "label": _("General Ledger"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Journal Entry",
+ "description": _("Accounting journal entries.")
+ },
+ {
+ "type": "report",
+ "name": "General Ledger",
+ "doctype": "GL Entry",
+ "is_query_report": True,
+ },
+ {
+ "type": "report",
+ "name": "Customer Ledger Summary",
+ "doctype": "Sales Invoice",
+ "is_query_report": True,
+ },
+ {
+ "type": "report",
+ "name": "Supplier Ledger Summary",
+ "doctype": "Sales Invoice",
+ "is_query_report": True,
+ }
+ ]
+ },
+ {
+ "label": _("Taxes"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Sales Taxes and Charges Template",
+ "description": _("Tax template for selling transactions.")
+ },
+ {
+ "type": "doctype",
+ "name": "Purchase Taxes and Charges Template",
+ "description": _("Tax template for buying transactions.")
+ },
+ {
+ "type": "doctype",
+ "name": "Item Tax Template",
+ "description": _("Tax template for item tax rates.")
+ },
+ {
+ "type": "doctype",
+ "name": "Tax Category",
+ "description": _("Tax Category for overriding tax rates.")
+ },
+ {
+ "type": "doctype",
+ "name": "Tax Rule",
+ "description": _("Tax Rule for transactions.")
+ },
+ {
+ "type": "doctype",
+ "name": "Tax Withholding Category",
+ "description": _("Tax Withholding rates to be applied on transactions.")
},
]
},
@@ -328,6 +295,10 @@
"description": _("Define budget for a financial year.")
},
{
+ "type": "doctype",
+ "name": "Accounting Dimension",
+ },
+ {
"type": "report",
"name": "Budget Variance Report",
"is_query_report": True,
@@ -338,51 +309,106 @@
"name": "Monthly Distribution",
"description": _("Seasonality for setting budgets, targets etc.")
},
+ ]
+ },
+ {
+ "label": _("Financial Statements"),
+ "items": [
+ {
+ "type": "report",
+ "name": "Trial Balance",
+ "doctype": "GL Entry",
+ "is_query_report": True,
+ },
+ {
+ "type": "report",
+ "name": "Profit and Loss Statement",
+ "doctype": "GL Entry",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Balance Sheet",
+ "doctype": "GL Entry",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Cash Flow",
+ "doctype": "GL Entry",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
+ "name": "Consolidated Financial Statement",
+ "doctype": "GL Entry",
+ "is_query_report": True
+ },
+ ]
+ },
+ {
+ "label": _("Opening and Closing"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Opening Invoice Creation Tool",
+ },
+ {
+ "type": "doctype",
+ "name": "Chart of Accounts Importer",
+ },
{
"type": "doctype",
"name": "Period Closing Voucher",
"description": _("Close Balance Sheet and book Profit or Loss.")
},
]
+
},
{
- "label": _("Taxes"),
+ "label": _("Multi Currency"),
"items": [
{
"type": "doctype",
- "name": "Tax Category",
- "description": _("Tax Category for overriding tax rates.")
+ "name": "Currency",
+ "description": _("Enable / disable currencies.")
},
{
"type": "doctype",
- "name": "Sales Taxes and Charges Template",
- "description": _("Tax template for selling transactions.")
+ "name": "Currency Exchange",
+ "description": _("Currency exchange rate master.")
},
{
"type": "doctype",
- "name": "Purchase Taxes and Charges Template",
- "description": _("Tax template for buying transactions.")
+ "name": "Exchange Rate Revaluation",
+ "description": _("Exchange Rate Revaluation master.")
+ },
+ ]
+ },
+ {
+ "label": _("Settings"),
+ "icon": "fa fa-cog",
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Payment Gateway Account",
+ "description": _("Setup Gateway accounts.")
},
{
"type": "doctype",
- "name": "Item Tax Template",
- "description": _("Tax template for item tax rates.")
+ "name": "Terms and Conditions",
+ "label": _("Terms and Conditions Template"),
+ "description": _("Template of terms or contract.")
},
{
"type": "doctype",
- "name": "Tax Rule",
- "description": _("Tax Rule for transactions.")
- },
- {
- "type": "doctype",
- "name": "Tax Withholding Category",
- "description": _("Tax Withholding rates to be applied on transactions.")
+ "name": "Mode of Payment",
+ "description": _("e.g. Bank, Cash, Credit Card")
},
]
},
{
"label": _("Subscription Management"),
- "icon": "fa fa-microchip ",
"items": [
{
"type": "doctype",
@@ -403,7 +429,31 @@
]
},
{
- "label": _("Key Reports"),
+ "label": _("Bank Statement"),
+ "items": [
+ {
+ "type": "doctype",
+ "label": _("Bank"),
+ "name": "Bank",
+ },
+ {
+ "type": "doctype",
+ "label": _("Bank Account"),
+ "name": "Bank Account",
+ },
+ {
+ "type": "doctype",
+ "name": "Bank Statement Transaction Entry",
+ },
+ {
+ "type": "doctype",
+ "label": _("Bank Statement Settings"),
+ "name": "Bank Statement Settings",
+ },
+ ]
+ },
+ {
+ "label": _("Profitability"),
"items": [
{
"type": "report",
@@ -413,21 +463,9 @@
},
{
"type": "report",
- "name": "Sales Register",
- "doctype": "Sales Invoice",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Purchase Register",
- "doctype": "Purchase Invoice",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Purchase Invoice Trends",
+ "name": "Profitability Analysis",
+ "doctype": "GL Entry",
"is_query_report": True,
- "doctype": "Purchase Invoice"
},
{
"type": "report",
@@ -437,38 +475,14 @@
},
{
"type": "report",
- "name": "Item-wise Sales Register",
- "is_query_report": True,
- "doctype": "Sales Invoice"
- },
- {
- "type": "report",
- "name": "Item-wise Purchase Register",
+ "name": "Purchase Invoice Trends",
"is_query_report": True,
"doctype": "Purchase Invoice"
},
- {
- "type": "report",
- "name": "Profitability Analysis",
- "doctype": "GL Entry",
- "is_query_report": True,
- },
- {
- "type": "report",
- "name": "Customer Ledger Summary",
- "doctype": "Sales Invoice",
- "is_query_report": True,
- },
- {
- "type": "report",
- "name": "Supplier Ledger Summary",
- "doctype": "Sales Invoice",
- "is_query_report": True,
- }
]
},
{
- "label": _("Other Reports"),
+ "label": _("Reports"),
"icon": "fa fa-table",
"items": [
{
@@ -491,18 +505,6 @@
},
{
"type": "report",
- "name": "Accounts Receivable Summary",
- "doctype": "Sales Invoice",
- "is_query_report": True
- },
- {
- "type": "report",
- "name": "Accounts Payable Summary",
- "doctype": "Purchase Invoice",
- "is_query_report": True
- },
- {
- "type": "report",
"is_query_report": True,
"name": "Customer Credit Balance",
"doctype": "Customer"
@@ -549,27 +551,7 @@
}
]
},
- {
- "label": _("Help"),
- "icon": "fa fa-facetime-video",
- "items": [
- {
- "type": "help",
- "label": _("Chart of Accounts"),
- "youtube_id": "DyR-DST-PyA"
- },
- {
- "type": "help",
- "label": _("Opening Accounting Balance"),
- "youtube_id": "kdgM20Q-q68"
- },
- {
- "type": "help",
- "label": _("Setting up Taxes"),
- "youtube_id": "nQ1zZdPgdaQ"
- }
- ]
- }
+
]
gst = {
@@ -617,6 +599,12 @@
"name": "GST Itemised Purchase Register",
"is_query_report": True
},
+ {
+ "type": "doctype",
+ "name": "C-Form",
+ "description": _("C-Form records"),
+ "country": "India"
+ },
]
}
@@ -624,6 +612,6 @@
countries = frappe.get_all("Company", fields="country")
countries = [country["country"] for country in countries]
if "India" in countries:
- config.insert(7, gst)
+ config.insert(9, gst)
domains = frappe.get_active_domains()
return config
diff --git a/erpnext/config/buying.py b/erpnext/config/buying.py
index ba34923..e0f4be9 100644
--- a/erpnext/config/buying.py
+++ b/erpnext/config/buying.py
@@ -228,29 +228,5 @@
}
]
},
- {
- "label": _("Help"),
- "items": [
- {
- "type": "help",
- "label": _("Customer and Supplier"),
- "youtube_id": "anoGi_RpQ20"
- },
- {
- "type": "help",
- "label": _("Material Request to Purchase Order"),
- "youtube_id": "4TN9kPyfIqM"
- },
- {
- "type": "help",
- "label": _("Purchase Order to Payment"),
- "youtube_id": "EK65tLdVUDk"
- },
- {
- "type": "help",
- "label": _("Managing Subcontracting"),
- "youtube_id": "ThiMCC2DtKo"
- },
- ]
- },
+
]
diff --git a/erpnext/config/hr.py b/erpnext/config/hr.py
index 21e6a50..261edaf 100644
--- a/erpnext/config/hr.py
+++ b/erpnext/config/hr.py
@@ -4,7 +4,7 @@
def get_data():
return [
{
- "label": _("Employee and Attendance"),
+ "label": _("Employee"),
"items": [
{
"type": "doctype",
@@ -13,120 +13,6 @@
},
{
"type": "doctype",
- "name": "Employee Attendance Tool",
- "hide_count": True,
- "onboard": 1,
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Employee Group",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Attendance",
- "onboard": 1,
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Attendance Request",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Upload Attendance",
- "hide_count": True,
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Employee Checkin",
- "hide_count": True,
- "onboard": 1,
- "dependencies": ["Employee"]
- },
- ]
- },
- {
- "label": _("Payroll"),
- "items": [
- {
- "type": "doctype",
- "name": "Salary Structure",
- "onboard": 1,
- },
- {
- "type": "doctype",
- "name": "Salary Structure Assignment",
- "onboard": 1,
- "dependencies": ["Salary Structure", "Employee"],
- },
- {
- "type": "doctype",
- "name": "Salary Slip",
- "onboard": 1,
- },
- {
- "type": "doctype",
- "name": "Payroll Entry",
- "onboard": 1,
- },
- {
- "type": "doctype",
- "name": "Employee Benefit Application",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Employee Benefit Claim",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Additional Salary",
- },
- {
- "type": "doctype",
- "name": "Employee Tax Exemption Declaration",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Employee Tax Exemption Proof Submission",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Employee Incentive",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Retention Bonus",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Payroll Period",
- },
- {
- "type": "doctype",
- "name": "Salary Component",
- },
- ]
- },
- {
- "label": _("Settings"),
- "icon": "fa fa-cog",
- "items": [
- {
- "type": "doctype",
- "name": "HR Settings",
- },
- {
- "type": "doctype",
"name": "Employment Type",
},
{
@@ -147,19 +33,56 @@
},
{
"type": "doctype",
- "name": "Daily Work Summary Group"
+ "name": "Employee Group",
+ "dependencies": ["Employee"]
},
{
"type": "doctype",
"name": "Employee Health Insurance"
},
- {
- "type": "doctype",
- "name": "Staffing Plan",
- }
]
},
-
+ {
+ "label": _("Attendance"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Employee Attendance Tool",
+ "hide_count": True,
+ "onboard": 1,
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Attendance",
+ "onboard": 1,
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Attendance Request",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Upload Attendance",
+ "hide_count": True,
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Checkin",
+ "hide_count": True,
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "report",
+ "is_query_report": True,
+ "name": "Monthly Attendance Sheet",
+ "doctype": "Attendance"
+ },
+ ]
+ },
{
"label": _("Leaves"),
"items": [
@@ -175,13 +98,8 @@
},
{
"type": "doctype",
- "name": "Compensatory Leave Request",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Leave Encashment",
- "dependencies": ["Employee"]
+ "name": "Leave Policy",
+ "dependencies": ["Leave Type"]
},
{
"type": "doctype",
@@ -194,39 +112,169 @@
},
{
"type": "doctype",
- "name": "Leave Policy",
- "dependencies": ["Leave Type"]
+ "name": "Holiday List",
},
{
"type": "doctype",
- "name": "Holiday List",
+ "name": "Compensatory Leave Request",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Leave Encashment",
+ "dependencies": ["Employee"]
},
{
"type": "doctype",
"name": "Leave Block List",
},
+ {
+ "type": "report",
+ "is_query_report": True,
+ "name": "Employee Leave Balance",
+ "doctype": "Leave Application"
+ },
]
},
{
- "label": _("Recruitment and Training"),
+ "label": _("Payroll"),
"items": [
{
"type": "doctype",
- "name": "Job Applicant",
+ "name": "Salary Structure",
"onboard": 1,
},
{
"type": "doctype",
+ "name": "Salary Structure Assignment",
+ "onboard": 1,
+ "dependencies": ["Salary Structure", "Employee"],
+ },
+ {
+ "type": "doctype",
+ "name": "Payroll Entry",
+ "onboard": 1,
+ },
+ {
+ "type": "doctype",
+ "name": "Salary Slip",
+ "onboard": 1,
+ },
+ {
+ "type": "doctype",
+ "name": "Salary Component",
+ },
+ {
+ "type": "doctype",
+ "name": "Additional Salary",
+ },
+ {
+ "type": "doctype",
+ "name": "Retention Bonus",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Incentive",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "report",
+ "is_query_report": True,
+ "name": "Salary Register",
+ "doctype": "Salary Slip"
+ },
+ ]
+ },
+ {
+ "label": _("Employee Tax and Benefits"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Employee Tax Exemption Declaration",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Tax Exemption Proof Submission",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Benefit Application",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Benefit Claim",
+ "dependencies": ["Employee"]
+ },
+ ]
+ },
+ {
+ "label": _("Employee Lifecycle"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Employee Onboarding",
+ "dependencies": ["Job Applicant"],
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Promotion",
+ "dependencies": ["Employee"],
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Transfer",
+ "dependencies": ["Employee"],
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Separation",
+ "dependencies": ["Employee"],
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Onboarding Template",
+ "dependencies": ["Employee"]
+ },
+ {
+ "type": "doctype",
+ "name": "Employee Separation Template",
+ "dependencies": ["Employee"]
+ },
+ ]
+ },
+ {
+ "label": _("Recruitment"),
+ "items": [
+ {
+ "type": "doctype",
"name": "Job Opening",
"onboard": 1,
},
{
"type": "doctype",
+ "name": "Job Applicant",
+ "onboard": 1,
+ },
+ {
+ "type": "doctype",
"name": "Job Offer",
"onboard": 1,
},
{
"type": "doctype",
+ "name": "Staffing Plan",
+ },
+ ]
+ },
+ {
+ "label": _("Training"),
+ "items": [
+ {
+ "type": "doctype",
"name": "Training Program"
},
{
@@ -244,42 +292,7 @@
]
},
{
- "label": _("Employee Lifecycle"),
- "items": [
- {
- "type": "doctype",
- "name": "Employee Transfer",
- "dependencies": ["Employee"],
- },
- {
- "type": "doctype",
- "name": "Employee Promotion",
- "dependencies": ["Employee"],
- },
- {
- "type": "doctype",
- "name": "Employee Separation",
- "dependencies": ["Employee"],
- },
- {
- "type": "doctype",
- "name": "Employee Onboarding",
- "dependencies": ["Job Applicant"],
- },
- {
- "type": "doctype",
- "name": "Employee Separation Template",
- "dependencies": ["Employee"]
- },
- {
- "type": "doctype",
- "name": "Employee Onboarding Template",
- "dependencies": ["Employee"]
- }
- ]
- },
- {
- "label": _("Appraisals, Expense Claims and Loans"),
+ "label": _("Performance"),
"items": [
{
"type": "doctype",
@@ -290,24 +303,39 @@
"name": "Appraisal Template",
},
{
- "type": "page",
- "name": "team-updates",
- "label": _("Team Updates")
+ "type": "doctype",
+ "name": "Energy Point Rule",
},
{
"type": "doctype",
- "name": "Employee Advance",
- "dependencies": ["Employee"]
+ "name": "Energy Point Log",
},
{
+ "type": "link",
+ "doctype": "Energy Point Log",
+ "label": _("Energy Point Leaderboard"),
+ "route": "#social/users"
+ },
+ ]
+ },
+ {
+ "label": _("Expense Claims"),
+ "items": [
+ {
"type": "doctype",
"name": "Expense Claim",
"dependencies": ["Employee"]
},
{
"type": "doctype",
- "name": "Loan Type",
+ "name": "Employee Advance",
+ "dependencies": ["Employee"]
},
+ ]
+ },
+ {
+ "label": _("Loans"),
+ "items": [
{
"type": "doctype",
"name": "Loan Application",
@@ -316,7 +344,66 @@
{
"type": "doctype",
"name": "Loan"
- }
+ },
+ {
+ "type": "doctype",
+ "name": "Loan Type",
+ },
+ ]
+ },
+ {
+ "label": _("Shift Management"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Shift Type",
+ },
+ {
+ "type": "doctype",
+ "name": "Shift Request",
+ },
+ {
+ "type": "doctype",
+ "name": "Shift Assignment",
+ },
+ ]
+ },
+ {
+ "label": _("Fleet Management"),
+ "items": [
+ {
+ "type": "doctype",
+ "name": "Vehicle"
+ },
+ {
+ "type": "doctype",
+ "name": "Vehicle Log"
+ },
+ {
+ "type": "report",
+ "is_query_report": True,
+ "name": "Vehicle Expenses",
+ "doctype": "Vehicle"
+ },
+ ]
+ },
+ {
+ "label": _("Settings"),
+ "icon": "fa fa-cog",
+ "items": [
+ {
+ "type": "doctype",
+ "name": "HR Settings",
+ },
+ {
+ "type": "doctype",
+ "name": "Daily Work Summary Group"
+ },
+ {
+ "type": "page",
+ "name": "team-updates",
+ "label": _("Team Updates")
+ },
]
},
{
@@ -326,12 +413,6 @@
{
"type": "report",
"is_query_report": True,
- "name": "Employee Leave Balance",
- "doctype": "Leave Application"
- },
- {
- "type": "report",
- "is_query_report": True,
"name": "Employee Birthday",
"doctype": "Employee"
},
@@ -343,79 +424,10 @@
},
{
"type": "report",
- "name": "Employee Information",
- "doctype": "Employee"
- },
- {
- "type": "report",
- "is_query_report": True,
- "name": "Salary Register",
- "doctype": "Salary Slip"
- },
- {
- "type": "report",
- "is_query_report": True,
- "name": "Monthly Attendance Sheet",
- "doctype": "Attendance"
- },
- {
- "type": "report",
- "is_query_report": True,
- "name": "Vehicle Expenses",
- "doctype": "Vehicle"
- },
- {
- "type": "report",
"is_query_report": True,
"name": "Department Analytics",
"doctype": "Employee"
},
]
},
- {
- "label": _("Shifts and Fleet Management"),
- "items": [
- {
- "type": "doctype",
- "name": "Shift Type",
- },
- {
- "type": "doctype",
- "name": "Shift Request",
- },
- {
- "type": "doctype",
- "name": "Shift Assignment",
- },
- {
- "type": "doctype",
- "name": "Vehicle"
- },
- {
- "type": "doctype",
- "name": "Vehicle Log"
- },
- ]
- },
- # {
- # "label": _("Help"),
- # "icon": "fa fa-facetime-video",
- # "items": [
- # {
- # "type": "help",
- # "label": _("Setting up Employees"),
- # "youtube_id": "USfIUdZlUhw"
- # },
- # {
- # "type": "help",
- # "label": _("Leave Management"),
- # "youtube_id": "fc0p_AXebc8"
- # },
- # {
- # "type": "help",
- # "label": _("Expense Claims"),
- # "youtube_id": "5SZHJF--ZFY"
- # }
- # ]
- # },
]
diff --git a/erpnext/config/projects.py b/erpnext/config/projects.py
index 5a907ff..47700d1 100644
--- a/erpnext/config/projects.py
+++ b/erpnext/config/projects.py
@@ -88,17 +88,14 @@
"doctype": "Project",
"dependencies": ["Project"],
},
- ]
- },
- {
- "label": _("Help"),
- "icon": "fa fa-facetime-video",
- "items": [
{
- "type": "help",
- "label": _("Managing Projects"),
- "youtube_id": "egxIGwtoKI4"
+ "type": "report",
+ "is_query_report": True,
+ "name": "Project Billing Summary",
+ "doctype": "Project",
+ "dependencies": ["Project"],
},
]
},
+
]
diff --git a/erpnext/config/selling.py b/erpnext/config/selling.py
index f18aadb..844710d 100644
--- a/erpnext/config/selling.py
+++ b/erpnext/config/selling.py
@@ -318,41 +318,5 @@
}
]
},
- {
- "label": _("SMS"),
- "icon": "fa fa-wrench",
- "items": [
- {
- "type": "doctype",
- "name": "SMS Center",
- "description":_("Send mass SMS to your contacts"),
- },
- {
- "type": "doctype",
- "name": "SMS Log",
- "description":_("Logs for maintaining sms delivery status"),
- },
-
- ]
- },
- {
- "label": _("Help"),
- "items": [
- {
- "type": "help",
- "label": _("Customer and Supplier"),
- "youtube_id": "anoGi_RpQ20"
- },
- {
- "type": "help",
- "label": _("Sales Order to Payment"),
- "youtube_id": "1eP90MWoDQM"
- },
- {
- "type": "help",
- "label": _("Point-of-Sale"),
- "youtube_id": "4WkelWkbP_c"
- },
- ]
- },
+
]
diff --git a/erpnext/config/stock.py b/erpnext/config/stock.py
index f5e48b3..7d66df2 100644
--- a/erpnext/config/stock.py
+++ b/erpnext/config/stock.py
@@ -329,45 +329,5 @@
}
]
},
- {
- "label": _("Help"),
- "icon": "fa fa-facetime-video",
- "items": [
- {
- "type": "help",
- "label": _("Items and Pricing"),
- "youtube_id": "qXaEwld4_Ps"
- },
- {
- "type": "help",
- "label": _("Item Variants"),
- "youtube_id": "OGBETlCzU5o"
- },
- {
- "type": "help",
- "label": _("Opening Stock Balance"),
- "youtube_id": "0yPgrtfeCTs"
- },
- {
- "type": "help",
- "label": _("Making Stock Entries"),
- "youtube_id": "Njt107hlY3I"
- },
- {
- "type": "help",
- "label": _("Serialized Inventory"),
- "youtube_id": "gvOVlEwFDAk"
- },
- {
- "type": "help",
- "label": _("Batch Inventory"),
- "youtube_id": "J0QKl7ABPKM"
- },
- {
- "type": "help",
- "label": _("Managing Subcontracting"),
- "youtube_id": "ThiMCC2DtKo"
- },
- ]
- }
+
]
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index f5ecaeb..47f56cb 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -475,21 +475,20 @@
order_doctype = "Purchase Order"
order_list = list(set([d.get(order_field)
- for d in self.get("items") if d.get(order_field)]))
+ for d in self.get("items") if d.get(order_field)]))
journal_entries = get_advance_journal_entries(party_type, party, party_account,
- amount_field, order_doctype, order_list, include_unallocated)
+ amount_field, order_doctype, order_list, include_unallocated)
payment_entries = get_advance_payment_entries(party_type, party, party_account,
- order_doctype, order_list, include_unallocated)
+ order_doctype, order_list, include_unallocated)
res = journal_entries + payment_entries
return res
def is_inclusive_tax(self):
- is_inclusive = cint(frappe.db.get_single_value("Accounts Settings",
- "show_inclusive_tax_in_print"))
+ is_inclusive = cint(frappe.db.get_single_value("Accounts Settings", "show_inclusive_tax_in_print"))
if is_inclusive:
is_inclusive = 0
@@ -501,7 +500,7 @@
def validate_advance_entries(self):
order_field = "sales_order" if self.doctype == "Sales Invoice" else "purchase_order"
order_list = list(set([d.get(order_field)
- for d in self.get("items") if d.get(order_field)]))
+ for d in self.get("items") if d.get(order_field)]))
if not order_list: return
@@ -513,7 +512,7 @@
if not advance_entries_against_si or d.reference_name not in advance_entries_against_si:
frappe.msgprint(_(
"Payment Entry {0} is linked against Order {1}, check if it should be pulled as advance in this invoice.")
- .format(d.reference_name, d.against_order))
+ .format(d.reference_name, d.against_order))
def update_against_document_in_jv(self):
"""
@@ -551,9 +550,9 @@
'unadjusted_amount': flt(d.advance_amount),
'allocated_amount': flt(d.allocated_amount),
'exchange_rate': (self.conversion_rate
- if self.party_account_currency != self.company_currency else 1),
+ if self.party_account_currency != self.company_currency else 1),
'grand_total': (self.base_grand_total
- if self.party_account_currency == self.company_currency else self.grand_total),
+ if self.party_account_currency == self.company_currency else self.grand_total),
'outstanding_amount': self.outstanding_amount
})
lst.append(args)
@@ -576,36 +575,37 @@
unlink_ref_doc_from_payment_entries(self)
def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield):
- from erpnext.controllers.status_updater import get_tolerance_for
- item_tolerance = {}
- global_tolerance = None
+ from erpnext.controllers.status_updater import get_allowance_for
+ item_allowance = {}
+ global_qty_allowance, global_amount_allowance = None, None
for item in self.get("items"):
if item.get(item_ref_dn):
ref_amt = flt(frappe.db.get_value(ref_dt + " Item",
- item.get(item_ref_dn), based_on), self.precision(based_on, item))
+ item.get(item_ref_dn), based_on), self.precision(based_on, item))
if not ref_amt:
frappe.msgprint(
- _("Warning: System will not check overbilling since amount for Item {0} in {1} is zero").format(
- item.item_code, ref_dt))
+ _("Warning: System will not check overbilling since amount for Item {0} in {1} is zero")
+ .format(item.item_code, ref_dt))
else:
- already_billed = frappe.db.sql("""select sum(%s) from `tab%s`
- where %s=%s and docstatus=1 and parent != %s""" %
- (based_on, self.doctype + " Item", item_ref_dn, '%s', '%s'),
- (item.get(item_ref_dn), self.name))[0][0]
+ already_billed = frappe.db.sql("""
+ select sum(%s)
+ from `tab%s`
+ where %s=%s and docstatus=1 and parent != %s
+ """ % (based_on, self.doctype + " Item", item_ref_dn, '%s', '%s'),
+ (item.get(item_ref_dn), self.name))[0][0]
total_billed_amt = flt(flt(already_billed) + flt(item.get(based_on)),
- self.precision(based_on, item))
+ self.precision(based_on, item))
- tolerance, item_tolerance, global_tolerance = get_tolerance_for(item.item_code,
- item_tolerance, global_tolerance)
+ allowance, item_allowance, global_qty_allowance, global_amount_allowance = \
+ get_allowance_for(item.item_code, item_allowance, global_qty_allowance, global_amount_allowance, "amount")
- max_allowed_amt = flt(ref_amt * (100 + tolerance) / 100)
+ max_allowed_amt = flt(ref_amt * (100 + allowance) / 100)
if total_billed_amt - max_allowed_amt > 0.01:
- frappe.throw(_(
- "Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set in Stock Settings").format(
- item.item_code, item.idx, max_allowed_amt))
+ frappe.throw(_("Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set in Stock Settings")
+ .format(item.item_code, item.idx, max_allowed_amt))
def get_company_default(self, fieldname):
from erpnext.accounts.utils import get_company_default
@@ -615,9 +615,10 @@
stock_items = []
item_codes = list(set(item.item_code for item in self.get("items")))
if item_codes:
- stock_items = [r[0] for r in frappe.db.sql("""select name
- from `tabItem` where name in (%s) and is_stock_item=1""" % \
- (", ".join((["%s"] * len(item_codes))),), item_codes)]
+ stock_items = [r[0] for r in frappe.db.sql("""
+ select name from `tabItem`
+ where name in (%s) and is_stock_item=1
+ """ % (", ".join((["%s"] * len(item_codes))),), item_codes)]
return stock_items
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index b193ac2..2da0f03 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -7,6 +7,8 @@
from frappe import _
from frappe.model.document import Document
+class OverAllowanceError(frappe.ValidationError): pass
+
def validate_status(status, options):
if status not in options:
frappe.throw(_("Status must be one of {0}").format(comma_or(options)))
@@ -43,16 +45,6 @@
["Closed", "eval:self.status=='Closed'"],
["On Hold", "eval:self.status=='On Hold'"],
],
- "Sales Invoice": [
- ["Draft", None],
- ["Submitted", "eval:self.docstatus==1"],
- ["Paid", "eval:self.outstanding_amount==0 and self.docstatus==1"],
- ["Return", "eval:self.is_return==1 and self.docstatus==1"],
- ["Credit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1"],
- ["Unpaid", "eval:self.outstanding_amount > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.docstatus==1"],
- ["Overdue", "eval:self.outstanding_amount > 0 and getdate(self.due_date) < getdate(nowdate()) and self.docstatus==1"],
- ["Cancelled", "eval:self.docstatus==2"],
- ],
"Purchase Invoice": [
["Draft", None],
["Submitted", "eval:self.docstatus==1"],
@@ -154,8 +146,9 @@
def validate_qty(self):
"""Validates qty at row level"""
- self.tolerance = {}
- self.global_tolerance = None
+ self.item_allowance = {}
+ self.global_qty_allowance = None
+ self.global_amount_allowance = None
for args in self.status_updater:
if "target_ref_field" not in args:
@@ -186,32 +179,41 @@
# if not item[args['target_ref_field']]:
# msgprint(_("Note: System will not check over-delivery and over-booking for Item {0} as quantity or amount is 0").format(item.item_code))
- if args.get('no_tolerance'):
+ if args.get('no_allowance'):
item['reduce_by'] = item[args['target_field']] - item[args['target_ref_field']]
if item['reduce_by'] > .01:
self.limits_crossed_error(args, item)
elif item[args['target_ref_field']]:
- self.check_overflow_with_tolerance(item, args)
+ self.check_overflow_with_allowance(item, args)
- def check_overflow_with_tolerance(self, item, args):
+ def check_overflow_with_allowance(self, item, args):
"""
- Checks if there is overflow condering a relaxation tolerance
+ Checks if there is overflow condering a relaxation allowance
"""
- # check if overflow is within tolerance
- tolerance, self.tolerance, self.global_tolerance = get_tolerance_for(item['item_code'],
- self.tolerance, self.global_tolerance)
+ qty_or_amount = "qty" if "qty" in args['target_ref_field'] else "amount"
+
+ # check if overflow is within allowance
+ allowance, self.item_allowance, self.global_qty_allowance, self.global_amount_allowance = \
+ get_allowance_for(item['item_code'], self.item_allowance,
+ self.global_qty_allowance, self.global_amount_allowance, qty_or_amount)
+
overflow_percent = ((item[args['target_field']] - item[args['target_ref_field']]) /
item[args['target_ref_field']]) * 100
- if overflow_percent - tolerance > 0.01:
- item['max_allowed'] = flt(item[args['target_ref_field']] * (100+tolerance)/100)
+ if overflow_percent - allowance > 0.01:
+ item['max_allowed'] = flt(item[args['target_ref_field']] * (100+allowance)/100)
item['reduce_by'] = item[args['target_field']] - item['max_allowed']
- self.limits_crossed_error(args, item)
+ self.limits_crossed_error(args, item, qty_or_amount)
- def limits_crossed_error(self, args, item):
+ def limits_crossed_error(self, args, item, qty_or_amount):
'''Raise exception for limits crossed'''
+ if qty_or_amount == "qty":
+ action_msg = _('To allow over receipt / delivery, update "Over Receipt/Delivery Allowance" in Stock Settings or the Item.')
+ else:
+ action_msg = _('To allow over billing, update "Over Billing Allowance" in Accounts Settings or the Item.')
+
frappe.throw(_('This document is over limit by {0} {1} for item {4}. Are you making another {3} against the same {2}?')
.format(
frappe.bold(_(item["target_ref_field"].title())),
@@ -219,9 +221,7 @@
frappe.bold(_(args.get('target_dt'))),
frappe.bold(_(self.doctype)),
frappe.bold(item.get('item_code'))
- ) + '<br><br>' +
- _('To allow over-billing or over-ordering, update "Allowance" in Stock Settings or the Item.'),
- title = _('Limit Crossed'))
+ ) + '<br><br>' + action_msg, OverAllowanceError, title = _('Limit Crossed'))
def update_qty(self, update_modified=True):
"""Updates qty or amount at row level
@@ -358,19 +358,34 @@
ref_doc.db_set("per_billed", per_billed)
ref_doc.set_status(update=True)
-def get_tolerance_for(item_code, item_tolerance={}, global_tolerance=None):
+def get_allowance_for(item_code, item_allowance={}, global_qty_allowance=None, global_amount_allowance=None, qty_or_amount="qty"):
"""
- Returns the tolerance for the item, if not set, returns global tolerance
+ Returns the allowance for the item, if not set, returns global allowance
"""
- if item_tolerance.get(item_code):
- return item_tolerance[item_code], item_tolerance, global_tolerance
+ if qty_or_amount == "qty":
+ if item_allowance.get(item_code, frappe._dict()).get("qty"):
+ return item_allowance[item_code].qty, item_allowance, global_qty_allowance, global_amount_allowance
+ else:
+ if item_allowance.get(item_code, frappe._dict()).get("amount"):
+ return item_allowance[item_code].amount, item_allowance, global_qty_allowance, global_amount_allowance
- tolerance = flt(frappe.db.get_value('Item',item_code,'tolerance') or 0)
+ qty_allowance, over_billing_allowance = \
+ frappe.db.get_value('Item', item_code, ['over_delivery_receipt_allowance', 'over_billing_allowance'])
- if not tolerance:
- if global_tolerance == None:
- global_tolerance = flt(frappe.db.get_value('Stock Settings', None, 'tolerance'))
- tolerance = global_tolerance
+ if qty_or_amount == "qty" and not qty_allowance:
+ if global_qty_allowance == None:
+ global_qty_allowance = flt(frappe.db.get_single_value('Stock Settings', 'over_delivery_receipt_allowance'))
+ qty_allowance = global_qty_allowance
+ elif qty_or_amount == "amount" and not over_billing_allowance:
+ if global_amount_allowance == None:
+ global_amount_allowance = flt(frappe.db.get_single_value('Accounts Settings', 'over_billing_allowance'))
+ over_billing_allowance = global_amount_allowance
- item_tolerance[item_code] = tolerance
- return tolerance, item_tolerance, global_tolerance
+ if qty_or_amount == "qty":
+ allowance = qty_allowance
+ item_allowance.setdefault(item_code, frappe._dict()).setdefault("qty", qty_allowance)
+ else:
+ allowance = over_billing_allowance
+ item_allowance.setdefault(item_code, frappe._dict()).setdefault("amount", over_billing_allowance)
+
+ return allowance, item_allowance, global_qty_allowance, global_amount_allowance
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index ebbe3d9..8e1510a 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -15,6 +15,9 @@
self.calculate()
def calculate(self):
+ if not len(self.doc.get("items")):
+ return
+
self.discount_amount_applied = False
self._calculate()
diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js
index 9dcd0c4..90a12b7 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.js
+++ b/erpnext/crm/doctype/opportunity/opportunity.js
@@ -19,6 +19,10 @@
}
}
});
+
+ if (frm.doc.opportunity_from && frm.doc.party_name){
+ frm.trigger('set_contact_link');
+ }
},
onload_post_render: function(frm) {
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.js b/erpnext/hr/doctype/hr_settings/hr_settings.js
index 9e5effe..4004c1c 100644
--- a/erpnext/hr/doctype/hr_settings/hr_settings.js
+++ b/erpnext/hr/doctype/hr_settings/hr_settings.js
@@ -15,7 +15,7 @@
let policy = frm.doc.password_policy;
if (policy) {
if (policy.includes(' ') || policy.includes('--')) {
- frappe.msgprint(_("Password policy cannot contain spaces or simultaneous hyphens. The format will be restructured automatically"));
+ frappe.msgprint(__("Password policy cannot contain spaces or simultaneous hyphens. The format will be restructured automatically"));
}
frm.set_value('password_policy', policy.split(new RegExp(" |-", 'g')).filter((token) => token).join('-'));
}
diff --git a/erpnext/hr/doctype/loan_application/loan_application.py b/erpnext/hr/doctype/loan_application/loan_application.py
index 5dbcf15..67be9f2 100644
--- a/erpnext/hr/doctype/loan_application/loan_application.py
+++ b/erpnext/hr/doctype/loan_application/loan_application.py
@@ -29,9 +29,12 @@
if self.repayment_method == "Repay Fixed Amount per Period":
monthly_interest_rate = flt(self.rate_of_interest) / (12 *100)
if monthly_interest_rate:
- self.repayment_periods = math.ceil((math.log(self.repayment_amount) -
- math.log(self.repayment_amount - (self.loan_amount*monthly_interest_rate))) /
- (math.log(1 + monthly_interest_rate)))
+ min_repayment_amount = self.loan_amount*monthly_interest_rate
+ if self.repayment_amount - min_repayment_amount < 0:
+ frappe.throw(_("Repayment Amount must be greater than " \
+ + str(flt(min_repayment_amount, 2))))
+ self.repayment_periods = math.ceil(math.log(self.repayment_amount) -
+ math.log(self.repayment_amount - min_repayment_amount) /(math.log(1 + monthly_interest_rate)))
else:
self.repayment_periods = self.loan_amount / self.repayment_amount
diff --git a/erpnext/hr/doctype/loan_application/test_loan_application.py b/erpnext/hr/doctype/loan_application/test_loan_application.py
index 7644dd0..b08b522 100644
--- a/erpnext/hr/doctype/loan_application/test_loan_application.py
+++ b/erpnext/hr/doctype/loan_application/test_loan_application.py
@@ -31,21 +31,22 @@
"rate_of_interest": 9.2,
"loan_amount": 250000,
"repayment_method": "Repay Over Number of Periods",
- "repayment_periods": 24
+ "repayment_periods": 18
})
loan_application.insert()
-
+
def test_loan_totals(self):
loan_application = frappe.get_doc("Loan Application", {"applicant":self.applicant})
- self.assertEquals(loan_application.repayment_amount, 11445)
- self.assertEquals(loan_application.total_payable_interest, 24657)
- self.assertEquals(loan_application.total_payable_amount, 274657)
- loan_application.repayment_method = "Repay Fixed Amount per Period"
- loan_application.repayment_amount = 15000
+ self.assertEqual(loan_application.total_payable_interest, 18599)
+ self.assertEqual(loan_application.total_payable_amount, 268599)
+ self.assertEqual(loan_application.repayment_amount, 14923)
+
+ loan_application.repayment_periods = 24
loan_application.save()
+ loan_application.reload()
- self.assertEqual(loan_application.repayment_periods, 18)
- self.assertEqual(loan_application.total_payable_interest, 18506)
- self.assertEqual(loan_application.total_payable_amount, 268506)
\ No newline at end of file
+ self.assertEqual(loan_application.total_payable_interest, 24657)
+ self.assertEqual(loan_application.total_payable_amount, 274657)
+ self.assertEqual(loan_application.repayment_amount, 11445)
diff --git a/erpnext/hr/doctype/shift_type/shift_type.py b/erpnext/hr/doctype/shift_type/shift_type.py
index eaf6b1e..b98f445 100644
--- a/erpnext/hr/doctype/shift_type/shift_type.py
+++ b/erpnext/hr/doctype/shift_type/shift_type.py
@@ -22,7 +22,7 @@
'skip_auto_attendance':'0',
'attendance':('is', 'not set'),
'time':('>=', self.process_attendance_after),
- 'shift_actual_start': ('<', self.last_sync_of_checkin),
+ 'shift_actual_end': ('<', self.last_sync_of_checkin),
'shift': self.name
}
logs = frappe.db.get_list('Employee Checkin', fields="*", filters=filters, order_by="employee,time")
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 766f675..6f63dcf 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -592,7 +592,6 @@
bom_item.idx,
item.item_name,
sum(bom_item.{qty_field}/ifnull(bom.quantity, 1)) * %(qty)s as qty,
- item.description,
item.image,
bom.project,
item.stock_uom,
@@ -621,17 +620,22 @@
where_conditions="",
is_stock_item=is_stock_item,
qty_field="stock_qty",
- select_columns = """, bom_item.source_warehouse, bom_item.operation, bom_item.include_item_in_manufacturing,
+ select_columns = """, bom_item.source_warehouse, bom_item.operation,
+ bom_item.include_item_in_manufacturing, bom_item.description,
(Select idx from `tabBOM Item` where item_code = bom_item.item_code and parent = %(parent)s limit 1) as idx""")
items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom, "company": company }, as_dict=True)
elif fetch_scrap_items:
- query = query.format(table="BOM Scrap Item", where_conditions="", select_columns=", bom_item.idx", is_stock_item=is_stock_item, qty_field="stock_qty")
+ query = query.format(table="BOM Scrap Item", where_conditions="",
+ select_columns=", bom_item.idx, item.description", is_stock_item=is_stock_item, qty_field="stock_qty")
+
items = frappe.db.sql(query, { "qty": qty, "bom": bom, "company": company }, as_dict=True)
else:
query = query.format(table="BOM Item", where_conditions="", is_stock_item=is_stock_item,
qty_field="stock_qty" if fetch_qty_in_stock_uom else "qty",
- select_columns = ", bom_item.uom, bom_item.conversion_factor, bom_item.source_warehouse, bom_item.idx, bom_item.operation, bom_item.include_item_in_manufacturing")
+ select_columns = """, bom_item.uom, bom_item.conversion_factor, bom_item.source_warehouse,
+ bom_item.idx, bom_item.operation, bom_item.include_item_in_manufacturing,
+ bom_item.description """)
items = frappe.db.sql(query, { "qty": qty, "bom": bom, "company": company }, as_dict=True)
for item in items:
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index a293785..0ba0818 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -505,6 +505,7 @@
erpnext.patches.v10_0.set_student_party_type
erpnext.patches.v10_0.update_project_in_sle
erpnext.patches.v10_0.fix_reserved_qty_for_sub_contract
+erpnext.patches.v10_0.repost_requested_qty_for_non_stock_uom_items
erpnext.patches.v11_0.merge_land_unit_with_location
erpnext.patches.v11_0.add_index_on_nestedset_doctypes
erpnext.patches.v11_0.remove_modules_setup_page
@@ -602,6 +603,7 @@
erpnext.patches.v11_1.rename_depends_on_lwp
execute:frappe.delete_doc("Report", "Inactive Items")
erpnext.patches.v11_1.delete_scheduling_tool
+erpnext.patches.v12_0.rename_tolerance_fields
erpnext.patches.v12_0.make_custom_fields_for_bank_remittance #14-06-2019
execute:frappe.delete_doc_if_exists("Page", "support-analytics")
erpnext.patches.v12_0.make_item_manufacturer
@@ -620,3 +622,4 @@
erpnext.patches.v11_1.update_default_supplier_in_item_defaults
erpnext.patches.v12_0.update_due_date_in_gle
erpnext.patches.v12_0.add_default_buying_selling_terms_in_company
+erpnext.patches.v12_0.update_ewaybill_field_position
diff --git a/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py b/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py
new file mode 100644
index 0000000..4fe4e97
--- /dev/null
+++ b/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py
@@ -0,0 +1,21 @@
+# Copyright (c) 2019, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty
+
+ count=0
+ for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse
+ from `tabMaterial Request Item` where docstatus = 1 and stock_uom<>uom"""):
+ try:
+ count += 1
+ update_bin_qty(item_code, warehouse, {
+ "indented_qty": get_indented_qty(item_code, warehouse),
+ })
+ if count % 200 == 0:
+ frappe.db.commit()
+ except:
+ frappe.db.rollback()
diff --git a/erpnext/patches/v12_0/rename_tolerance_fields.py b/erpnext/patches/v12_0/rename_tolerance_fields.py
new file mode 100644
index 0000000..aa2fff4
--- /dev/null
+++ b/erpnext/patches/v12_0/rename_tolerance_fields.py
@@ -0,0 +1,15 @@
+import frappe
+from frappe.model.utils.rename_field import rename_field
+
+def execute():
+ frappe.reload_doc("stock", "doctype", "item")
+ frappe.reload_doc("stock", "doctype", "stock_settings")
+ frappe.reload_doc("accounts", "doctype", "accounts_settings")
+
+ rename_field('Stock Settings', "tolerance", "over_delivery_receipt_allowance")
+ rename_field('Item', "tolerance", "over_delivery_receipt_allowance")
+
+ qty_allowance = frappe.db.get_single_value("Stock Settings", "over_delivery_receipt_allowance")
+ frappe.db.set_value("Accounts Settings", None, "over_delivery_receipt_allowance", qty_allowance)
+
+ frappe.db.sql("update tabItem set over_billing_allowance=over_delivery_receipt_allowance")
\ No newline at end of file
diff --git a/erpnext/patches/v12_0/update_ewaybill_field_position.py b/erpnext/patches/v12_0/update_ewaybill_field_position.py
new file mode 100644
index 0000000..d0291d2
--- /dev/null
+++ b/erpnext/patches/v12_0/update_ewaybill_field_position.py
@@ -0,0 +1,27 @@
+from __future__ import unicode_literals
+import frappe
+from erpnext.regional.india.setup import make_custom_fields
+
+def execute():
+ company = frappe.get_all('Company', filters = {'country': 'India'})
+
+ if not company:
+ return
+
+ field = frappe.db.get_value("Custom Field", {"dt": "Sales Invoice", "fieldname": "ewaybill"})
+
+ ewaybill_field = frappe.get_doc("Custom Field", field)
+
+ ewaybill_field.flags.ignore_validate = True
+
+ ewaybill_field.update({
+ 'fieldname': 'ewaybill',
+ 'label': 'e-Way Bill No.',
+ 'fieldtype': 'Data',
+ 'depends_on': 'eval:(doc.docstatus === 1)',
+ 'allow_on_submit': 1,
+ 'insert_after': 'tax_id',
+ 'translatable': 0
+ })
+
+ ewaybill_field.save()
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/fix_subscription_next_date.py b/erpnext/patches/v9_0/fix_subscription_next_date.py
index 1789848..4595c8d 100644
--- a/erpnext/patches/v9_0/fix_subscription_next_date.py
+++ b/erpnext/patches/v9_0/fix_subscription_next_date.py
@@ -4,7 +4,7 @@
from __future__ import unicode_literals
import frappe
from frappe.utils import getdate
-from frappe.desk.doctype.auto_repeat.auto_repeat import get_next_schedule_date
+from frappe.automation.doctype.auto_repeat.auto_repeat import get_next_schedule_date
def execute():
frappe.reload_doc('accounts', 'doctype', 'subscription')
diff --git a/erpnext/projects/doctype/project/project.json b/erpnext/projects/doctype/project/project.json
index b4536c0..dc221bc 100644
--- a/erpnext/projects/doctype/project/project.json
+++ b/erpnext/projects/doctype/project/project.json
@@ -126,7 +126,8 @@
"fieldname": "project_template",
"fieldtype": "Link",
"label": "From Template",
- "options": "Project Template"
+ "options": "Project Template",
+ "set_only_once": 1
},
{
"fieldname": "expected_start_date",
@@ -442,7 +443,7 @@
"icon": "fa fa-puzzle-piece",
"idx": 29,
"max_attachments": 4,
- "modified": "2019-06-25 16:14:43.887151",
+ "modified": "2019-07-16 11:11:12.343658",
"modified_by": "Administrator",
"module": "Projects",
"name": "Project",
@@ -481,6 +482,7 @@
"quick_entry": 1,
"search_fields": "customer, status, priority, is_active",
"show_name_in_global_search": 1,
+ "sort_field": "modified",
"sort_order": "DESC",
"timeline_field": "customer",
"track_seen": 1
diff --git a/erpnext/projects/doctype/project_user/project_user.json b/erpnext/projects/doctype/project_user/project_user.json
index 458028f..f0a70dd 100644
--- a/erpnext/projects/doctype/project_user/project_user.json
+++ b/erpnext/projects/doctype/project_user/project_user.json
@@ -1,333 +1,85 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2016-03-25 02:52:19.283003",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
+ "creation": "2016-03-25 02:52:19.283003",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "user",
+ "email",
+ "image",
+ "column_break_2",
+ "full_name",
+ "welcome_email_sent",
+ "view_attachments",
+ "section_break_5",
+ "project_status"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "user",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "User",
- "length": 0,
- "no_copy": 0,
- "options": "User",
- "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": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
+ "fieldname": "user",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "User",
+ "options": "User",
+ "reqd": 1,
+ "search_index": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_from": "user.email",
- "fieldname": "email",
- "fieldtype": "Read Only",
- "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": "Email",
- "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,
- "translatable": 0,
- "unique": 0
- },
+ "fetch_from": "user.email",
+ "fieldname": "email",
+ "fieldtype": "Read Only",
+ "label": "Email"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_from": "user.user_image",
- "fieldname": "image",
- "fieldtype": "Read Only",
- "hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 1,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Image",
- "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,
- "translatable": 0,
- "unique": 0
- },
+ "fetch_from": "user.user_image",
+ "fieldname": "image",
+ "fieldtype": "Read Only",
+ "hidden": 1,
+ "in_global_search": 1,
+ "label": "Image"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "column_break_2",
- "fieldtype": "Column Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
- },
+ "fieldname": "column_break_2",
+ "fieldtype": "Column Break"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "user.full_name",
- "fieldname": "full_name",
- "fieldtype": "Read Only",
- "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": "Full Name",
- "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,
- "translatable": 0,
- "unique": 0
- },
+ "fetch_from": "user.full_name",
+ "fieldname": "full_name",
+ "fieldtype": "Read Only",
+ "label": "Full Name"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "welcome_email_sent",
- "fieldtype": "Check",
- "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": "Welcome email sent",
- "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,
- "translatable": 0,
- "unique": 0
- },
+ "default": "0",
+ "fieldname": "welcome_email_sent",
+ "fieldtype": "Check",
+ "label": "Welcome email sent"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 1,
- "fieldname": "view_attachments",
- "fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "View attachments",
- "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,
- "translatable": 0,
- "unique": 0
- },
+ "columns": 1,
+ "default": "0",
+ "fieldname": "view_attachments",
+ "fieldtype": "Check",
+ "in_list_view": 1,
+ "label": "View attachments"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "section_break_5",
- "fieldtype": "Section Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
- },
+ "fieldname": "section_break_5",
+ "fieldtype": "Section Break"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:parent.doctype == 'Project Update'",
- "fieldname": "project_status",
- "fieldtype": "Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Project Status",
- "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,
- "translatable": 0,
- "unique": 0
+ "depends_on": "eval:parent.doctype == 'Project Update'",
+ "fieldname": "project_status",
+ "fieldtype": "Text",
+ "label": "Project Status"
}
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 1,
- "max_attachments": 0,
- "modified": "2019-01-17 17:10:05.339735",
- "modified_by": "Administrator",
- "module": "Projects",
- "name": "Project User",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 0,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 0,
- "track_seen": 0,
- "track_views": 0
+ ],
+ "istable": 1,
+ "modified": "2019-07-15 19:37:26.942294",
+ "modified_by": "Administrator",
+ "module": "Projects",
+ "name": "Project User",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
+ "sort_order": "DESC"
}
\ No newline at end of file
diff --git a/erpnext/projects/doctype/task/task.js b/erpnext/projects/doctype/task/task.js
index 489c7a3..5719276 100644
--- a/erpnext/projects/doctype/task/task.js
+++ b/erpnext/projects/doctype/task/task.js
@@ -42,20 +42,6 @@
frappe.set_route("List", "Expense Claim");
}, __("View"), true);
}
-
- if (frm.perm[0].write) {
- if (!["Closed", "Cancelled"].includes(frm.doc.status)) {
- frm.add_custom_button(__("Close"), () => {
- frm.set_value("status", "Closed");
- frm.save();
- });
- } else {
- frm.add_custom_button(__("Reopen"), () => {
- frm.set_value("status", "Open");
- frm.save();
- });
- }
- }
}
}
},
diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js
index 750900e..acc09ed 100644
--- a/erpnext/public/js/controllers/buying.js
+++ b/erpnext/public/js/controllers/buying.js
@@ -346,7 +346,7 @@
update_auto_repeat_reference: function(doc) {
if (doc.auto_repeat) {
frappe.call({
- method:"frappe.desk.doctype.auto_repeat.auto_repeat.update_reference",
+ method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
args:{
docname: doc.auto_repeat,
reference:doc.name
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 11fdb8b..844db99 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -1424,11 +1424,14 @@
},
callback: function(r) {
if(!r.exc) {
- me.frm.set_value("taxes", r.message);
+ if(me.frm.doc.shipping_rule && me.frm.doc.taxes) {
+ for (let tax of r.message) {
+ me.frm.add_child("taxes", tax);
+ }
- if(me.frm.doc.shipping_rule) {
- me.frm.script_manager.trigger("shipping_rule");
+ refresh_field("taxes");
} else {
+ me.frm.set_value("taxes", r.message);
me.calculate_taxes_and_totals();
}
}
diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js
index 560a561..84d2113 100644
--- a/erpnext/public/js/queries.js
+++ b/erpnext/public/js/queries.js
@@ -65,7 +65,7 @@
frappe.throw(__("Please set {0}",
[__(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name))]));
}
-
+ console.log(frappe.dynamic_link)
return {
query: 'frappe.contacts.doctype.address.address.address_query',
filters: {
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 0cd648e..0252f38 100755
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -180,7 +180,7 @@
make_subscription: function(doctype, docname) {
frappe.call({
- method: "frappe.desk.doctype.auto_repeat.auto_repeat.make_auto_repeat",
+ method: "frappe.automation.doctype.auto_repeat.auto_repeat.make_auto_repeat",
args: {
doctype: doctype,
docname: docname
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 35185c9..a8d3888 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -145,7 +145,7 @@
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",
- frm.doc.customer || frm.doc.supplier || frm.doc.lead, triggered_from_field)) {
+ frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
return;
}
diff --git a/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json b/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json
index d0b368f..5bd8920 100644
--- a/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json
+++ b/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json
@@ -28,7 +28,7 @@
"fieldtype": "Select",
"in_list_view": 1,
"label": "Rating",
- "options": "1\n2\n3\n4\n5",
+ "options": "\n1\n2\n3\n4\n5",
"reqd": 1
},
{
@@ -44,7 +44,7 @@
}
],
"istable": 1,
- "modified": "2019-05-26 21:50:48.951264",
+ "modified": "2019-07-13 19:58:08.966141",
"modified_by": "Administrator",
"module": "Quality Management",
"name": "Quality Feedback Parameter",
diff --git a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json
index 6985632..0849fd7 100644
--- a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json
+++ b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json
@@ -26,7 +26,7 @@
"fieldname": "status",
"fieldtype": "Select",
"label": "Status",
- "options": "Open\nClose"
+ "options": "Open\nClosed"
},
{
"fieldname": "minutes",
@@ -55,7 +55,7 @@
"label": "Minutes"
}
],
- "modified": "2019-05-26 23:12:23.364357",
+ "modified": "2019-07-13 19:57:40.500541",
"modified_by": "Administrator",
"module": "Quality Management",
"name": "Quality Meeting",
diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py
index eeb314c..40b98ed 100644
--- a/erpnext/regional/india/setup.py
+++ b/erpnext/regional/india/setup.py
@@ -354,7 +354,7 @@
'fieldtype': 'Data',
'depends_on': 'eval:(doc.docstatus === 1)',
'allow_on_submit': 1,
- 'insert_after': 'project',
+ 'insert_after': 'tax_id',
'translatable': 0
}
]
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index e9b310e..0c5188a 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -14,7 +14,7 @@
from frappe.desk.notifications import clear_doctype_notifications
from frappe.contacts.doctype.address.address import get_company_address
from erpnext.controllers.selling_controller import SellingController
-from frappe.desk.doctype.auto_repeat.auto_repeat import get_next_schedule_date
+from frappe.automation.doctype.auto_repeat.auto_repeat import get_next_schedule_date
from erpnext.selling.doctype.customer.customer import check_credit_limit
from erpnext.stock.doctype.item.item import get_item_defaults
from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults
diff --git a/erpnext/selling/doctype/sales_order/sales_order_list.js b/erpnext/selling/doctype/sales_order/sales_order_list.js
index 15c9eb5..301ecde 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_list.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_list.js
@@ -34,7 +34,7 @@
"per_delivered,<,100|per_billed,=,100|status,!=,Closed"];
}
- } else if ((flt(doc.per_delivered, 6) == 100)
+ } else if ((flt(doc.per_delivered, 6) === 100)
&& flt(doc.grand_total) !== 0 && flt(doc.per_billed, 6) < 100 && doc.status !== "Closed") {
// to bill
@@ -48,7 +48,7 @@
if(flt(doc.per_billed, 6) < 100 ){
return [__("To Deliver and Bill"), "orange", "per_delivered,=,100|per_billed,<,100|status,!=,Closed"];
- }else if(flt(doc.per_billed, 6) == 100){
+ }else if(flt(doc.per_billed, 6) === 100){
return [__("To Deliver"), "orange", "per_delivered,=,100|per_billed,=,100|status,!=,Closed"];
}
}
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index 569c53f..bd07841 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -192,8 +192,8 @@
def test_reserved_qty_for_over_delivery(self):
make_stock_entry(target="_Test Warehouse - _TC", qty=10, rate=100)
- # set over-delivery tolerance
- frappe.db.set_value('Item', "_Test Item", 'tolerance', 50)
+ # set over-delivery allowance
+ frappe.db.set_value('Item', "_Test Item", 'over_delivery_receipt_allowance', 50)
existing_reserved_qty = get_reserved_qty()
@@ -209,8 +209,9 @@
def test_reserved_qty_for_over_delivery_via_sales_invoice(self):
make_stock_entry(target="_Test Warehouse - _TC", qty=10, rate=100)
- # set over-delivery tolerance
- frappe.db.set_value('Item', "_Test Item", 'tolerance', 50)
+ # set over-delivery allowance
+ frappe.db.set_value('Item', "_Test Item", 'over_delivery_receipt_allowance', 50)
+ frappe.db.set_value('Item', "_Test Item", 'over_billing_allowance', 20)
existing_reserved_qty = get_reserved_qty()
@@ -291,8 +292,8 @@
make_stock_entry(target="_Test Warehouse - _TC", qty=10, rate=100)
make_stock_entry(item="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", qty=10, rate=100)
- # set over-delivery tolerance
- frappe.db.set_value('Item', "_Test Product Bundle Item", 'tolerance', 50)
+ # set over-delivery allowance
+ frappe.db.set_value('Item', "_Test Product Bundle Item", 'over_delivery_receipt_allowance', 50)
existing_reserved_qty_item1 = get_reserved_qty("_Test Item")
existing_reserved_qty_item2 = get_reserved_qty("_Test Item Home Desktop 100")
diff --git a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js
index de8abdc..3a99eb0 100644
--- a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js
+++ b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js
@@ -16,20 +16,6 @@
"label": __("Customer"),
"fieldtype": "Link",
"options": "Customer"
- },
- {
- "fieldname":"cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center",
- get_query: () => {
- var company = frappe.query_report.get_filter_value('company');
- return {
- filters: {
- 'company': company
- }
- }
- }
- },
+ }
]
}
diff --git a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py
index a57d975..ee0d72b 100644
--- a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py
+++ b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py
@@ -21,8 +21,7 @@
row = []
outstanding_amt = get_customer_outstanding(d.name, filters.get("company"),
- ignore_outstanding_sales_order=d.bypass_credit_limit_check_at_sales_order,
- cost_center=filters.get("cost_center"))
+ ignore_outstanding_sales_order=d.bypass_credit_limit_check_at_sales_order)
credit_limit = get_credit_limit(d.name, filters.get("company"))
@@ -66,3 +65,4 @@
return frappe.db.sql("""select name, customer_name,
bypass_credit_limit_check_at_sales_order, is_frozen, disabled from `tabCustomer` %s
""" % conditions, filters, as_dict=1)
+
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index a2bae56..000d666 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -428,7 +428,7 @@
update_auto_repeat_reference: function(doc) {
if (doc.auto_repeat) {
frappe.call({
- method:"frappe.desk.doctype.auto_repeat.auto_repeat.update_reference",
+ method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
args:{
docname: doc.auto_repeat,
reference:doc.name
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index ec7df2d..2de9b97 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -51,7 +51,7 @@
'source_field': 'qty',
'percent_join_field': 'against_sales_invoice',
'overflow_type': 'delivery',
- 'no_tolerance': 1
+ 'no_allowance': 1
}]
if cint(self.is_return):
self.status_updater.append({
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index 164ffa4..a142bb9 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -29,7 +29,8 @@
"is_fixed_asset",
"asset_category",
"asset_naming_series",
- "tolerance",
+ "over_delivery_receipt_allowance",
+ "over_billing_allowance",
"image",
"section_break_11",
"brand",
@@ -285,14 +286,6 @@
"label": "Asset Naming Series"
},
{
- "depends_on": "eval:!doc.__islocal",
- "fieldname": "tolerance",
- "fieldtype": "Float",
- "label": "Allow over delivery or receipt upto this percent",
- "oldfieldname": "tolerance",
- "oldfieldtype": "Currency"
- },
- {
"fieldname": "image",
"fieldtype": "Attach Image",
"hidden": 1,
@@ -1021,6 +1014,26 @@
"fieldtype": "Check",
"label": "Synced With Hub",
"read_only": 1
+ },
+ {
+ "fieldname": "manufacturers",
+ "fieldtype": "Table",
+ "label": "Manufacturers",
+ "options": "Item Manufacturer"
+ },
+ {
+ "depends_on": "eval:!doc.__islocal",
+ "fieldname": "over_delivery_receipt_allowance",
+ "fieldtype": "Float",
+ "label": "Over Delivery/Receipt Allowance (%)",
+ "oldfieldname": "tolerance",
+ "oldfieldtype": "Currency"
+ },
+ {
+ "fieldname": "over_billing_allowance",
+ "fieldtype": "Float",
+ "label": "Over Billing Allowance (%)",
+ "depends_on": "eval:!doc.__islocal"
}
],
"has_web_view": 1,
@@ -1028,7 +1041,7 @@
"idx": 2,
"image_field": "image",
"max_attachments": 1,
- "modified": "2019-07-05 12:18:13.977931",
+ "modified": "2019-07-12 12:18:13.977931",
"modified_by": "Administrator",
"module": "Stock",
"name": "Item",
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 6484b93..03e903c 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -1007,7 +1007,7 @@
if item_code:
item_cache = ItemVariantsCacheManager(item_code)
- item_cache.rebuild_cache()
+ item_cache.clear_cache()
def check_stock_uom_with_bin(item, stock_uom):
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.json b/erpnext/stock/doctype/stock_entry/stock_entry.json
index bbc54ec..ee563cb 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.json
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.json
@@ -1,2376 +1,693 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 1,
- "allow_rename": 0,
- "autoname": "naming_series:",
- "beta": 0,
- "creation": "2013-04-09 11:43:55",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Document",
- "editable_grid": 0,
- "engine": "InnoDB",
- "fields": [
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "items_section",
- "fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "",
- "length": 0,
- "no_copy": 0,
- "oldfieldtype": "Section Break",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 1,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "{purpose}",
- "fetch_if_empty": 0,
- "fieldname": "title",
- "fieldtype": "Data",
- "hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Title",
- "length": 0,
- "no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "",
- "fetch_if_empty": 0,
- "fieldname": "naming_series",
- "fieldtype": "Select",
- "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": "Series",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "naming_series",
- "oldfieldtype": "Select",
- "options": "MAT-STE-.YYYY.-",
- "permlevel": 0,
- "print_hide": 1,
- "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": 1,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "stock_entry_type",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Stock Entry Type",
- "length": 0,
- "no_copy": 0,
- "options": "Stock Entry Type",
- "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
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose == 'Receive at Warehouse'",
- "fetch_if_empty": 0,
- "fieldname": "outgoing_stock_entry",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Stock Entry (Outward GIT)",
- "length": 0,
- "no_copy": 0,
- "options": "Stock Entry",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 1,
- "collapsible": 0,
- "columns": 0,
- "default": "",
- "fetch_from": "stock_entry_type.purpose",
- "fetch_if_empty": 0,
- "fieldname": "purpose",
- "fieldtype": "Select",
- "hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Purpose",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "purpose",
- "oldfieldtype": "Select",
- "options": "Material Issue\nMaterial Receipt\nMaterial Transfer\nMaterial Transfer for Manufacture\nMaterial Consumption for Manufacture\nManufacture\nRepack\nSend to Subcontractor\nSend to Warehouse\nReceive at Warehouse",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "company",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Company",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "company",
- "oldfieldtype": "Link",
- "options": "Company",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 1,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:in_list([\"Material Transfer for Manufacture\", \"Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
- "fetch_if_empty": 0,
- "fieldname": "work_order",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Work Order",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "production_order",
- "oldfieldtype": "Link",
- "options": "Work Order",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Send to Subcontractor\"",
- "fetch_if_empty": 0,
- "fieldname": "purchase_order",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Purchase Order",
- "length": 0,
- "no_copy": 0,
- "options": "Purchase Order",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Sales Return\"",
- "fetch_if_empty": 0,
- "fieldname": "delivery_note_no",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Delivery Note No",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "delivery_note_no",
- "oldfieldtype": "Link",
- "options": "Delivery Note",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Sales Return\"",
- "fetch_if_empty": 0,
- "fieldname": "sales_invoice_no",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Sales Invoice No",
- "length": 0,
- "no_copy": 1,
- "options": "Sales Invoice",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Purchase Return\"",
- "fetch_if_empty": 0,
- "fieldname": "purchase_receipt_no",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Purchase Receipt No",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "purchase_receipt_no",
- "oldfieldtype": "Link",
- "options": "Purchase Receipt",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "col2",
- "fieldtype": "Column Break",
- "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,
- "length": 0,
- "no_copy": 0,
- "oldfieldtype": "Column Break",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "print_width": "50%",
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0,
- "width": "50%"
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "Today",
- "depends_on": "",
- "fetch_if_empty": 0,
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "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": "Posting Date",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "posting_date",
- "oldfieldtype": "Date",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "",
- "fetch_if_empty": 0,
- "fieldname": "posting_time",
- "fieldtype": "Time",
- "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": "Posting Time",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "posting_time",
- "oldfieldtype": "Time",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.docstatus==0",
- "fetch_if_empty": 0,
- "fieldname": "set_posting_time",
- "fieldtype": "Check",
- "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": "Edit Posting Date and Time",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "inspection_required",
- "fieldtype": "Check",
- "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": "Inspection Required",
- "length": 0,
- "no_copy": 0,
- "options": "",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:in_list([\"Material Issue\", \"Material Transfer\", \"Manufacture\", \"Repack\", \t\t\t\t\t\"Send to Subcontractor\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
- "fetch_if_empty": 0,
- "fieldname": "from_bom",
- "fieldtype": "Check",
- "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": "From BOM",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval: doc.from_bom && (doc.purpose!==\"Sales Return\" && doc.purpose!==\"Purchase Return\")",
- "fetch_if_empty": 0,
- "fieldname": "sb1",
- "fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "from_bom",
- "fetch_if_empty": 0,
- "fieldname": "bom_no",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "BOM No",
- "length": 0,
- "no_copy": 0,
- "options": "BOM",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "from_bom",
- "description": "As per Stock UOM",
- "fetch_if_empty": 0,
- "fieldname": "fg_completed_qty",
- "fieldtype": "Float",
- "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": "For Quantity",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "fg_completed_qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "cb1",
- "fieldtype": "Column Break",
- "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,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "1",
- "depends_on": "from_bom",
- "description": "Including items for sub assemblies",
- "fetch_if_empty": 0,
- "fieldname": "use_multi_level_bom",
- "fieldtype": "Check",
- "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": "Use Multi-Level BOM",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "from_bom",
- "fetch_if_empty": 0,
- "fieldname": "get_items",
- "fieldtype": "Button",
- "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": "Get Items",
- "length": 0,
- "no_copy": 0,
- "oldfieldtype": "Button",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "section_break_12",
- "fieldtype": "Section Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "from_warehouse",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Default Source Warehouse",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "from_warehouse",
- "oldfieldtype": "Link",
- "options": "Warehouse",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "from_warehouse",
- "fetch_if_empty": 0,
- "fieldname": "source_warehouse_address",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Source Warehouse Address",
- "length": 0,
- "no_copy": 0,
- "options": "Address",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "source_address_display",
- "fieldtype": "Small Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Source Warehouse Address",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "cb0",
- "fieldtype": "Column Break",
- "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,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "to_warehouse",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Default Target Warehouse",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "to_warehouse",
- "oldfieldtype": "Link",
- "options": "Warehouse",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "to_warehouse",
- "fetch_if_empty": 0,
- "fieldname": "target_warehouse_address",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Target Warehouse Name",
- "length": 0,
- "no_copy": 0,
- "options": "Address",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "target_address_display",
- "fieldtype": "Small Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Target Warehouse Address",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "sb0",
- "fieldtype": "Section Break",
- "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,
- "length": 0,
- "no_copy": 0,
- "options": "Simple",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "scan_barcode",
- "fieldtype": "Data",
- "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": "Scan Barcode",
- "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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "items",
- "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": "Items",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "mtn_details",
- "oldfieldtype": "Table",
- "options": "Stock Entry Detail",
- "permlevel": 0,
- "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
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "description": "",
- "fetch_if_empty": 0,
- "fieldname": "get_stock_and_rate",
- "fieldtype": "Button",
- "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": "Update Rate and Availability",
- "length": 0,
- "no_copy": 0,
- "oldfieldtype": "Button",
- "options": "get_stock_and_rate",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "section_break_19",
- "fieldtype": "Section Break",
- "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,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "total_incoming_value",
- "fieldtype": "Currency",
- "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": "Total Incoming Value",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "column_break_22",
- "fieldtype": "Column Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "total_outgoing_value",
- "fieldtype": "Currency",
- "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": "Total Outgoing Value",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "value_difference",
- "fieldtype": "Currency",
- "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": "Total Value Difference (Out - In)",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 1,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 1,
- "collapsible_depends_on": "total_additional_costs",
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "additional_costs_section",
- "fieldtype": "Section Break",
- "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": "Additional Costs",
- "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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "additional_costs",
- "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": "Additional Costs",
- "length": 0,
- "no_copy": 0,
- "options": "Landed Cost Taxes and Charges",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "total_additional_costs",
- "fieldtype": "Currency",
- "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": "Total Additional Costs",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 1,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 1,
- "columns": 0,
- "depends_on": "eval: in_list([\"Sales Return\", \"Purchase Return\", \"Send to Subcontractor\"], doc.purpose)",
- "fetch_if_empty": 0,
- "fieldname": "contact_section",
- "fieldtype": "Section Break",
- "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": "Customer or Supplier Details",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Send to Subcontractor\"",
- "fetch_if_empty": 0,
- "fieldname": "supplier",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Supplier",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "supplier",
- "oldfieldtype": "Link",
- "options": "Supplier",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 1,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Send to Subcontractor\"",
- "fetch_if_empty": 0,
- "fieldname": "supplier_name",
- "fieldtype": "Data",
- "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": "Supplier Name",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "supplier_name",
- "oldfieldtype": "Data",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Send to Subcontractor\"",
- "fetch_if_empty": 0,
- "fieldname": "supplier_address",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Supplier Address",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "supplier_address",
- "oldfieldtype": "Small Text",
- "options": "Address",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "address_display",
- "fieldtype": "Small Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Address",
- "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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "column_break_39",
- "fieldtype": "Column Break",
- "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,
- "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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Sales Return\"",
- "fetch_if_empty": 0,
- "fieldname": "customer",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Customer",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "customer",
- "oldfieldtype": "Link",
- "options": "Customer",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 1,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Sales Return\"",
- "fetch_if_empty": 0,
- "fieldname": "customer_name",
- "fieldtype": "Data",
- "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": "Customer Name",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "customer_name",
- "oldfieldtype": "Data",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "eval:doc.purpose==\"Sales Return\"",
- "fetch_if_empty": 0,
- "fieldname": "customer_address",
- "fieldtype": "Small Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Customer Address",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "customer_address",
- "oldfieldtype": "Small Text",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 1,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "printing_settings",
- "fieldtype": "Section Break",
- "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": "Printing Settings",
- "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,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 1,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "select_print_heading",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Print Heading",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "select_print_heading",
- "oldfieldtype": "Link",
- "options": "Print Heading",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "letter_head",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Letter Head",
- "length": 0,
- "no_copy": 0,
- "options": "Letter Head",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 1,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "more_info",
- "fieldtype": "Section Break",
- "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": "More Information",
- "length": 0,
- "no_copy": 0,
- "oldfieldtype": "Section Break",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "is_opening",
- "fieldtype": "Select",
- "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": "Is Opening",
- "length": 0,
- "no_copy": 0,
- "options": "No\nYes",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "project",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Project",
- "length": 0,
- "no_copy": 0,
- "oldfieldtype": "Link",
- "options": "Project",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "remarks",
- "fieldtype": "Text",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Remarks",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "remarks",
- "oldfieldtype": "Text",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "col5",
- "fieldtype": "Column Break",
- "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,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "print_width": "50%",
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0,
- "width": "50%"
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "",
- "fetch_if_empty": 0,
- "fieldname": "per_transferred",
- "fieldtype": "Percent",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Per Transferred",
- "length": 0,
- "no_copy": 1,
- "options": "",
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "depends_on": "total_amount",
- "fetch_if_empty": 0,
- "fieldname": "total_amount",
- "fieldtype": "Currency",
- "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": "Total Amount",
- "length": 0,
- "no_copy": 0,
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 1,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "job_card",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Job Card",
- "length": 0,
- "no_copy": 0,
- "options": "Job Card",
- "permlevel": 0,
- "precision": "",
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "amended_from",
- "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": "Amended From",
- "length": 0,
- "no_copy": 1,
- "oldfieldname": "amended_from",
- "oldfieldtype": "Link",
- "options": "Stock Entry",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
- "fieldname": "credit_note",
- "fieldtype": "Link",
- "hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Credit Note",
- "length": 0,
- "no_copy": 0,
- "options": "Journal Entry",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- }
- ],
- "has_web_view": 0,
- "hide_toolbar": 0,
- "icon": "fa fa-file-text",
- "idx": 1,
- "in_create": 0,
- "is_submittable": 1,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2019-05-23 12:24:46.439626",
- "modified_by": "Administrator",
- "module": "Stock",
- "name": "Stock Entry",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Stock User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Manufacturing User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Manufacturing Manager",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 1,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Stock Manager",
- "set_user_permissions": 1,
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "quick_entry": 0,
- "read_only": 0,
- "search_fields": "posting_date, from_warehouse, to_warehouse, purpose, remarks",
- "show_name_in_global_search": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "title",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
- }
\ No newline at end of file
+ "allow_import": 1,
+ "autoname": "naming_series:",
+ "creation": "2013-04-09 11:43:55",
+ "doctype": "DocType",
+ "document_type": "Document",
+ "engine": "InnoDB",
+ "field_order": [
+ "items_section",
+ "title",
+ "naming_series",
+ "stock_entry_type",
+ "outgoing_stock_entry",
+ "purpose",
+ "company",
+ "work_order",
+ "purchase_order",
+ "delivery_note_no",
+ "sales_invoice_no",
+ "purchase_receipt_no",
+ "col2",
+ "posting_date",
+ "posting_time",
+ "set_posting_time",
+ "inspection_required",
+ "from_bom",
+ "sb1",
+ "bom_no",
+ "fg_completed_qty",
+ "cb1",
+ "use_multi_level_bom",
+ "get_items",
+ "section_break_12",
+ "from_warehouse",
+ "source_warehouse_address",
+ "source_address_display",
+ "cb0",
+ "to_warehouse",
+ "target_warehouse_address",
+ "target_address_display",
+ "sb0",
+ "scan_barcode",
+ "items",
+ "get_stock_and_rate",
+ "section_break_19",
+ "total_incoming_value",
+ "column_break_22",
+ "total_outgoing_value",
+ "value_difference",
+ "additional_costs_section",
+ "additional_costs",
+ "total_additional_costs",
+ "contact_section",
+ "supplier",
+ "supplier_name",
+ "supplier_address",
+ "address_display",
+ "column_break_39",
+ "customer",
+ "customer_name",
+ "customer_address",
+ "accounting_dimensions_section",
+ "project",
+ "dimension_col_break",
+ "printing_settings",
+ "select_print_heading",
+ "letter_head",
+ "more_info",
+ "is_opening",
+ "remarks",
+ "col5",
+ "per_transferred",
+ "total_amount",
+ "job_card",
+ "amended_from",
+ "credit_note"
+ ],
+ "fields": [
+ {
+ "fieldname": "items_section",
+ "fieldtype": "Section Break",
+ "oldfieldtype": "Section Break"
+ },
+ {
+ "allow_on_submit": 1,
+ "default": "{purpose}",
+ "fieldname": "title",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "label": "Title",
+ "no_copy": 1,
+ "print_hide": 1
+ },
+ {
+ "fieldname": "naming_series",
+ "fieldtype": "Select",
+ "label": "Series",
+ "no_copy": 1,
+ "oldfieldname": "naming_series",
+ "oldfieldtype": "Select",
+ "options": "MAT-STE-.YYYY.-",
+ "print_hide": 1,
+ "reqd": 1,
+ "set_only_once": 1
+ },
+ {
+ "fieldname": "stock_entry_type",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "Stock Entry Type",
+ "options": "Stock Entry Type",
+ "reqd": 1
+ },
+ {
+ "depends_on": "eval:doc.purpose == 'Receive at Warehouse'",
+ "fieldname": "outgoing_stock_entry",
+ "fieldtype": "Link",
+ "label": "Stock Entry (Outward GIT)",
+ "options": "Stock Entry"
+ },
+ {
+ "bold": 1,
+ "fetch_from": "stock_entry_type.purpose",
+ "fieldname": "purpose",
+ "fieldtype": "Select",
+ "hidden": 1,
+ "in_list_view": 1,
+ "label": "Purpose",
+ "oldfieldname": "purpose",
+ "oldfieldtype": "Select",
+ "options": "Material Issue\nMaterial Receipt\nMaterial Transfer\nMaterial Transfer for Manufacture\nMaterial Consumption for Manufacture\nManufacture\nRepack\nSend to Subcontractor\nSend to Warehouse\nReceive at Warehouse",
+ "read_only": 1
+ },
+ {
+ "fieldname": "company",
+ "fieldtype": "Link",
+ "label": "Company",
+ "oldfieldname": "company",
+ "oldfieldtype": "Link",
+ "options": "Company",
+ "print_hide": 1,
+ "remember_last_selected_value": 1,
+ "reqd": 1
+ },
+ {
+ "depends_on": "eval:in_list([\"Material Transfer for Manufacture\", \"Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
+ "fieldname": "work_order",
+ "fieldtype": "Link",
+ "label": "Work Order",
+ "oldfieldname": "production_order",
+ "oldfieldtype": "Link",
+ "options": "Work Order",
+ "print_hide": 1,
+ "search_index": 1
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Send to Subcontractor\"",
+ "fieldname": "purchase_order",
+ "fieldtype": "Link",
+ "label": "Purchase Order",
+ "options": "Purchase Order"
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Sales Return\"",
+ "fieldname": "delivery_note_no",
+ "fieldtype": "Link",
+ "label": "Delivery Note No",
+ "no_copy": 1,
+ "oldfieldname": "delivery_note_no",
+ "oldfieldtype": "Link",
+ "options": "Delivery Note",
+ "print_hide": 1,
+ "search_index": 1
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Sales Return\"",
+ "fieldname": "sales_invoice_no",
+ "fieldtype": "Link",
+ "label": "Sales Invoice No",
+ "no_copy": 1,
+ "options": "Sales Invoice",
+ "print_hide": 1
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Purchase Return\"",
+ "fieldname": "purchase_receipt_no",
+ "fieldtype": "Link",
+ "label": "Purchase Receipt No",
+ "no_copy": 1,
+ "oldfieldname": "purchase_receipt_no",
+ "oldfieldtype": "Link",
+ "options": "Purchase Receipt",
+ "print_hide": 1,
+ "search_index": 1
+ },
+ {
+ "fieldname": "col2",
+ "fieldtype": "Column Break",
+ "oldfieldtype": "Column Break",
+ "print_width": "50%",
+ "width": "50%"
+ },
+ {
+ "default": "Today",
+ "fieldname": "posting_date",
+ "fieldtype": "Date",
+ "label": "Posting Date",
+ "no_copy": 1,
+ "oldfieldname": "posting_date",
+ "oldfieldtype": "Date",
+ "search_index": 1
+ },
+ {
+ "fieldname": "posting_time",
+ "fieldtype": "Time",
+ "label": "Posting Time",
+ "no_copy": 1,
+ "oldfieldname": "posting_time",
+ "oldfieldtype": "Time",
+ "print_hide": 1
+ },
+ {
+ "default": "0",
+ "depends_on": "eval:doc.docstatus==0",
+ "fieldname": "set_posting_time",
+ "fieldtype": "Check",
+ "label": "Edit Posting Date and Time",
+ "print_hide": 1
+ },
+ {
+ "default": "0",
+ "fieldname": "inspection_required",
+ "fieldtype": "Check",
+ "label": "Inspection Required"
+ },
+ {
+ "default": "0",
+ "depends_on": "eval:in_list([\"Material Issue\", \"Material Transfer\", \"Manufacture\", \"Repack\", \t\t\t\t\t\"Send to Subcontractor\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
+ "fieldname": "from_bom",
+ "fieldtype": "Check",
+ "label": "From BOM",
+ "print_hide": 1
+ },
+ {
+ "depends_on": "eval: doc.from_bom && (doc.purpose!==\"Sales Return\" && doc.purpose!==\"Purchase Return\")",
+ "fieldname": "sb1",
+ "fieldtype": "Section Break"
+ },
+ {
+ "depends_on": "from_bom",
+ "fieldname": "bom_no",
+ "fieldtype": "Link",
+ "label": "BOM No",
+ "options": "BOM"
+ },
+ {
+ "depends_on": "from_bom",
+ "description": "As per Stock UOM",
+ "fieldname": "fg_completed_qty",
+ "fieldtype": "Float",
+ "label": "For Quantity",
+ "oldfieldname": "fg_completed_qty",
+ "oldfieldtype": "Currency",
+ "print_hide": 1
+ },
+ {
+ "fieldname": "cb1",
+ "fieldtype": "Column Break"
+ },
+ {
+ "default": "1",
+ "depends_on": "from_bom",
+ "description": "Including items for sub assemblies",
+ "fieldname": "use_multi_level_bom",
+ "fieldtype": "Check",
+ "label": "Use Multi-Level BOM",
+ "print_hide": 1
+ },
+ {
+ "depends_on": "from_bom",
+ "fieldname": "get_items",
+ "fieldtype": "Button",
+ "label": "Get Items",
+ "oldfieldtype": "Button",
+ "print_hide": 1
+ },
+ {
+ "fieldname": "section_break_12",
+ "fieldtype": "Section Break"
+ },
+ {
+ "fieldname": "from_warehouse",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "Default Source Warehouse",
+ "no_copy": 1,
+ "oldfieldname": "from_warehouse",
+ "oldfieldtype": "Link",
+ "options": "Warehouse",
+ "print_hide": 1
+ },
+ {
+ "depends_on": "from_warehouse",
+ "fieldname": "source_warehouse_address",
+ "fieldtype": "Link",
+ "label": "Source Warehouse Address",
+ "options": "Address"
+ },
+ {
+ "fieldname": "source_address_display",
+ "fieldtype": "Small Text",
+ "label": "Source Warehouse Address",
+ "read_only": 1
+ },
+ {
+ "fieldname": "cb0",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "to_warehouse",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "Default Target Warehouse",
+ "no_copy": 1,
+ "oldfieldname": "to_warehouse",
+ "oldfieldtype": "Link",
+ "options": "Warehouse",
+ "print_hide": 1
+ },
+ {
+ "depends_on": "to_warehouse",
+ "fieldname": "target_warehouse_address",
+ "fieldtype": "Link",
+ "label": "Target Warehouse Name",
+ "options": "Address"
+ },
+ {
+ "fieldname": "target_address_display",
+ "fieldtype": "Small Text",
+ "label": "Target Warehouse Address",
+ "read_only": 1
+ },
+ {
+ "fieldname": "sb0",
+ "fieldtype": "Section Break",
+ "options": "Simple"
+ },
+ {
+ "fieldname": "scan_barcode",
+ "fieldtype": "Data",
+ "label": "Scan Barcode"
+ },
+ {
+ "fieldname": "items",
+ "fieldtype": "Table",
+ "label": "Items",
+ "oldfieldname": "mtn_details",
+ "oldfieldtype": "Table",
+ "options": "Stock Entry Detail",
+ "reqd": 1
+ },
+ {
+ "fieldname": "get_stock_and_rate",
+ "fieldtype": "Button",
+ "label": "Update Rate and Availability",
+ "oldfieldtype": "Button",
+ "options": "get_stock_and_rate",
+ "print_hide": 1
+ },
+ {
+ "fieldname": "section_break_19",
+ "fieldtype": "Section Break",
+ "print_hide": 1
+ },
+ {
+ "fieldname": "total_incoming_value",
+ "fieldtype": "Currency",
+ "label": "Total Incoming Value",
+ "options": "Company:company:default_currency",
+ "print_hide": 1,
+ "read_only": 1
+ },
+ {
+ "fieldname": "column_break_22",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "total_outgoing_value",
+ "fieldtype": "Currency",
+ "label": "Total Outgoing Value",
+ "options": "Company:company:default_currency",
+ "print_hide": 1,
+ "read_only": 1
+ },
+ {
+ "fieldname": "value_difference",
+ "fieldtype": "Currency",
+ "label": "Total Value Difference (Out - In)",
+ "options": "Company:company:default_currency",
+ "print_hide_if_no_value": 1,
+ "read_only": 1
+ },
+ {
+ "collapsible": 1,
+ "collapsible_depends_on": "total_additional_costs",
+ "fieldname": "additional_costs_section",
+ "fieldtype": "Section Break",
+ "label": "Additional Costs"
+ },
+ {
+ "fieldname": "additional_costs",
+ "fieldtype": "Table",
+ "label": "Additional Costs",
+ "options": "Landed Cost Taxes and Charges"
+ },
+ {
+ "fieldname": "total_additional_costs",
+ "fieldtype": "Currency",
+ "label": "Total Additional Costs",
+ "options": "Company:company:default_currency",
+ "print_hide_if_no_value": 1,
+ "read_only": 1
+ },
+ {
+ "collapsible": 1,
+ "depends_on": "eval: in_list([\"Sales Return\", \"Purchase Return\", \"Send to Subcontractor\"], doc.purpose)",
+ "fieldname": "contact_section",
+ "fieldtype": "Section Break",
+ "label": "Customer or Supplier Details"
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Send to Subcontractor\"",
+ "fieldname": "supplier",
+ "fieldtype": "Link",
+ "label": "Supplier",
+ "no_copy": 1,
+ "oldfieldname": "supplier",
+ "oldfieldtype": "Link",
+ "options": "Supplier",
+ "print_hide": 1
+ },
+ {
+ "bold": 1,
+ "depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Send to Subcontractor\"",
+ "fieldname": "supplier_name",
+ "fieldtype": "Data",
+ "label": "Supplier Name",
+ "no_copy": 1,
+ "oldfieldname": "supplier_name",
+ "oldfieldtype": "Data",
+ "read_only": 1
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Send to Subcontractor\"",
+ "fieldname": "supplier_address",
+ "fieldtype": "Link",
+ "label": "Supplier Address",
+ "no_copy": 1,
+ "oldfieldname": "supplier_address",
+ "oldfieldtype": "Small Text",
+ "options": "Address"
+ },
+ {
+ "fieldname": "address_display",
+ "fieldtype": "Small Text",
+ "label": "Address"
+ },
+ {
+ "fieldname": "column_break_39",
+ "fieldtype": "Column Break"
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Sales Return\"",
+ "fieldname": "customer",
+ "fieldtype": "Link",
+ "label": "Customer",
+ "no_copy": 1,
+ "oldfieldname": "customer",
+ "oldfieldtype": "Link",
+ "options": "Customer",
+ "print_hide": 1
+ },
+ {
+ "bold": 1,
+ "depends_on": "eval:doc.purpose==\"Sales Return\"",
+ "fieldname": "customer_name",
+ "fieldtype": "Data",
+ "label": "Customer Name",
+ "no_copy": 1,
+ "oldfieldname": "customer_name",
+ "oldfieldtype": "Data",
+ "read_only": 1
+ },
+ {
+ "depends_on": "eval:doc.purpose==\"Sales Return\"",
+ "fieldname": "customer_address",
+ "fieldtype": "Small Text",
+ "label": "Customer Address",
+ "no_copy": 1,
+ "oldfieldname": "customer_address",
+ "oldfieldtype": "Small Text"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "printing_settings",
+ "fieldtype": "Section Break",
+ "label": "Printing Settings"
+ },
+ {
+ "allow_on_submit": 1,
+ "fieldname": "select_print_heading",
+ "fieldtype": "Link",
+ "label": "Print Heading",
+ "oldfieldname": "select_print_heading",
+ "oldfieldtype": "Link",
+ "options": "Print Heading"
+ },
+ {
+ "fieldname": "letter_head",
+ "fieldtype": "Link",
+ "label": "Letter Head",
+ "options": "Letter Head"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "more_info",
+ "fieldtype": "Section Break",
+ "label": "More Information",
+ "oldfieldtype": "Section Break"
+ },
+ {
+ "fieldname": "is_opening",
+ "fieldtype": "Select",
+ "label": "Is Opening",
+ "options": "No\nYes"
+ },
+ {
+ "fieldname": "project",
+ "fieldtype": "Link",
+ "label": "Project",
+ "oldfieldtype": "Link",
+ "options": "Project"
+ },
+ {
+ "fieldname": "remarks",
+ "fieldtype": "Text",
+ "label": "Remarks",
+ "no_copy": 1,
+ "oldfieldname": "remarks",
+ "oldfieldtype": "Text",
+ "print_hide": 1
+ },
+ {
+ "fieldname": "col5",
+ "fieldtype": "Column Break",
+ "print_width": "50%",
+ "width": "50%"
+ },
+ {
+ "fieldname": "per_transferred",
+ "fieldtype": "Percent",
+ "in_list_view": 1,
+ "label": "Per Transferred",
+ "no_copy": 1,
+ "print_hide": 1,
+ "read_only": 1
+ },
+ {
+ "depends_on": "total_amount",
+ "fieldname": "total_amount",
+ "fieldtype": "Currency",
+ "label": "Total Amount",
+ "options": "Company:company:default_currency",
+ "print_hide_if_no_value": 1,
+ "read_only": 1
+ },
+ {
+ "fieldname": "job_card",
+ "fieldtype": "Link",
+ "label": "Job Card",
+ "options": "Job Card",
+ "print_hide": 1,
+ "read_only": 1
+ },
+ {
+ "fieldname": "amended_from",
+ "fieldtype": "Link",
+ "ignore_user_permissions": 1,
+ "label": "Amended From",
+ "no_copy": 1,
+ "oldfieldname": "amended_from",
+ "oldfieldtype": "Link",
+ "options": "Stock Entry",
+ "print_hide": 1,
+ "read_only": 1
+ },
+ {
+ "fieldname": "credit_note",
+ "fieldtype": "Link",
+ "hidden": 1,
+ "label": "Credit Note",
+ "options": "Journal Entry"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "accounting_dimensions_section",
+ "fieldtype": "Section Break",
+ "label": "Accounting Dimensions"
+ },
+ {
+ "fieldname": "dimension_col_break",
+ "fieldtype": "Column Break"
+ }
+ ],
+ "icon": "fa fa-file-text",
+ "idx": 1,
+ "is_submittable": 1,
+ "modified": "2019-07-14 17:41:39.257508",
+ "modified_by": "Administrator",
+ "module": "Stock",
+ "name": "Stock Entry",
+ "owner": "Administrator",
+ "permissions": [
+ {
+ "amend": 1,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Stock User",
+ "share": 1,
+ "submit": 1,
+ "write": 1
+ },
+ {
+ "amend": 1,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Manufacturing User",
+ "share": 1,
+ "submit": 1,
+ "write": 1
+ },
+ {
+ "amend": 1,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Manufacturing Manager",
+ "share": 1,
+ "submit": 1,
+ "write": 1
+ },
+ {
+ "amend": 1,
+ "cancel": 1,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "import": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Stock Manager",
+ "set_user_permissions": 1,
+ "share": 1,
+ "submit": 1,
+ "write": 1
+ }
+ ],
+ "search_fields": "posting_date, from_warehouse, to_warehouse, purpose, remarks",
+ "show_name_in_global_search": 1,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "title_field": "title",
+ "track_changes": 1
+}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.json b/erpnext/stock/doctype/stock_settings/stock_settings.json
index c989907..f43390f 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.json
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.json
@@ -255,7 +255,7 @@
"columns": 0,
"description": "Percentage you are allowed to receive or deliver more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to receive 110 units.",
"fetch_if_empty": 0,
- "fieldname": "tolerance",
+ "fieldname": "over_delivery_receipt_allowance",
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -264,7 +264,7 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Limit Percent",
+ "label": "Over Delivery/Receipt Allowance (%)",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -918,7 +918,7 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2019-06-18 01:19:07.738045",
+ "modified": "2019-07-04 01:19:07.738045",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Settings",
diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py
index 4d07a0e..d68f979 100644
--- a/erpnext/stock/stock_balance.py
+++ b/erpnext/stock/stock_balance.py
@@ -110,7 +110,7 @@
return flt(reserved_qty[0][0]) if reserved_qty else 0
def get_indented_qty(item_code, warehouse):
- indented_qty = frappe.db.sql("""select sum(mr_item.qty - mr_item.ordered_qty)
+ indented_qty = frappe.db.sql("""select sum((mr_item.qty - mr_item.ordered_qty) * mr_item.conversion_factor)
from `tabMaterial Request Item` mr_item, `tabMaterial Request` mr
where mr_item.item_code=%s and mr_item.warehouse=%s
and mr_item.qty > mr_item.ordered_qty and mr_item.parent=mr.name
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index ce9fb12..98d8c99 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -270,7 +270,8 @@
allotted_days -= 1
expected_time_is_set = allotted_days <= 0
- current_date_time = add_to_date(current_date_time, days=1)
+ if not expected_time_is_set:
+ current_date_time = add_to_date(current_date_time, days=1)
if end_time and time_period != 'Hour':
current_date_time = datetime.combine(getdate(current_date_time), get_time(end_time))
diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index af98fc7..65949bb 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -29,10 +29,10 @@
.html(r.message.product_info.price.formatted_price_sales_uom + "<div style='font-size: small'>\
(" + r.message.product_info.price.formatted_price + " / " + r.message.product_info.uom + ")</div>");
- if(r.message.product_info.in_stock==0) {
+ if(r.message.product_info.in_stock===0) {
$(".item-stock").html("<div style='color: red'> <i class='fa fa-close'></i> {{ _("Not in stock") }}</div>");
}
- else if(r.message.product_info.in_stock==1) {
+ else if(r.message.product_info.in_stock===1) {
var qty_display = "{{ _("In stock") }}";
if (r.message.product_info.show_stock_qty) {
qty_display += " ("+r.message.product_info.stock_qty+")";
@@ -75,13 +75,13 @@
newVal = 0;
if (btn.attr('data-dir') == 'up') {
- newVal = parseInt(oldValue) + 1;
+ newVal = Number.parseInt(oldValue) + 1;
} else if (btn.attr('data-dir') == 'dwn') {
- if (parseInt(oldValue) > 1) {
- newVal = parseInt(oldValue) - 1;
+ if (Number.parseInt(oldValue) > 1) {
+ newVal = Number.parseInt(oldValue) - 1;
}
else {
- newVal = parseInt(oldValue);
+ newVal = Number.parseInt(oldValue);
}
}
input.val(newVal);
diff --git a/erpnext/templates/pages/projects.py b/erpnext/templates/pages/projects.py
index ddca274..d23fed9 100644
--- a/erpnext/templates/pages/projects.py
+++ b/erpnext/templates/pages/projects.py
@@ -7,22 +7,22 @@
def get_context(context):
project_user = frappe.db.get_value("Project User", {"parent": frappe.form_dict.project, "user": frappe.session.user} , ["user", "view_attachments"], as_dict= True)
- if not project_user or frappe.session.user == 'Guest':
+ if frappe.session.user != 'Administrator' and (not project_user or frappe.session.user == 'Guest'):
raise frappe.PermissionError
-
+
context.no_cache = 1
context.show_sidebar = True
project = frappe.get_doc('Project', frappe.form_dict.project)
project.has_permission('read')
-
+
project.tasks = get_tasks(project.name, start=0, item_status='open',
search=frappe.form_dict.get("search"))
project.timesheets = get_timesheets(project.name, start=0,
search=frappe.form_dict.get("search"))
- if project_user.view_attachments:
+ if project_user and project_user.view_attachments:
project.attachments = get_attachments(project.name)
context.doc = project
@@ -46,7 +46,7 @@
task.todo=task.todo[0]
task.todo.user_image = frappe.db.get_value('User', task.todo.owner, 'user_image')
-
+
task.comment_count = len(json.loads(task._comments or "[]"))
task.css_seen = ''
@@ -86,7 +86,7 @@
timesheet.info.css_seen = ''
if timesheet.info._seen:
if frappe.session.user in json.loads(timesheet.info._seen):
- timesheet.info.css_seen = 'seen'
+ timesheet.info.css_seen = 'seen'
return timesheets
@frappe.whitelist()
diff --git a/erpnext/www/lms/macros/__init__.py b/erpnext/www/lms/macros/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/www/lms/macros/__init__.py