Merge pull request #40299 from ruthra-kumar/rewrite_fetch_query_on_bank_reconciliation_tool
refactor: run qb directly instead of converting to sql
diff --git a/.editorconfig b/.editorconfig
index 24f122a..e7d5cfe 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -9,6 +9,13 @@
charset = utf-8
# python, js indentation settings
-[{*.py,*.js}]
+[{*.py,*.js,*.vue,*.css,*.scss,*.html}]
indent_style = tab
indent_size = 4
+max_line_length = 110
+
+# JSON files - mostly doctype schema files
+[{*.json}]
+insert_final_newline = false
+indent_style = space
+indent_size = 2
diff --git a/.eslintrc b/.eslintrc
index f3d4fd5..1f22552 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -124,6 +124,7 @@
"beforeEach": true,
"onScan": true,
"extend_cscript": true,
- "localforage": true
+ "localforage": true,
+ "Plaid": true
}
}
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index 275442a..2a85f70 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -32,3 +32,6 @@
# bulk refactor with sourcery
eb9ee3f79b94e594fc6dfa4f6514580e125eee8c
+
+# js formatting
+ec74a5e56617bbd76ac402451468fd4668af543d
diff --git a/.github/helper/update_pot_file.sh b/.github/helper/update_pot_file.sh
new file mode 100644
index 0000000..80fa348
--- /dev/null
+++ b/.github/helper/update_pot_file.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+set -e
+cd ~ || exit
+
+echo "Setting Up Bench..."
+
+pip install frappe-bench
+bench -v init frappe-bench --skip-assets --skip-redis-config-generation --python "$(which python)"
+cd ./frappe-bench || exit
+
+echo "Get ERPNext..."
+bench get-app --skip-assets erpnext "${GITHUB_WORKSPACE}"
+
+echo "Generating POT file..."
+bench generate-pot-file --app erpnext
+
+cd ./apps/erpnext || exit
+
+echo "Configuring git user..."
+git config user.email "developers@erpnext.com"
+git config user.name "frappe-pr-bot"
+
+echo "Setting the correct git remote..."
+# Here, the git remote is a local file path by default. Let's change it to the upstream repo.
+git remote set-url upstream https://github.com/frappe/erpnext.git
+
+echo "Creating a new branch..."
+isodate=$(date -u +"%Y-%m-%d")
+branch_name="pot_${BASE_BRANCH}_${isodate}"
+git checkout -b "${branch_name}"
+
+echo "Commiting changes..."
+git add .
+git commit -m "chore: update POT file"
+
+gh auth setup-git
+git push -u upstream "${branch_name}"
+
+echo "Creating a PR..."
+gh pr create --fill --base "${BASE_BRANCH}" --head "${branch_name}" -R frappe/erpnext
diff --git a/.github/workflows/generate-pot-file.yml b/.github/workflows/generate-pot-file.yml
new file mode 100644
index 0000000..a4e7e3f
--- /dev/null
+++ b/.github/workflows/generate-pot-file.yml
@@ -0,0 +1,38 @@
+# This workflow is agnostic to branches. Only maintain on develop branch.
+# To add/remove branches just modify the matrix.
+
+name: Regenerate POT file (translatable strings)
+on:
+ schedule:
+ # 9:30 UTC => 3 PM IST Sunday
+ - cron: "30 9 * * 0"
+ workflow_dispatch:
+
+jobs:
+ regeneratee-pot-file:
+ name: Release
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ branch: ["develop"]
+ permissions:
+ contents: write
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ matrix.branch }}
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.12"
+
+ - name: Run script to update POT file
+ run: |
+ bash ${GITHUB_WORKSPACE}/.github/helper/update_pot_file.sh
+ env:
+ GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
+ BASE_BRANCH: ${{ matrix.branch }}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6ea121f..1f11581 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -20,6 +20,23 @@
- id: check-yaml
- id: debug-statements
+ - repo: https://github.com/pre-commit/mirrors-prettier
+ rev: v2.7.1
+ hooks:
+ - id: prettier
+ types_or: [javascript, vue, scss]
+ # Ignore any files that might contain jinja / bundles
+ exclude: |
+ (?x)^(
+ erpnext/public/dist/.*|
+ cypress/.*|
+ .*node_modules.*|
+ .*boilerplate.*|
+ erpnext/public/js/controllers/.*|
+ erpnext/templates/pages/order.js|
+ erpnext/templates/includes/.*
+ )$
+
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v8.44.0
hooks:
diff --git a/commitlint.config.js b/commitlint.config.js
index 8847564..5670209 100644
--- a/commitlint.config.js
+++ b/commitlint.config.js
@@ -1,25 +1,13 @@
module.exports = {
- parserPreset: 'conventional-changelog-conventionalcommits',
+ parserPreset: "conventional-changelog-conventionalcommits",
rules: {
- 'subject-empty': [2, 'never'],
- 'type-case': [2, 'always', 'lower-case'],
- 'type-empty': [2, 'never'],
- 'type-enum': [
+ "subject-empty": [2, "never"],
+ "type-case": [2, "always", "lower-case"],
+ "type-empty": [2, "never"],
+ "type-enum": [
2,
- 'always',
- [
- 'build',
- 'chore',
- 'ci',
- 'docs',
- 'feat',
- 'fix',
- 'perf',
- 'refactor',
- 'revert',
- 'style',
- 'test',
- ],
+ "always",
+ ["build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test"],
],
},
};
diff --git a/crowdin.yml b/crowdin.yml
index 7baf064..84ece8d 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -1,3 +1,4 @@
files:
- source: /erpnext/locale/main.pot
translation: /erpnext/locale/%two_letters_code%.po
+pull_request_title: "chore: sync translations from crowdin"
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 48ebe92..1c1c10c 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -13,7 +13,7 @@
if not user:
user = frappe.session.user
- companies = get_user_default_as_list(user, "company")
+ companies = get_user_default_as_list("company", user)
if companies:
default_company = companies[0]
else:
diff --git a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js
index d8a83e5..0984611 100644
--- a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js
+++ b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js
@@ -1,4 +1,4 @@
-frappe.provide('frappe.dashboards.chart_sources');
+frappe.provide("frappe.dashboards.chart_sources");
frappe.dashboards.chart_sources["Account Balance Timeline"] = {
method: "erpnext.accounts.dashboard_chart_source.account_balance_timeline.account_balance_timeline.get",
@@ -9,14 +9,14 @@
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
- reqd: 1
+ reqd: 1,
},
{
fieldname: "account",
label: __("Account"),
fieldtype: "Link",
options: "Account",
- reqd: 1
+ reqd: 1,
},
- ]
+ ],
};
diff --git a/erpnext/accounts/doctype/account/account.js b/erpnext/accounts/doctype/account/account.js
index bcf7efc..411b90f 100644
--- a/erpnext/accounts/doctype/account/account.js
+++ b/erpnext/accounts/doctype/account/account.js
@@ -26,19 +26,14 @@
frm.toggle_enable(["is_group", "company"], false);
if (cint(frm.doc.is_group) == 0) {
- frm.toggle_display(
- "freeze_account",
- frm.doc.__onload && frm.doc.__onload.can_freeze_account
- );
+ frm.toggle_display("freeze_account", frm.doc.__onload && frm.doc.__onload.can_freeze_account);
}
// read-only for root accounts
if (!frm.is_new()) {
if (!frm.doc.parent_account) {
frm.set_read_only();
- frm.set_intro(
- __("This is a root account and cannot be edited.")
- );
+ frm.set_intro(__("This is a root account and cannot be edited."));
} else {
// credit days and type if customer or supplier
frm.set_intro(null);
@@ -80,27 +75,33 @@
);
if (frm.doc.is_group == 1) {
- frm.add_custom_button(__('Convert to Non-Group'), function () {
- return frappe.call({
- doc: frm.doc,
- method: 'convert_group_to_ledger',
- callback: function() {
- frm.refresh();
- }
- });
- }, __('Actions'));
-
- } else if (cint(frm.doc.is_group) == 0
- && frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
- frm.add_custom_button(__('General Ledger'), function () {
- frappe.route_options = {
- "account": frm.doc.name,
- "from_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- "to_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- "company": frm.doc.company
- };
- frappe.set_route("query-report", "General Ledger");
- }, __('View'));
+ frm.add_custom_button(
+ __("Convert to Non-Group"),
+ function () {
+ return frappe.call({
+ doc: frm.doc,
+ method: "convert_group_to_ledger",
+ callback: function () {
+ frm.refresh();
+ },
+ });
+ },
+ __("Actions")
+ );
+ } else if (cint(frm.doc.is_group) == 0 && frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
+ frm.add_custom_button(
+ __("General Ledger"),
+ function () {
+ frappe.route_options = {
+ account: frm.doc.name,
+ from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ company: frm.doc.company,
+ };
+ frappe.set_route("query-report", "General Ledger");
+ },
+ __("View")
+ );
frm.add_custom_button(
__("Convert to Group"),
@@ -193,14 +194,8 @@
if (r.message) {
frappe.set_route("Form", "Account", r.message);
} else {
- frm.set_value(
- "account_number",
- data.account_number
- );
- frm.set_value(
- "account_name",
- data.account_name
- );
+ frm.set_value("account_number", data.account_number);
+ frm.set_value("account_name", data.account_name);
}
d.hide();
}
diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js
index 0b29769..93de49d 100644
--- a/erpnext/accounts/doctype/account/account_tree.js
+++ b/erpnext/accounts/doctype/account/account_tree.js
@@ -1,4 +1,4 @@
-frappe.provide("frappe.treeview_settings")
+frappe.provide("frappe.treeview_settings");
frappe.treeview_settings["Account"] = {
breadcrumb: "Accounts",
@@ -7,12 +7,12 @@
filters: [
{
fieldname: "company",
- fieldtype:"Select",
+ fieldtype: "Select",
options: erpnext.utils.get_tree_options("company"),
label: __("Company"),
default: erpnext.utils.get_tree_default("company"),
- on_change: function() {
- var me = frappe.treeview_settings['Account'].treeview;
+ on_change: function () {
+ var me = frappe.treeview_settings["Account"].treeview;
var company = me.page.fields_dict.company.get_value();
if (!company) {
frappe.throw(__("Please set a Company"));
@@ -22,30 +22,36 @@
args: {
company: company,
},
- callback: function(r) {
- if(r.message) {
+ callback: function (r) {
+ if (r.message) {
let root_company = r.message.length ? r.message[0] : "";
me.page.fields_dict.root_company.set_value(root_company);
- frappe.db.get_value("Company", {"name": company}, "allow_account_creation_against_child_company", (r) => {
- frappe.flags.ignore_root_company_validation = r.allow_account_creation_against_child_company;
- });
+ frappe.db.get_value(
+ "Company",
+ { name: company },
+ "allow_account_creation_against_child_company",
+ (r) => {
+ frappe.flags.ignore_root_company_validation =
+ r.allow_account_creation_against_child_company;
+ }
+ );
}
- }
+ },
});
- }
+ },
},
{
fieldname: "root_company",
- fieldtype:"Data",
+ fieldtype: "Data",
label: __("Root Company"),
hidden: true,
- disable_onchange: true
- }
+ disable_onchange: true,
+ },
],
root_label: "Accounts",
- get_tree_nodes: 'erpnext.accounts.utils.get_children',
- on_get_node: function(nodes, deep=false) {
+ get_tree_nodes: "erpnext.accounts.utils.get_children",
+ on_get_node: function (nodes, deep = false) {
if (frappe.boot.user.can_read.indexOf("GL Entry") == -1) return;
let accounts = [];
@@ -57,151 +63,231 @@
}
frappe.db.get_single_value("Accounts Settings", "show_balance_in_coa").then((value) => {
- if(value) {
-
+ if (value) {
const get_balances = frappe.call({
- method: 'erpnext.accounts.utils.get_account_balances',
+ method: "erpnext.accounts.utils.get_account_balances",
args: {
accounts: accounts,
- company: cur_tree.args.company
+ company: cur_tree.args.company,
},
});
- get_balances.then(r => {
+ get_balances.then((r) => {
if (!r.message || r.message.length == 0) return;
for (let account of r.message) {
-
const node = cur_tree.nodes && cur_tree.nodes[account.value];
if (!node || node.is_root) continue;
// show Dr if positive since balance is calculated as debit - credit else show Cr
const balance = account.balance_in_account_currency || account.balance;
- const dr_or_cr = balance > 0 ? __("Dr"): __("Cr");
+ const dr_or_cr = balance > 0 ? __("Dr") : __("Cr");
const format = (value, currency) => format_currency(Math.abs(value), currency);
- if (account.balance!==undefined) {
- node.parent && node.parent.find('.balance-area').remove();
- $('<span class="balance-area pull-right">'
- + (account.balance_in_account_currency ?
- (format(account.balance_in_account_currency, account.account_currency) + " / ") : "")
- + format(account.balance, account.company_currency)
- + " " + dr_or_cr
- + '</span>').insertBefore(node.$ul);
+ if (account.balance !== undefined) {
+ node.parent && node.parent.find(".balance-area").remove();
+ $(
+ '<span class="balance-area pull-right">' +
+ (account.balance_in_account_currency
+ ? format(
+ account.balance_in_account_currency,
+ account.account_currency
+ ) + " / "
+ : "") +
+ format(account.balance, account.company_currency) +
+ " " +
+ dr_or_cr +
+ "</span>"
+ ).insertBefore(node.$ul);
}
}
});
}
});
},
- add_tree_node: 'erpnext.accounts.utils.add_ac',
- menu_items:[
+ add_tree_node: "erpnext.accounts.utils.add_ac",
+ menu_items: [
{
- label: __('New Company'),
- action: function() { frappe.new_doc("Company", true) },
- condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1'
- }
+ label: __("New Company"),
+ action: function () {
+ frappe.new_doc("Company", true);
+ },
+ condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1',
+ },
],
fields: [
- {fieldtype:'Data', fieldname:'account_name', label:__('New Account Name'), reqd:true,
- description: __("Name of new Account. Note: Please don't create accounts for Customers and Suppliers")},
- {fieldtype:'Data', fieldname:'account_number', label:__('Account Number'),
- description: __("Number of new Account, it will be included in the account name as a prefix")},
- {fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
- description: __('Further accounts can be made under Groups, but entries can be made against non-Groups')},
- {fieldtype:'Select', fieldname:'root_type', label:__('Root Type'),
- options: ['Asset', 'Liability', 'Equity', 'Income', 'Expense'].join('\n'),
- depends_on: 'eval:doc.is_group && !doc.parent_account'},
- {fieldtype:'Select', fieldname:'account_type', label:__('Account Type'),
- options: frappe.get_meta("Account").fields.filter(d => d.fieldname=='account_type')[0].options,
- description: __("Optional. This setting will be used to filter in various transactions.")
+ {
+ fieldtype: "Data",
+ fieldname: "account_name",
+ label: __("New Account Name"),
+ reqd: true,
+ description: __(
+ "Name of new Account. Note: Please don't create accounts for Customers and Suppliers"
+ ),
},
- {fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate'),
- depends_on: 'eval:doc.is_group==0&&doc.account_type=="Tax"'},
- {fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
- description: __("Optional. Sets company's default currency, if not specified.")}
+ {
+ fieldtype: "Data",
+ fieldname: "account_number",
+ label: __("Account Number"),
+ description: __("Number of new Account, it will be included in the account name as a prefix"),
+ },
+ {
+ fieldtype: "Check",
+ fieldname: "is_group",
+ label: __("Is Group"),
+ description: __(
+ "Further accounts can be made under Groups, but entries can be made against non-Groups"
+ ),
+ },
+ {
+ fieldtype: "Select",
+ fieldname: "root_type",
+ label: __("Root Type"),
+ options: ["Asset", "Liability", "Equity", "Income", "Expense"].join("\n"),
+ depends_on: "eval:doc.is_group && !doc.parent_account",
+ },
+ {
+ fieldtype: "Select",
+ fieldname: "account_type",
+ label: __("Account Type"),
+ options: frappe.get_meta("Account").fields.filter((d) => d.fieldname == "account_type")[0]
+ .options,
+ description: __("Optional. This setting will be used to filter in various transactions."),
+ },
+ {
+ fieldtype: "Float",
+ fieldname: "tax_rate",
+ label: __("Tax Rate"),
+ depends_on: 'eval:doc.is_group==0&&doc.account_type=="Tax"',
+ },
+ {
+ fieldtype: "Link",
+ fieldname: "account_currency",
+ label: __("Currency"),
+ options: "Currency",
+ description: __("Optional. Sets company's default currency, if not specified."),
+ },
],
- ignore_fields:["parent_account"],
- onload: function(treeview) {
- frappe.treeview_settings['Account'].treeview = {};
- $.extend(frappe.treeview_settings['Account'].treeview, treeview);
+ ignore_fields: ["parent_account"],
+ onload: function (treeview) {
+ frappe.treeview_settings["Account"].treeview = {};
+ $.extend(frappe.treeview_settings["Account"].treeview, treeview);
function get_company() {
return treeview.page.fields_dict.company.get_value();
}
// tools
- treeview.page.add_inner_button(__("Chart of Cost Centers"), function() {
- frappe.set_route('Tree', 'Cost Center', {company: get_company()});
- }, __('View'));
+ treeview.page.add_inner_button(
+ __("Chart of Cost Centers"),
+ function () {
+ frappe.set_route("Tree", "Cost Center", { company: get_company() });
+ },
+ __("View")
+ );
- treeview.page.add_inner_button(__("Opening Invoice Creation Tool"), function() {
- frappe.set_route('Form', 'Opening Invoice Creation Tool', {company: get_company()});
- }, __('View'));
+ treeview.page.add_inner_button(
+ __("Opening Invoice Creation Tool"),
+ function () {
+ frappe.set_route("Form", "Opening Invoice Creation Tool", { company: get_company() });
+ },
+ __("View")
+ );
- treeview.page.add_inner_button(__("Period Closing Voucher"), function() {
- frappe.set_route('List', 'Period Closing Voucher', {company: get_company()});
- }, __('View'));
+ treeview.page.add_inner_button(
+ __("Period Closing Voucher"),
+ function () {
+ frappe.set_route("List", "Period Closing Voucher", { company: get_company() });
+ },
+ __("View")
+ );
-
- treeview.page.add_inner_button(__("Journal Entry"), function() {
- frappe.new_doc('Journal Entry', {company: get_company()});
- }, __('Create'));
- treeview.page.add_inner_button(__("Company"), function() {
- frappe.new_doc('Company');
- }, __('Create'));
+ treeview.page.add_inner_button(
+ __("Journal Entry"),
+ function () {
+ frappe.new_doc("Journal Entry", { company: get_company() });
+ },
+ __("Create")
+ );
+ treeview.page.add_inner_button(
+ __("Company"),
+ function () {
+ frappe.new_doc("Company");
+ },
+ __("Create")
+ );
// financial statements
- for (let report of ['Trial Balance', 'General Ledger', 'Balance Sheet',
- 'Profit and Loss Statement', 'Cash Flow Statement', 'Accounts Payable', 'Accounts Receivable']) {
- treeview.page.add_inner_button(__(report), function() {
- frappe.set_route('query-report', report, {company: get_company()});
- }, __('Financial Statements'));
+ for (let report of [
+ "Trial Balance",
+ "General Ledger",
+ "Balance Sheet",
+ "Profit and Loss Statement",
+ "Cash Flow Statement",
+ "Accounts Payable",
+ "Accounts Receivable",
+ ]) {
+ treeview.page.add_inner_button(
+ __(report),
+ function () {
+ frappe.set_route("query-report", report, { company: get_company() });
+ },
+ __("Financial Statements")
+ );
}
-
},
- post_render: function(treeview) {
- frappe.treeview_settings['Account'].treeview["tree"] = treeview.tree;
- treeview.page.set_primary_action(__("New"), function() {
- let root_company = treeview.page.fields_dict.root_company.get_value();
+ post_render: function (treeview) {
+ frappe.treeview_settings["Account"].treeview["tree"] = treeview.tree;
+ treeview.page.set_primary_action(
+ __("New"),
+ function () {
+ let root_company = treeview.page.fields_dict.root_company.get_value();
- if(root_company) {
- frappe.throw(__("Please add the account to root level Company - {0}"), [root_company]);
- } else {
- treeview.new_node();
- }
- }, "add");
+ if (root_company) {
+ frappe.throw(__("Please add the account to root level Company - {0}"), [root_company]);
+ } else {
+ treeview.new_node();
+ }
+ },
+ "add"
+ );
},
toolbar: [
{
- label:__("Add Child"),
- condition: function(node) {
- return frappe.boot.user.can_create.indexOf("Account") !== -1
- && (!frappe.treeview_settings['Account'].treeview.page.fields_dict.root_company.get_value()
- || frappe.flags.ignore_root_company_validation)
- && node.expandable && !node.hide_add;
+ label: __("Add Child"),
+ condition: function (node) {
+ return (
+ frappe.boot.user.can_create.indexOf("Account") !== -1 &&
+ (!frappe.treeview_settings[
+ "Account"
+ ].treeview.page.fields_dict.root_company.get_value() ||
+ frappe.flags.ignore_root_company_validation) &&
+ node.expandable &&
+ !node.hide_add
+ );
},
- click: function() {
- var me = frappe.views.trees['Account'];
+ click: function () {
+ var me = frappe.views.trees["Account"];
me.new_node();
},
- btnClass: "hidden-xs"
+ btnClass: "hidden-xs",
},
{
- condition: function(node) {
- return !node.root && frappe.boot.user.can_read.indexOf("GL Entry") !== -1
+ condition: function (node) {
+ return !node.root && frappe.boot.user.can_read.indexOf("GL Entry") !== -1;
},
label: __("View Ledger"),
- click: function(node, btn) {
+ click: function (node, btn) {
frappe.route_options = {
- "account": node.label,
- "from_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- "to_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- "company": frappe.treeview_settings['Account'].treeview.page.fields_dict.company.get_value()
+ account: node.label,
+ from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ company:
+ frappe.treeview_settings["Account"].treeview.page.fields_dict.company.get_value(),
};
frappe.set_route("query-report", "General Ledger");
},
- btnClass: "hidden-xs"
- }
+ btnClass: "hidden-xs",
+ },
],
- extend_toolbar: true
-}
+ extend_toolbar: true,
+};
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
index 2f53f7b..cd883e5 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
@@ -1,74 +1,86 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Accounting Dimension', {
- refresh: function(frm) {
- frm.set_query('document_type', () => {
+frappe.ui.form.on("Accounting Dimension", {
+ refresh: function (frm) {
+ frm.set_query("document_type", () => {
let invalid_doctypes = frappe.model.core_doctypes_list;
- invalid_doctypes.push('Accounting Dimension', 'Project',
- 'Cost Center', 'Accounting Dimension Detail', 'Company');
+ invalid_doctypes.push(
+ "Accounting Dimension",
+ "Project",
+ "Cost Center",
+ "Accounting Dimension Detail",
+ "Company"
+ );
return {
filters: {
- name: ['not in', invalid_doctypes]
- }
+ name: ["not in", invalid_doctypes],
+ },
};
});
- frm.set_query("offsetting_account", "dimension_defaults", function(doc, cdt, cdn) {
+ frm.set_query("offsetting_account", "dimension_defaults", function (doc, cdt, cdn) {
let d = locals[cdt][cdn];
return {
filters: {
company: d.company,
root_type: ["in", ["Asset", "Liability"]],
- is_group: 0
- }
- }
+ is_group: 0,
+ },
+ };
});
if (!frm.is_new()) {
- frm.add_custom_button(__('Show {0}', [frm.doc.document_type]), function () {
+ frm.add_custom_button(__("Show {0}", [frm.doc.document_type]), function () {
frappe.set_route("List", frm.doc.document_type);
});
let button = frm.doc.disabled ? "Enable" : "Disable";
- frm.add_custom_button(__(button), function() {
-
- frm.set_value('disabled', 1 - frm.doc.disabled);
+ frm.add_custom_button(__(button), function () {
+ frm.set_value("disabled", 1 - frm.doc.disabled);
frappe.call({
method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.disable_dimension",
args: {
- doc: frm.doc
+ doc: frm.doc,
},
freeze: true,
- callback: function(r) {
+ callback: function (r) {
let message = frm.doc.disabled ? "Dimension Disabled" : "Dimension Enabled";
frm.save();
- frappe.show_alert({message:__(message), indicator:'green'});
- }
+ frappe.show_alert({ message: __(message), indicator: "green" });
+ },
});
});
}
},
- document_type: function(frm) {
+ document_type: function (frm) {
+ frm.set_value("label", frm.doc.document_type);
+ frm.set_value("fieldname", frappe.model.scrub(frm.doc.document_type));
- frm.set_value('label', 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 && r.document_type) {
- frm.set_df_property('document_type', 'description', "Document type is already set as dimension");
+ frappe.db.get_value(
+ "Accounting Dimension",
+ { document_type: frm.doc.document_type },
+ "document_type",
+ (r) => {
+ if (r && r.document_type) {
+ frm.set_df_property(
+ "document_type",
+ "description",
+ "Document type is already set as dimension"
+ );
+ }
}
- });
+ );
},
});
-frappe.ui.form.on('Accounting Dimension Detail', {
- dimension_defaults_add: function(frm, cdt, cdn) {
+frappe.ui.form.on("Accounting Dimension Detail", {
+ dimension_defaults_add: function (frm, cdt, cdn) {
let row = locals[cdt][cdn];
row.reference_document = frm.doc.document_type;
- }
+ },
});
diff --git a/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js b/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js
index 6f0b6fc..38ad131 100644
--- a/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js
+++ b/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js
@@ -1,10 +1,9 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Accounting Dimension Filter', {
- refresh: function(frm, cdt, cdn) {
- let help_content =
- `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
+frappe.ui.form.on("Accounting Dimension Filter", {
+ refresh: function (frm, cdt, cdn) {
+ let help_content = `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
<tr><td>
<p>
<i class="fa fa-hand-right"></i>
@@ -13,77 +12,80 @@
</td></tr>
</table>`;
- frm.set_df_property('dimension_filter_help', 'options', help_content);
+ frm.set_df_property("dimension_filter_help", "options", help_content);
},
- onload: function(frm) {
- frm.set_query('applicable_on_account', 'accounts', function() {
+ onload: function (frm) {
+ frm.set_query("applicable_on_account", "accounts", function () {
return {
filters: {
- 'company': frm.doc.company
- }
+ company: frm.doc.company,
+ },
};
});
- frappe.db.get_list('Accounting Dimension',
- {fields: ['document_type']}).then((res) => {
- let options = ['Cost Center', 'Project'];
+ frappe.db.get_list("Accounting Dimension", { fields: ["document_type"] }).then((res) => {
+ let options = ["Cost Center", "Project"];
res.forEach((dimension) => {
options.push(dimension.document_type);
});
- frm.set_df_property('accounting_dimension', 'options', options);
+ frm.set_df_property("accounting_dimension", "options", options);
});
- frm.trigger('setup_filters');
+ frm.trigger("setup_filters");
},
- setup_filters: function(frm) {
+ setup_filters: function (frm) {
let filters = {};
if (frm.doc.accounting_dimension) {
- frappe.model.with_doctype(frm.doc.accounting_dimension, function() {
+ frappe.model.with_doctype(frm.doc.accounting_dimension, function () {
if (frappe.model.is_tree(frm.doc.accounting_dimension)) {
- filters['is_group'] = 0;
+ filters["is_group"] = 0;
}
- if (frappe.meta.has_field(frm.doc.accounting_dimension, 'company')) {
- filters['company'] = frm.doc.company;
+ if (frappe.meta.has_field(frm.doc.accounting_dimension, "company")) {
+ filters["company"] = frm.doc.company;
}
- frm.set_query('dimension_value', 'dimensions', function() {
+ frm.set_query("dimension_value", "dimensions", function () {
return {
- filters: filters
+ filters: filters,
};
});
});
}
},
- accounting_dimension: function(frm) {
+ accounting_dimension: function (frm) {
frm.clear_table("dimensions");
let row = frm.add_child("dimensions");
row.accounting_dimension = frm.doc.accounting_dimension;
- frm.fields_dict["dimensions"].grid.update_docfield_property("dimension_value", "label", frm.doc.accounting_dimension);
+ frm.fields_dict["dimensions"].grid.update_docfield_property(
+ "dimension_value",
+ "label",
+ frm.doc.accounting_dimension
+ );
frm.refresh_field("dimensions");
- frm.trigger('setup_filters');
+ frm.trigger("setup_filters");
},
- apply_restriction_on_values: function(frm) {
+ apply_restriction_on_values: function (frm) {
/** If restriction on values is not applied, we should set "allow_or_restrict" to "Restrict" with an empty allowed dimension table.
* Hence it's not "restricted" on any value.
- */
+ */
if (!frm.doc.apply_restriction_on_values) {
frm.set_value("allow_or_restrict", "Restrict");
frm.clear_table("dimensions");
frm.refresh_field("dimensions");
}
- }
+ },
});
-frappe.ui.form.on('Allowed Dimension', {
- dimensions_add: function(frm, cdt, cdn) {
+frappe.ui.form.on("Allowed Dimension", {
+ dimensions_add: function (frm, cdt, cdn) {
let row = locals[cdt][cdn];
row.accounting_dimension = frm.doc.accounting_dimension;
frm.refresh_field("dimensions");
- }
+ },
});
diff --git a/erpnext/accounts/doctype/accounting_period/accounting_period.js b/erpnext/accounts/doctype/accounting_period/accounting_period.js
index f17b6f9..441471f 100644
--- a/erpnext/accounts/doctype/accounting_period/accounting_period.js
+++ b/erpnext/accounts/doctype/accounting_period/accounting_period.js
@@ -1,30 +1,33 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Accounting Period', {
- onload: function(frm) {
- if(frm.doc.closed_documents.length === 0 || (frm.doc.closed_documents.length === 1 && frm.doc.closed_documents[0].document_type == undefined)) {
+frappe.ui.form.on("Accounting Period", {
+ onload: function (frm) {
+ if (
+ frm.doc.closed_documents.length === 0 ||
+ (frm.doc.closed_documents.length === 1 && frm.doc.closed_documents[0].document_type == undefined)
+ ) {
frappe.call({
method: "get_doctypes_for_closing",
- doc:frm.doc,
- callback: function(r) {
- if(r.message) {
+ doc: frm.doc,
+ callback: function (r) {
+ if (r.message) {
cur_frm.clear_table("closed_documents");
- r.message.forEach(function(element) {
+ r.message.forEach(function (element) {
var c = frm.add_child("closed_documents");
c.document_type = element.document_type;
c.closed = element.closed;
});
refresh_field("closed_documents");
}
- }
+ },
});
}
frm.set_query("document_type", "closed_documents", () => {
return {
query: "erpnext.controllers.queries.get_doctypes_for_closing",
- }
+ };
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.js b/erpnext/accounts/doctype/accounts_settings/accounts_settings.js
index 0627675..5b9a52e 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.js
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.js
@@ -1,8 +1,6 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Accounts Settings', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Accounts Settings", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/accounts/doctype/accounts_settings/regional/united_states.js b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
index 3e38386..a522de9 100644
--- a/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
+++ b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
@@ -1,8 +1,11 @@
-
-frappe.ui.form.on('Accounts Settings', {
- refresh: function(frm) {
+frappe.ui.form.on("Accounts Settings", {
+ refresh: function (frm) {
frm.set_df_property("acc_frozen_upto", "label", "Books Closed Through");
- frm.set_df_property("frozen_accounts_modifier", "label", "Role Allowed to Close Books & Make Changes to Closed Periods");
+ frm.set_df_property(
+ "frozen_accounts_modifier",
+ "label",
+ "Role Allowed to Close Books & Make Changes to Closed Periods"
+ );
frm.set_df_property("credit_controller", "label", "Credit Manager");
- }
+ },
});
diff --git a/erpnext/accounts/doctype/bank/bank.js b/erpnext/accounts/doctype/bank/bank.js
index 83bd7fe..77af313 100644
--- a/erpnext/accounts/doctype/bank/bank.js
+++ b/erpnext/accounts/doctype/bank/bank.js
@@ -1,38 +1,36 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.provide('erpnext.integrations');
+frappe.provide("erpnext.integrations");
-frappe.ui.form.on('Bank', {
- onload: function(frm) {
+frappe.ui.form.on("Bank", {
+ onload: function (frm) {
add_fields_to_mapping_table(frm);
},
- refresh: function(frm) {
+ refresh: function (frm) {
add_fields_to_mapping_table(frm);
- frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal);
+ frm.toggle_display(["address_html", "contact_html"], !frm.doc.__islocal);
if (frm.doc.__islocal) {
- frm.set_df_property('address_and_contact', 'hidden', 1);
+ frm.set_df_property("address_and_contact", "hidden", 1);
frappe.contacts.clear_address_and_contact(frm);
- }
- else {
- frm.set_df_property('address_and_contact', 'hidden', 0);
+ } else {
+ frm.set_df_property("address_and_contact", "hidden", 0);
frappe.contacts.render_address_and_contact(frm);
}
if (frm.doc.plaid_access_token) {
- frm.add_custom_button(__('Refresh Plaid Link'), () => {
+ frm.add_custom_button(__("Refresh Plaid Link"), () => {
new erpnext.integrations.refreshPlaidLink(frm.doc.plaid_access_token);
});
}
- }
+ },
});
-
let add_fields_to_mapping_table = function (frm) {
let options = [];
- frappe.model.with_doctype("Bank Transaction", function() {
+ frappe.model.with_doctype("Bank Transaction", function () {
let meta = frappe.get_meta("Bank Transaction");
- meta.fields.forEach(value => {
+ meta.fields.forEach((value) => {
if (!["Section Break", "Column Break"].includes(value.fieldtype)) {
options.push(value.fieldname);
}
@@ -40,30 +38,32 @@
});
frm.fields_dict.bank_transaction_mapping.grid.update_docfield_property(
- 'bank_transaction_field', 'options', options
+ "bank_transaction_field",
+ "options",
+ options
);
};
erpnext.integrations.refreshPlaidLink = class refreshPlaidLink {
constructor(access_token) {
this.access_token = access_token;
- this.plaidUrl = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';
+ this.plaidUrl = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
this.init_config();
}
async init_config() {
- this.plaid_env = await frappe.db.get_single_value('Plaid Settings', 'plaid_env');
+ this.plaid_env = await frappe.db.get_single_value("Plaid Settings", "plaid_env");
this.token = await this.get_link_token_for_update();
this.init_plaid();
}
async get_link_token_for_update() {
const token = frappe.xcall(
- 'erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.get_link_token_for_update',
+ "erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.get_link_token_for_update",
{ access_token: this.access_token }
- )
+ );
if (!token) {
- frappe.throw(__('Cannot retrieve link token for update. Check Error Log for more information'));
+ frappe.throw(__("Cannot retrieve link token for update. Check Error Log for more information"));
}
return token;
}
@@ -90,35 +90,45 @@
resolve();
return;
}
- const el = document.createElement('script');
- el.type = 'text/javascript';
+ const el = document.createElement("script");
+ el.type = "text/javascript";
el.async = true;
el.src = src;
- el.addEventListener('load', resolve);
- el.addEventListener('error', reject);
- el.addEventListener('abort', reject);
+ el.addEventListener("load", resolve);
+ el.addEventListener("error", reject);
+ el.addEventListener("abort", reject);
document.head.appendChild(el);
});
}
onScriptLoaded(me) {
- me.linkHandler = Plaid.create({ // eslint-disable-line no-undef
+ me.linkHandler = Plaid.create({
+ // eslint-disable-line no-undef
env: me.plaid_env,
token: me.token,
- onSuccess: me.plaid_success
+ onSuccess: me.plaid_success,
});
}
onScriptError(error) {
- frappe.msgprint(__("There was an issue connecting to Plaid's authentication server. Check browser console for more information"));
+ frappe.msgprint(
+ __(
+ "There was an issue connecting to Plaid's authentication server. Check browser console for more information"
+ )
+ );
console.log(error);
}
plaid_success(token, response) {
- frappe.xcall('erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.update_bank_account_ids', {
- response: response,
- }).then(() => {
- frappe.show_alert({ message: __('Plaid Link Updated'), indicator: 'green' });
- });
+ frappe
+ .xcall(
+ "erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.update_bank_account_ids",
+ {
+ response: response,
+ }
+ )
+ .then(() => {
+ frappe.show_alert({ message: __("Plaid Link Updated"), indicator: "green" });
+ });
}
};
diff --git a/erpnext/accounts/doctype/bank_account/bank_account.js b/erpnext/accounts/doctype/bank_account/bank_account.js
index 0598190..202f750 100644
--- a/erpnext/accounts/doctype/bank_account/bank_account.js
+++ b/erpnext/accounts/doctype/bank_account/bank_account.js
@@ -1,45 +1,49 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Bank Account', {
- setup: function(frm) {
- frm.set_query("account", function() {
+frappe.ui.form.on("Bank Account", {
+ setup: function (frm) {
+ frm.set_query("account", function () {
return {
filters: {
- 'account_type': 'Bank',
- 'company': frm.doc.company,
- 'is_group': 0
- }
+ account_type: "Bank",
+ company: frm.doc.company,
+ is_group: 0,
+ },
};
});
- frm.set_query("party_type", function() {
+ frm.set_query("party_type", function () {
return {
query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
};
});
},
- refresh: function(frm) {
- frappe.dynamic_link = { doc: frm.doc, fieldname: 'name', doctype: 'Bank Account' }
+ refresh: function (frm) {
+ frappe.dynamic_link = { doc: frm.doc, fieldname: "name", doctype: "Bank Account" };
- frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal);
+ frm.toggle_display(["address_html", "contact_html"], !frm.doc.__islocal);
if (frm.doc.__islocal) {
frappe.contacts.clear_address_and_contact(frm);
- }
- else {
+ } else {
frappe.contacts.render_address_and_contact(frm);
}
if (frm.doc.integration_id) {
- frm.add_custom_button(__("Unlink external integrations"), function() {
- frappe.confirm(__("This action will unlink this account from any external service integrating ERPNext with your bank accounts. It cannot be undone. Are you certain ?"), function() {
- frm.set_value("integration_id", "");
- });
+ frm.add_custom_button(__("Unlink external integrations"), function () {
+ frappe.confirm(
+ __(
+ "This action will unlink this account from any external service integrating ERPNext with your bank accounts. It cannot be undone. Are you certain ?"
+ ),
+ function () {
+ frm.set_value("integration_id", "");
+ }
+ );
});
}
},
- is_company_account: function(frm) {
- frm.set_df_property('account', 'reqd', frm.doc.is_company_account);
- }
+ is_company_account: function (frm) {
+ frm.set_df_property("account", "reqd", frm.doc.is_company_account);
+ },
});
diff --git a/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js b/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js
index f045665..e8fe4e0 100644
--- a/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js
+++ b/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Bank Account Subtype', {
- refresh: function() {
-
- }
+frappe.ui.form.on("Bank Account Subtype", {
+ refresh: function () {},
});
diff --git a/erpnext/accounts/doctype/bank_account_type/bank_account_type.js b/erpnext/accounts/doctype/bank_account_type/bank_account_type.js
index 4cfabe3..1285fe4 100644
--- a/erpnext/accounts/doctype/bank_account_type/bank_account_type.js
+++ b/erpnext/accounts/doctype/bank_account_type/bank_account_type.js
@@ -1,8 +1,7 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Bank Account Type', {
+frappe.ui.form.on("Bank Account Type", {
// refresh: function(frm) {
-
// }
});
diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js
index 7af635b..2993825 100644
--- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js
+++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js
@@ -2,80 +2,76 @@
// License: GNU General Public License v3. See license.txt
frappe.ui.form.on("Bank Clearance", {
- setup: function(frm) {
+ setup: function (frm) {
frm.add_fetch("account", "account_currency", "account_currency");
- frm.set_query("account", function() {
+ frm.set_query("account", function () {
return {
- "filters": {
- "account_type": ["in",["Bank","Cash"]],
- "is_group": 0,
- }
+ filters: {
+ account_type: ["in", ["Bank", "Cash"]],
+ is_group: 0,
+ },
};
});
frm.set_query("bank_account", function () {
return {
filters: {
- 'is_company_account': 1
+ is_company_account: 1,
},
};
});
},
- onload: function(frm) {
-
- let default_bank_account = frappe.defaults.get_user_default("Company")?
- locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "";
+ onload: function (frm) {
+ let default_bank_account = frappe.defaults.get_user_default("Company")
+ ? locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]
+ : "";
frm.set_value("account", default_bank_account);
-
-
frm.set_value("from_date", frappe.datetime.month_start());
frm.set_value("to_date", frappe.datetime.month_end());
},
- refresh: function(frm) {
+ refresh: function (frm) {
frm.disable_save();
- frm.add_custom_button(__('Get Payment Entries'), () =>
- frm.trigger("get_payment_entries")
- );
+ frm.add_custom_button(__("Get Payment Entries"), () => frm.trigger("get_payment_entries"));
- frm.change_custom_button_type(__('Get Payment Entries'), null, 'primary');
+ frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
},
- update_clearance_date: function(frm) {
+ update_clearance_date: function (frm) {
return frappe.call({
method: "update_clearance_date",
doc: frm.doc,
- callback: function(r, rt) {
+ callback: function (r, rt) {
frm.refresh_field("payment_entries");
frm.refresh_fields();
if (!frm.doc.payment_entries.length) {
- frm.change_custom_button_type(__('Get Payment Entries'), null, 'primary');
- frm.change_custom_button_type(__('Update Clearance Date'), null, 'default');
+ frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
+ frm.change_custom_button_type(__("Update Clearance Date"), null, "default");
}
- }
+ },
});
},
- get_payment_entries: function(frm) {
+ get_payment_entries: function (frm) {
return frappe.call({
method: "get_payment_entries",
doc: frm.doc,
- callback: function(r, rt) {
+ callback: function (r, rt) {
frm.refresh_field("payment_entries");
if (frm.doc.payment_entries.length) {
- frm.add_custom_button(__('Update Clearance Date'), () =>
+ frm.add_custom_button(__("Update Clearance Date"), () =>
frm.trigger("update_clearance_date")
);
- frm.change_custom_button_type(__('Get Payment Entries'), null, 'default');
- frm.change_custom_button_type(__('Update Clearance Date'), null, 'primary');
+ frm.change_custom_button_type(__("Get Payment Entries"), null, "default");
+ frm.change_custom_button_type(__("Update Clearance Date"), null, "primary");
}
- }
+ },
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
index 99cc0a7..060c4b5 100644
--- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
+++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
@@ -1,39 +1,39 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-cur_frm.add_fetch('bank_account','account','account');
-cur_frm.add_fetch('bank_account','bank_account_no','bank_account_no');
-cur_frm.add_fetch('bank_account','iban','iban');
-cur_frm.add_fetch('bank_account','branch_code','branch_code');
-cur_frm.add_fetch('bank','swift_number','swift_number');
+cur_frm.add_fetch("bank_account", "account", "account");
+cur_frm.add_fetch("bank_account", "bank_account_no", "bank_account_no");
+cur_frm.add_fetch("bank_account", "iban", "iban");
+cur_frm.add_fetch("bank_account", "branch_code", "branch_code");
+cur_frm.add_fetch("bank", "swift_number", "swift_number");
-frappe.ui.form.on('Bank Guarantee', {
- setup: function(frm) {
- frm.set_query("bank", function() {
- return {
- filters: {
- company: frm.doc.company
- }
- };
- });
- frm.set_query("bank_account", function() {
+frappe.ui.form.on("Bank Guarantee", {
+ setup: function (frm) {
+ frm.set_query("bank", function () {
return {
filters: {
company: frm.doc.company,
- bank: frm.doc.bank
- }
- }
+ },
+ };
});
- frm.set_query("project", function() {
+ frm.set_query("bank_account", function () {
return {
filters: {
- customer: frm.doc.customer
- }
+ company: frm.doc.company,
+ bank: frm.doc.bank,
+ },
+ };
+ });
+ frm.set_query("project", function () {
+ return {
+ filters: {
+ customer: frm.doc.customer,
+ },
};
});
},
- bg_type: function(frm) {
+ bg_type: function (frm) {
if (frm.doc.bg_type == "Receiving") {
frm.set_value("reference_doctype", "Sales Order");
} else if (frm.doc.bg_type == "Providing") {
@@ -41,34 +41,33 @@
}
},
- reference_docname: function(frm) {
+ reference_docname: function (frm) {
if (frm.doc.reference_docname && frm.doc.reference_doctype) {
let party_field = frm.doc.reference_doctype == "Sales Order" ? "customer" : "supplier";
frappe.call({
method: "erpnext.accounts.doctype.bank_guarantee.bank_guarantee.get_voucher_details",
args: {
- "bank_guarantee_type": frm.doc.bg_type,
- "reference_name": frm.doc.reference_docname
+ bank_guarantee_type: frm.doc.bg_type,
+ reference_name: frm.doc.reference_docname,
},
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
if (r.message[party_field]) frm.set_value(party_field, r.message[party_field]);
if (r.message.project) frm.set_value("project", r.message.project);
if (r.message.grand_total) frm.set_value("amount", r.message.grand_total);
}
- }
+ },
});
-
}
},
- start_date: function(frm) {
+ start_date: function (frm) {
var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
cur_frm.set_value("end_date", end_date);
},
- validity: function(frm) {
+ validity: function (frm) {
var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
cur_frm.set_value("end_date", end_date);
- }
+ },
});
diff --git a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js
index 1f2d6ce..a1de91f 100644
--- a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js
+++ b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js
@@ -8,21 +8,22 @@
return {
filters: {
company: frm.doc.company,
- 'is_company_account': 1
+ is_company_account: 1,
},
};
});
- let no_bank_transactions_text =
- `<div class="text-muted text-center">${__("No Matching Bank Transactions Found")}</div>`
+ let no_bank_transactions_text = `<div class="text-muted text-center">${__(
+ "No Matching Bank Transactions Found"
+ )}</div>`;
set_field_options("no_bank_transactions", no_bank_transactions_text);
},
onload: function (frm) {
// Set default filter dates
- let today = frappe.datetime.get_today()
+ let today = frappe.datetime.get_today();
frm.doc.bank_statement_from_date = frappe.datetime.add_months(today, -1);
frm.doc.bank_statement_to_date = today;
- frm.trigger('bank_account');
+ frm.trigger("bank_account");
},
filter_by_reference_date: function (frm) {
@@ -37,34 +38,27 @@
refresh: function (frm) {
frm.disable_save();
- frappe.require("bank-reconciliation-tool.bundle.js", () =>
- frm.trigger("make_reconciliation_tool")
- );
+ frappe.require("bank-reconciliation-tool.bundle.js", () => frm.trigger("make_reconciliation_tool"));
frm.add_custom_button(__("Upload Bank Statement"), () =>
- frappe.call({
- method:
- "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.upload_bank_statement",
- args: {
- dt: frm.doc.doctype,
- dn: frm.doc.name,
- company: frm.doc.company,
- bank_account: frm.doc.bank_account,
- },
- callback: function (r) {
- if (!r.exc) {
- var doc = frappe.model.sync(r.message);
- frappe.set_route(
- "Form",
- doc[0].doctype,
- doc[0].name
- );
- }
- },
- })
+ frappe.call({
+ method: "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.upload_bank_statement",
+ args: {
+ dt: frm.doc.doctype,
+ dn: frm.doc.name,
+ company: frm.doc.company,
+ bank_account: frm.doc.bank_account,
+ },
+ callback: function (r) {
+ if (!r.exc) {
+ var doc = frappe.model.sync(r.message);
+ frappe.set_route("Form", doc[0].doctype, doc[0].name);
+ }
+ },
+ })
);
- frm.add_custom_button(__('Auto Reconcile'), function() {
+ frm.add_custom_button(__("Auto Reconcile"), function () {
frappe.call({
method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.auto_reconcile_vouchers",
args: {
@@ -75,33 +69,22 @@
from_reference_date: frm.doc.from_reference_date,
to_reference_date: frm.doc.to_reference_date,
},
- })
+ });
});
- frm.add_custom_button(__('Get Unreconciled Entries'), function() {
+ frm.add_custom_button(__("Get Unreconciled Entries"), function () {
frm.trigger("make_reconciliation_tool");
});
- frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'primary');
-
+ frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "primary");
},
bank_account: function (frm) {
- frappe.db.get_value(
- "Bank Account",
- frm.doc.bank_account,
- "account",
- (r) => {
- frappe.db.get_value(
- "Account",
- r.account,
- "account_currency",
- (r) => {
- frm.doc.account_currency = r.account_currency;
- frm.trigger("render_chart");
- }
- );
- }
- );
+ frappe.db.get_value("Bank Account", frm.doc.bank_account, "account", (r) => {
+ frappe.db.get_value("Account", r.account, "account_currency", (r) => {
+ frm.doc.account_currency = r.account_currency;
+ frm.trigger("render_chart");
+ });
+ });
frm.trigger("get_account_opening_balance");
},
@@ -120,11 +103,7 @@
) {
frm.trigger("render_chart");
frm.trigger("render");
- frappe.utils.scroll_to(
- frm.get_field("reconciliation_tool_cards").$wrapper,
- true,
- 30
- );
+ frappe.utils.scroll_to(frm.get_field("reconciliation_tool_cards").$wrapper, true, 30);
}
});
}
@@ -133,11 +112,10 @@
get_account_opening_balance(frm) {
if (frm.doc.bank_account && frm.doc.bank_statement_from_date) {
frappe.call({
- method:
- "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
+ method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
args: {
bank_account: frm.doc.bank_account,
- till_date: frappe.datetime.add_days(frm.doc.bank_statement_from_date, -1)
+ till_date: frappe.datetime.add_days(frm.doc.bank_statement_from_date, -1),
},
callback: (response) => {
frm.set_value("account_opening_balance", response.message);
@@ -149,8 +127,7 @@
get_cleared_balance(frm) {
if (frm.doc.bank_account && frm.doc.bank_statement_to_date) {
return frappe.call({
- method:
- "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
+ method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
args: {
bank_account: frm.doc.bank_account,
till_date: frm.doc.bank_statement_to_date,
@@ -163,41 +140,30 @@
},
render_chart(frm) {
- frm.cards_manager = new erpnext.accounts.bank_reconciliation.NumberCardManager(
- {
- $reconciliation_tool_cards: frm.get_field(
- "reconciliation_tool_cards"
- ).$wrapper,
- bank_statement_closing_balance:
- frm.doc.bank_statement_closing_balance,
- cleared_balance: frm.cleared_balance,
- currency: frm.doc.account_currency,
- }
- );
+ frm.cards_manager = new erpnext.accounts.bank_reconciliation.NumberCardManager({
+ $reconciliation_tool_cards: frm.get_field("reconciliation_tool_cards").$wrapper,
+ bank_statement_closing_balance: frm.doc.bank_statement_closing_balance,
+ cleared_balance: frm.cleared_balance,
+ currency: frm.doc.account_currency,
+ });
},
render(frm) {
if (frm.doc.bank_account) {
- frm.bank_reconciliation_data_table_manager = new erpnext.accounts.bank_reconciliation.DataTableManager(
- {
+ frm.bank_reconciliation_data_table_manager =
+ new erpnext.accounts.bank_reconciliation.DataTableManager({
company: frm.doc.company,
bank_account: frm.doc.bank_account,
- $reconciliation_tool_dt: frm.get_field(
- "reconciliation_tool_dt"
- ).$wrapper,
- $no_bank_transactions: frm.get_field(
- "no_bank_transactions"
- ).$wrapper,
+ $reconciliation_tool_dt: frm.get_field("reconciliation_tool_dt").$wrapper,
+ $no_bank_transactions: frm.get_field("no_bank_transactions").$wrapper,
bank_statement_from_date: frm.doc.bank_statement_from_date,
bank_statement_to_date: frm.doc.bank_statement_to_date,
filter_by_reference_date: frm.doc.filter_by_reference_date,
from_reference_date: frm.doc.from_reference_date,
to_reference_date: frm.doc.to_reference_date,
- bank_statement_closing_balance:
- frm.doc.bank_statement_closing_balance,
+ bank_statement_closing_balance: frm.doc.bank_statement_closing_balance,
cards_manager: frm.cards_manager,
- }
- );
+ });
}
},
});
diff --git a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
index db68dfa..c4b4420 100644
--- a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
+++ b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
@@ -17,11 +17,9 @@
frm.import_in_progress = false;
if (data_import !== frm.doc.name) return;
frappe.model.clear_doc("Bank Statement Import", frm.doc.name);
- frappe.model
- .with_doc("Bank Statement Import", frm.doc.name)
- .then(() => {
- frm.refresh();
- });
+ frappe.model.with_doc("Bank Statement Import", frm.doc.name).then(() => {
+ frm.refresh();
+ });
});
frappe.realtime.on("data_import_progress", (data) => {
frm.import_in_progress = true;
@@ -48,20 +46,9 @@
: __("Updating {0} of {1}, {2}", message_args);
}
if (data.skipping) {
- message = __(
- "Skipping {0} of {1}, {2}",
- [
- data.current,
- data.total,
- eta_message,
- ]
- );
+ message = __("Skipping {0} of {1}, {2}", [data.current, data.total, eta_message]);
}
- frm.dashboard.show_progress(
- __("Import Progress"),
- percent,
- message
- );
+ frm.dashboard.show_progress(__("Import Progress"), percent, message);
frm.page.set_indicator(__("In Progress"), "orange");
// hide progress when complete
@@ -103,15 +90,12 @@
frm.trigger("show_report_error_button");
if (frm.doc.status === "Partial Success") {
- frm.add_custom_button(__("Export Errored Rows"), () =>
- frm.trigger("export_errored_rows")
- );
+ frm.add_custom_button(__("Export Errored Rows"), () => frm.trigger("export_errored_rows"));
}
if (frm.doc.status.includes("Success")) {
- frm.add_custom_button(
- __("Go to {0} List", [__(frm.doc.reference_doctype)]),
- () => frappe.set_route("List", frm.doc.reference_doctype)
+ frm.add_custom_button(__("Go to {0} List", [__(frm.doc.reference_doctype)]), () =>
+ frappe.set_route("List", frm.doc.reference_doctype)
);
}
},
@@ -128,13 +112,8 @@
frm.disable_save();
if (frm.doc.status !== "Success") {
if (!frm.is_new() && frm.has_import_file()) {
- let label =
- frm.doc.status === "Pending"
- ? __("Start Import")
- : __("Retry");
- frm.page.set_primary_action(label, () =>
- frm.events.start_import(frm)
- );
+ let label = frm.doc.status === "Pending" ? __("Start Import") : __("Retry");
+ frm.page.set_primary_action(label, () => frm.events.start_import(frm));
} else {
frm.page.set_primary_action(__("Save"), () => frm.save());
}
@@ -176,24 +155,24 @@
message =
successful_records.length > 1
? __(
- "Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
- message_args
- )
+ "Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+ message_args
+ )
: __(
- "Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
- message_args
- );
+ "Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+ message_args
+ );
} else {
message =
successful_records.length > 1
? __(
- "Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
- message_args
- )
+ "Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+ message_args
+ )
: __(
- "Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
- message_args
- );
+ "Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+ message_args
+ );
}
}
frm.dashboard.set_headline(message);
@@ -236,8 +215,7 @@
},
download_template() {
- let method =
- "/api/method/frappe.core.doctype.data_import.data_import.download_template";
+ let method = "/api/method/frappe.core.doctype.data_import.data_import.download_template";
open_url_post(method, {
doctype: "Bank Transaction",
@@ -250,7 +228,7 @@
"description",
"reference_number",
"bank_account",
- "currency"
+ "currency",
],
},
});
@@ -321,10 +299,7 @@
show_import_preview(frm, preview_data) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
- if (
- frm.import_preview &&
- frm.import_preview.doctype === frm.doc.reference_doctype
- ) {
+ if (frm.import_preview && frm.import_preview.doctype === frm.doc.reference_doctype) {
frm.import_preview.preview_data = preview_data;
frm.import_preview.import_log = import_log;
frm.import_preview.refresh();
@@ -340,19 +315,10 @@
frm,
events: {
remap_column(changed_map) {
- let template_options = JSON.parse(
- frm.doc.template_options || "{}"
- );
- template_options.column_to_field_map =
- template_options.column_to_field_map || {};
- Object.assign(
- template_options.column_to_field_map,
- changed_map
- );
- frm.set_value(
- "template_options",
- JSON.stringify(template_options)
- );
+ let template_options = JSON.parse(frm.doc.template_options || "{}");
+ template_options.column_to_field_map = template_options.column_to_field_map || {};
+ Object.assign(template_options.column_to_field_map, changed_map);
+ frm.set_value("template_options", JSON.stringify(template_options));
frm.save().then(() => frm.trigger("import_file"));
},
},
@@ -386,8 +352,7 @@
let other_warnings = [];
for (let warning of warnings) {
if (warning.row) {
- warnings_by_row[warning.row] =
- warnings_by_row[warning.row] || [];
+ warnings_by_row[warning.row] = warnings_by_row[warning.row] || [];
warnings_by_row[warning.row].push(warning);
} else {
other_warnings.push(warning);
@@ -402,9 +367,7 @@
if (w.field) {
let label =
w.field.label +
- (w.field.parent !== frm.doc.reference_doctype
- ? ` (${w.field.parent})`
- : "");
+ (w.field.parent !== frm.doc.reference_doctype ? ` (${w.field.parent})` : "");
return `<li>${label}: ${w.message}</li>`;
}
return `<li>${w.message}</li>`;
@@ -423,10 +386,9 @@
.map((warning) => {
let header = "";
if (warning.col) {
- let column_number = `<span class="text-uppercase">${__(
- "Column {0}",
- [warning.col]
- )}</span>`;
+ let column_number = `<span class="text-uppercase">${__("Column {0}", [
+ warning.col,
+ ])}</span>`;
let column_header = columns[warning.col].header_title;
header = `${column_number} (${column_header})`;
}
@@ -465,36 +427,28 @@
let html = "";
if (log.success) {
if (frm.doc.import_type === "Insert New Records") {
- html = __(
- "Successfully imported {0}", [
- `<span class="underline">${frappe.utils.get_form_link(
- frm.doc.reference_doctype,
- log.docname,
- true
- )}<span>`,
- ]
- );
+ html = __("Successfully imported {0}", [
+ `<span class="underline">${frappe.utils.get_form_link(
+ frm.doc.reference_doctype,
+ log.docname,
+ true
+ )}<span>`,
+ ]);
} else {
- html = __(
- "Successfully updated {0}", [
- `<span class="underline">${frappe.utils.get_form_link(
- frm.doc.reference_doctype,
- log.docname,
- true
- )}<span>`,
- ]
- );
+ html = __("Successfully updated {0}", [
+ `<span class="underline">${frappe.utils.get_form_link(
+ frm.doc.reference_doctype,
+ log.docname,
+ true
+ )}<span>`,
+ ]);
}
} else {
let messages = log.messages
.map(JSON.parse)
.map((m) => {
- let title = m.title
- ? `<strong>${m.title}</strong>`
- : "";
- let message = m.message
- ? `<div>${m.message}</div>`
- : "";
+ let title = m.title ? `<strong>${m.title}</strong>` : "";
+ let message = m.message ? `<div>${m.message}</div>` : "";
return title + message;
})
.join("");
diff --git a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js
index 6c75402..4ab65ff 100644
--- a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js
+++ b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js
@@ -1,36 +1,34 @@
let imports_in_progress = [];
-frappe.listview_settings['Bank Statement Import'] = {
+frappe.listview_settings["Bank Statement Import"] = {
onload(listview) {
- frappe.realtime.on('data_import_progress', data => {
+ frappe.realtime.on("data_import_progress", (data) => {
if (!imports_in_progress.includes(data.data_import)) {
imports_in_progress.push(data.data_import);
}
});
- frappe.realtime.on('data_import_refresh', data => {
- imports_in_progress = imports_in_progress.filter(
- d => d !== data.data_import
- );
+ frappe.realtime.on("data_import_refresh", (data) => {
+ imports_in_progress = imports_in_progress.filter((d) => d !== data.data_import);
listview.refresh();
});
},
- get_indicator: function(doc) {
+ get_indicator: function (doc) {
var colors = {
- 'Pending': 'orange',
- 'Not Started': 'orange',
- 'Partial Success': 'orange',
- 'Success': 'green',
- 'In Progress': 'orange',
- 'Error': 'red'
+ Pending: "orange",
+ "Not Started": "orange",
+ "Partial Success": "orange",
+ Success: "green",
+ "In Progress": "orange",
+ Error: "red",
};
let status = doc.status;
if (imports_in_progress.includes(doc.name)) {
- status = 'In Progress';
+ status = "In Progress";
}
- if (status == 'Pending') {
- status = 'Not Started';
+ if (status == "Pending") {
+ status = "Not Started";
}
- return [__(status), colors[status], 'status,=,' + doc.status];
+ return [__(status), colors[status], "status,=," + doc.status];
},
- hide_name_column: true
+ hide_name_column: true,
};
diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.js b/erpnext/accounts/doctype/bank_transaction/bank_transaction.js
index b3cc1cb..d899d42 100644
--- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.js
+++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.js
@@ -3,7 +3,7 @@
frappe.ui.form.on("Bank Transaction", {
onload(frm) {
- frm.set_query("payment_document", "payment_entries", function() {
+ frm.set_query("payment_document", "payment_entries", function () {
const payment_doctypes = frm.events.get_payment_doctypes(frm);
return {
filters: {
@@ -23,7 +23,7 @@
set_bank_statement_filter(frm);
},
- setup: function(frm) {
+ setup: function (frm) {
frm.set_query("party_type", function () {
return {
filters: {
@@ -33,16 +33,10 @@
});
},
- get_payment_doctypes: function() {
+ get_payment_doctypes: function () {
// get payment doctypes from all the apps
- return [
- "Payment Entry",
- "Journal Entry",
- "Sales Invoice",
- "Purchase Invoice",
- "Bank Transaction",
- ];
- }
+ return ["Payment Entry", "Journal Entry", "Sales Invoice", "Purchase Invoice", "Bank Transaction"];
+ },
});
frappe.ui.form.on("Bank Transaction Payments", {
@@ -54,10 +48,11 @@
const update_clearance_date = (frm, cdt, cdn) => {
if (frm.doc.docstatus === 1) {
frappe
- .xcall(
- "erpnext.accounts.doctype.bank_transaction.bank_transaction.unclear_reference_payment",
- { doctype: cdt, docname: cdn, bt_name: frm.doc.name }
- )
+ .xcall("erpnext.accounts.doctype.bank_transaction.bank_transaction.unclear_reference_payment", {
+ doctype: cdt,
+ docname: cdn,
+ bt_name: frm.doc.name,
+ })
.then((e) => {
if (e == "success") {
frappe.show_alert({
diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js b/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js
index 2585ee9..9942c09 100644
--- a/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js
+++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js
@@ -1,15 +1,15 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.listview_settings['Bank Transaction'] = {
+frappe.listview_settings["Bank Transaction"] = {
add_fields: ["unallocated_amount"],
- get_indicator: function(doc) {
- if(doc.docstatus == 2) {
+ get_indicator: function (doc) {
+ if (doc.docstatus == 2) {
return [__("Cancelled"), "red", "docstatus,=,2"];
- } else if(flt(doc.unallocated_amount)<=0) {
+ } else if (flt(doc.unallocated_amount) <= 0) {
return [__("Reconciled"), "green", "unallocated_amount,=,0"];
- } else if(flt(doc.unallocated_amount)>0) {
+ } else if (flt(doc.unallocated_amount) > 0) {
return [__("Unreconciled"), "orange", "unallocated_amount,>,0"];
}
- }
+ },
};
diff --git a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js
index ece0fb3..f3532e5 100644
--- a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js
+++ b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js
@@ -6,18 +6,18 @@
frm.trigger("render_heatmap");
},
refresh(frm) {
- frm.add_custom_button(__('Bisect Left'), () => {
+ frm.add_custom_button(__("Bisect Left"), () => {
frm.trigger("bisect_left");
});
- frm.add_custom_button(__('Bisect Right'), () => {
+ frm.add_custom_button(__("Bisect Right"), () => {
frm.trigger("bisect_right");
});
- frm.add_custom_button(__('Up'), () => {
+ frm.add_custom_button(__("Up"), () => {
frm.trigger("move_up");
});
- frm.add_custom_button(__('Build Tree'), () => {
+ frm.add_custom_button(__("Build Tree"), () => {
frm.trigger("build_tree");
});
},
@@ -26,16 +26,16 @@
bisect_heatmap.addClass("bisect_heatmap_location");
// milliseconds in a day
- let msiad=24*60*60*1000;
+ let msiad = 24 * 60 * 60 * 1000;
let datapoints = {};
let fr_dt = new Date(frm.doc.from_date).getTime();
let to_dt = new Date(frm.doc.to_date).getTime();
let bisect_start = new Date(frm.doc.current_from_date).getTime();
let bisect_end = new Date(frm.doc.current_to_date).getTime();
- for(let x=fr_dt; x <= to_dt; x+=msiad){
- let epoch_in_seconds = x/1000;
- if ((bisect_start <= x) && (x <= bisect_end )) {
+ for (let x = fr_dt; x <= to_dt; x += msiad) {
+ let epoch_in_seconds = x / 1000;
+ if (bisect_start <= x && x <= bisect_end) {
datapoints[epoch_in_seconds] = 1.0;
} else {
datapoints[epoch_in_seconds] = 0.0;
@@ -49,19 +49,19 @@
start: new Date(frm.doc.from_date),
end: new Date(frm.doc.to_date),
},
- countLabel: 'Bisecting',
+ countLabel: "Bisecting",
discreteDomains: 1,
});
},
bisect_left(frm) {
frm.call({
doc: frm.doc,
- method: 'bisect_left',
+ method: "bisect_left",
freeze: true,
freeze_message: __("Bisecting Left ..."),
callback: (r) => {
frm.trigger("render_heatmap");
- }
+ },
});
},
bisect_right(frm) {
@@ -69,10 +69,10 @@
doc: frm.doc,
freeze: true,
freeze_message: __("Bisecting Right ..."),
- method: 'bisect_right',
+ method: "bisect_right",
callback: (r) => {
frm.trigger("render_heatmap");
- }
+ },
});
},
move_up(frm) {
@@ -80,10 +80,10 @@
doc: frm.doc,
freeze: true,
freeze_message: __("Moving up in tree ..."),
- method: 'move_up',
+ method: "move_up",
callback: (r) => {
frm.trigger("render_heatmap");
- }
+ },
});
},
build_tree(frm) {
@@ -91,10 +91,10 @@
doc: frm.doc,
freeze: true,
freeze_message: __("Rebuilding BTree for period ..."),
- method: 'build_tree',
+ method: "build_tree",
callback: (r) => {
frm.trigger("render_heatmap");
- }
+ },
});
},
});
diff --git a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py
index da273b9..e9860a5 100644
--- a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py
+++ b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py
@@ -138,10 +138,11 @@
# set root as current node
root = frappe.db.get_all("Bisect Nodes", filters={"root": ["is", "not set"]})[0]
- self.get_report_summary()
self.current_node = root.name
self.current_from_date = self.from_date
self.current_to_date = self.to_date
+
+ self.get_report_summary()
self.save()
def get_report_summary(self):
diff --git a/erpnext/accounts/doctype/budget/budget.js b/erpnext/accounts/doctype/budget/budget.js
index e162e32..6e874f7 100644
--- a/erpnext/accounts/doctype/budget/budget.js
+++ b/erpnext/accounts/doctype/budget/budget.js
@@ -2,48 +2,48 @@
// For license information, please see license.txt
frappe.provide("erpnext.accounts.dimensions");
-frappe.ui.form.on('Budget', {
- onload: function(frm) {
- frm.set_query("account", "accounts", function() {
+frappe.ui.form.on("Budget", {
+ onload: function (frm) {
+ frm.set_query("account", "accounts", function () {
return {
filters: {
company: frm.doc.company,
report_type: "Profit and Loss",
- is_group: 0
- }
+ is_group: 0,
+ },
};
});
- frm.set_query("monthly_distribution", function() {
+ frm.set_query("monthly_distribution", function () {
return {
filters: {
- fiscal_year: frm.doc.fiscal_year
- }
+ fiscal_year: frm.doc.fiscal_year,
+ },
};
});
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- refresh: function(frm) {
- frm.trigger("toggle_reqd_fields")
+ refresh: function (frm) {
+ frm.trigger("toggle_reqd_fields");
},
- budget_against: function(frm) {
- frm.trigger("set_null_value")
- frm.trigger("toggle_reqd_fields")
+ budget_against: function (frm) {
+ frm.trigger("set_null_value");
+ frm.trigger("toggle_reqd_fields");
},
- set_null_value: function(frm) {
- if(frm.doc.budget_against == 'Cost Center') {
- frm.set_value('project', null)
+ set_null_value: function (frm) {
+ if (frm.doc.budget_against == "Cost Center") {
+ frm.set_value("project", null);
} else {
- frm.set_value('cost_center', null)
+ frm.set_value("cost_center", null);
}
},
- toggle_reqd_fields: function(frm) {
- frm.toggle_reqd("cost_center", frm.doc.budget_against=="Cost Center");
- frm.toggle_reqd("project", frm.doc.budget_against=="Project");
- }
+ toggle_reqd_fields: function (frm) {
+ frm.toggle_reqd("cost_center", frm.doc.budget_against == "Cost Center");
+ frm.toggle_reqd("project", frm.doc.budget_against == "Project");
+ },
});
diff --git a/erpnext/accounts/doctype/cashier_closing/cashier_closing.js b/erpnext/accounts/doctype/cashier_closing/cashier_closing.js
index ce791e4..71664b7 100644
--- a/erpnext/accounts/doctype/cashier_closing/cashier_closing.js
+++ b/erpnext/accounts/doctype/cashier_closing/cashier_closing.js
@@ -1,11 +1,10 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('Cashier Closing', {
-
- setup: function(frm){
+frappe.ui.form.on("Cashier Closing", {
+ setup: function (frm) {
if (frm.doc.user == "" || frm.doc.user == null) {
frm.doc.user = frappe.session.user;
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js
index 56fa6ce..1d8bb85 100644
--- a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js
+++ b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js
@@ -1,4 +1,4 @@
-frappe.ui.form.on('Chart of Accounts Importer', {
+frappe.ui.form.on("Chart of Accounts Importer", {
onload: function (frm) {
frm.set_value("company", "");
frm.set_value("import_file", "");
@@ -8,31 +8,34 @@
frm.disable_save();
// make company mandatory
- frm.set_df_property('company', 'reqd', frm.doc.company ? 0 : 1);
- frm.set_df_property('import_file_section', 'hidden', frm.doc.company ? 0 : 1);
+ frm.set_df_property("company", "reqd", frm.doc.company ? 0 : 1);
+ frm.set_df_property("import_file_section", "hidden", frm.doc.company ? 0 : 1);
if (frm.doc.import_file) {
frappe.run_serially([
() => generate_tree_preview(frm),
() => create_import_button(frm),
- () => frm.set_df_property('chart_preview', 'hidden', 0)
+ () => frm.set_df_property("chart_preview", "hidden", 0),
]);
}
- frm.set_df_property('chart_preview', 'hidden',
- $(frm.fields_dict['chart_tree'].wrapper).html()!="" ? 0 : 1);
+ frm.set_df_property(
+ "chart_preview",
+ "hidden",
+ $(frm.fields_dict["chart_tree"].wrapper).html() != "" ? 0 : 1
+ );
},
- download_template: function(frm) {
+ download_template: function (frm) {
var d = new frappe.ui.Dialog({
title: __("Download Template"),
fields: [
{
- label : "File Type",
+ label: "File Type",
fieldname: "file_type",
fieldtype: "Select",
reqd: 1,
- options: ["Excel", "CSV"]
+ options: ["Excel", "CSV"],
},
{
label: "Template Type",
@@ -41,21 +44,27 @@
reqd: 1,
options: ["Sample Template", "Blank Template"],
change: () => {
- let template_type = d.get_value('template_type');
+ let template_type = d.get_value("template_type");
if (template_type === "Sample Template") {
- d.set_df_property('template_type', 'description',
+ d.set_df_property(
+ "template_type",
+ "description",
`The Sample Template contains all the required accounts pre filled in the template.
- You can add more accounts or change existing accounts in the template as per your choice.`);
+ You can add more accounts or change existing accounts in the template as per your choice.`
+ );
} else {
- d.set_df_property('template_type', 'description',
+ d.set_df_property(
+ "template_type",
+ "description",
`The Blank Template contains just the account type and root type required to build the Chart
- of Accounts. Please enter the account names and add more rows as per your requirement.`);
+ of Accounts. Please enter the account names and add more rows as per your requirement.`
+ );
}
- }
+ },
},
{
- label : "Company",
+ label: "Company",
fieldname: "company",
fieldtype: "Link",
reqd: 1,
@@ -63,25 +72,25 @@
default: frm.doc.company,
},
],
- primary_action: function() {
+ primary_action: function () {
let data = d.get_values();
if (!data.template_type) {
- frappe.throw(__('Please select <b>Template Type</b> to download template'));
+ frappe.throw(__("Please select <b>Template Type</b> to download template"));
}
open_url_post(
- '/api/method/erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.download_template',
+ "/api/method/erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.download_template",
{
file_type: data.file_type,
template_type: data.template_type,
- company: data.company
+ company: data.company,
}
);
d.hide();
},
- primary_action_label: __('Download')
+ primary_action_label: __("Download"),
});
d.show();
},
@@ -89,7 +98,7 @@
import_file: function (frm) {
if (!frm.doc.import_file) {
frm.page.set_indicator("");
- $(frm.fields_dict['chart_tree'].wrapper).empty(); // empty wrapper on removing file
+ $(frm.fields_dict["chart_tree"].wrapper).empty(); // empty wrapper on removing file
}
},
@@ -99,89 +108,97 @@
frappe.call({
method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.validate_company",
args: {
- company: frm.doc.company
+ company: frm.doc.company,
},
- callback: function(r) {
- if(r.message===false) {
+ callback: function (r) {
+ if (r.message === false) {
frm.set_value("company", "");
- frappe.throw(__("Transactions against the Company already exist! Chart of Accounts can only be imported for a Company with no transactions."));
+ frappe.throw(
+ __(
+ "Transactions against the Company already exist! Chart of Accounts can only be imported for a Company with no transactions."
+ )
+ );
} else {
frm.trigger("refresh");
}
- }
+ },
});
}
- }
+ },
});
-var create_import_button = function(frm) {
- frm.page.set_primary_action(__("Import"), function () {
+var create_import_button = function (frm) {
+ frm.page
+ .set_primary_action(__("Import"), function () {
+ return frappe.call({
+ method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.import_coa",
+ args: {
+ file_name: frm.doc.import_file,
+ company: frm.doc.company,
+ },
+ freeze: true,
+ freeze_message: __("Creating Accounts..."),
+ callback: function (r) {
+ if (!r.exc) {
+ clearInterval(frm.page["interval"]);
+ frm.page.set_indicator(__("Import Successful"), "blue");
+ create_reset_button(frm);
+ }
+ },
+ });
+ })
+ .addClass("btn btn-primary");
+};
+
+var create_reset_button = function (frm) {
+ frm.page
+ .set_primary_action(__("Reset"), function () {
+ frm.page.clear_primary_action();
+ delete frm.page["show_import_button"];
+ frm.reload_doc();
+ })
+ .addClass("btn btn-primary");
+};
+
+var validate_coa = function (frm) {
+ if (frm.doc.import_file) {
+ let parent = __("All Accounts");
return frappe.call({
- method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.import_coa",
+ method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa",
args: {
file_name: frm.doc.import_file,
- company: frm.doc.company
- },
- freeze: true,
- freeze_message: __("Creating Accounts..."),
- callback: function(r) {
- if (!r.exc) {
- clearInterval(frm.page["interval"]);
- frm.page.set_indicator(__('Import Successful'), 'blue');
- create_reset_button(frm);
- }
- }
- });
- }).addClass('btn btn-primary');
-};
-
-var create_reset_button = function(frm) {
- frm.page.set_primary_action(__("Reset"), function () {
- frm.page.clear_primary_action();
- delete frm.page["show_import_button"];
- frm.reload_doc();
- }).addClass('btn btn-primary');
-};
-
-var validate_coa = function(frm) {
- if (frm.doc.import_file) {
- let parent = __('All Accounts');
- return frappe.call({
- 'method': 'erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa',
- 'args': {
- file_name: frm.doc.import_file,
parent: parent,
- doctype: 'Chart of Accounts Importer',
+ doctype: "Chart of Accounts Importer",
file_type: frm.doc.file_type,
- for_validate: 1
+ for_validate: 1,
},
- callback: function(r) {
- if (r.message['show_import_button']) {
- frm.page['show_import_button'] = Boolean(r.message['show_import_button']);
+ callback: function (r) {
+ if (r.message["show_import_button"]) {
+ frm.page["show_import_button"] = Boolean(r.message["show_import_button"]);
}
- }
+ },
});
}
};
-var generate_tree_preview = function(frm) {
- let parent = __('All Accounts');
- $(frm.fields_dict['chart_tree'].wrapper).empty(); // empty wrapper to load new data
+var generate_tree_preview = function (frm) {
+ let parent = __("All Accounts");
+ $(frm.fields_dict["chart_tree"].wrapper).empty(); // empty wrapper to load new data
// generate tree structure based on the csv data
return new frappe.ui.Tree({
- parent: $(frm.fields_dict['chart_tree'].wrapper),
+ parent: $(frm.fields_dict["chart_tree"].wrapper),
label: parent,
expandable: true,
- method: 'erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa',
+ method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa",
args: {
file_name: frm.doc.import_file,
parent: parent,
- doctype: 'Chart of Accounts Importer',
- file_type: frm.doc.file_type
+ doctype: "Chart of Accounts Importer",
+ file_type: frm.doc.file_type,
},
- onclick: function(node) {
+ onclick: function (node) {
parent = node.value;
- }
+ },
});
};
diff --git a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
index d10c618..17cb8d0 100644
--- a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
+++ b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
@@ -3,18 +3,20 @@
frappe.provide("erpnext.cheque_print");
-frappe.ui.form.on('Cheque Print Template', {
- refresh: function(frm) {
- if(!frm.doc.__islocal) {
- frm.add_custom_button(frm.doc.has_print_format?__("Update Print Format"):__("Create Print Format"),
- function() {
+frappe.ui.form.on("Cheque Print Template", {
+ refresh: function (frm) {
+ if (!frm.doc.__islocal) {
+ frm.add_custom_button(
+ frm.doc.has_print_format ? __("Update Print Format") : __("Create Print Format"),
+ function () {
erpnext.cheque_print.view_cheque_print(frm);
- }).addClass("btn-primary");
+ }
+ ).addClass("btn-primary");
- $(frm.fields_dict.cheque_print_preview.wrapper).empty()
+ $(frm.fields_dict.cheque_print_preview.wrapper).empty();
-
- var template = '<div style="position: relative; overflow-x: scroll;">\
+ var template =
+ '<div style="position: relative; overflow-x: scroll;">\
<div id="cheque_preview" style="width: {{ cheque_width }}cm; \
height: {{ cheque_height }}cm;\
background-repeat: no-repeat;\
@@ -48,30 +50,30 @@
</div>\
</div>';
- $(frappe.render(template, frm.doc)).appendTo(frm.fields_dict.cheque_print_preview.wrapper)
+ $(frappe.render(template, frm.doc)).appendTo(frm.fields_dict.cheque_print_preview.wrapper);
if (frm.doc.scanned_cheque) {
- $(frm.fields_dict.cheque_print_preview.wrapper).find("#cheque_preview").css('background-image', 'url(' + frm.doc.scanned_cheque + ')');
+ $(frm.fields_dict.cheque_print_preview.wrapper)
+ .find("#cheque_preview")
+ .css("background-image", "url(" + frm.doc.scanned_cheque + ")");
}
}
- }
+ },
});
-
-erpnext.cheque_print.view_cheque_print = function(frm) {
+erpnext.cheque_print.view_cheque_print = function (frm) {
frappe.call({
method: "erpnext.accounts.doctype.cheque_print_template.cheque_print_template.create_or_update_cheque_print_format",
- args:{
- "template_name": frm.doc.name
+ args: {
+ template_name: frm.doc.name,
},
- callback: function(r) {
+ callback: function (r) {
if (!r.exe && !frm.doc.has_print_format) {
var doc = frappe.model.sync(r.message);
frappe.set_route("Form", r.message.doctype, r.message.name);
+ } else {
+ frappe.msgprint(__("Print settings updated in respective print format"));
}
- else {
- frappe.msgprint(__("Print settings updated in respective print format"))
- }
- }
- })
-}
+ },
+ });
+};
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index c427cc8..7ccc802 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -3,75 +3,80 @@
frappe.provide("erpnext.accounts");
-
-
-frappe.ui.form.on('Cost Center', {
- onload: function(frm) {
- frm.set_query("parent_cost_center", function() {
+frappe.ui.form.on("Cost Center", {
+ onload: function (frm) {
+ frm.set_query("parent_cost_center", function () {
return {
filters: {
company: frm.doc.company,
- is_group: 1
- }
- }
+ is_group: 1,
+ },
+ };
});
},
- refresh: function(frm) {
+ refresh: function (frm) {
if (!frm.is_new()) {
- frm.add_custom_button(__('Update Cost Center Name / Number'), function () {
+ frm.add_custom_button(__("Update Cost Center Name / Number"), function () {
frm.trigger("update_cost_center_number");
});
}
- let intro_txt = '';
+ let intro_txt = "";
let doc = frm.doc;
- frm.toggle_display('cost_center_name', doc.__islocal);
- frm.toggle_enable(['is_group', 'company'], doc.__islocal);
+ frm.toggle_display("cost_center_name", doc.__islocal);
+ frm.toggle_enable(["is_group", "company"], doc.__islocal);
- if(!doc.__islocal && doc.is_group==1) {
- intro_txt += __('Note: This Cost Center is a Group. Cannot make accounting entries against groups.');
+ if (!doc.__islocal && doc.is_group == 1) {
+ intro_txt += __(
+ "Note: This Cost Center is a Group. Cannot make accounting entries against groups."
+ );
}
frm.events.hide_unhide_group_ledger(frm);
- frm.toggle_display('sb1', doc.is_group==0);
+ frm.toggle_display("sb1", doc.is_group == 0);
frm.set_intro(intro_txt);
- if(!frm.doc.__islocal) {
- frm.add_custom_button(__('Chart of Cost Centers'),
- function() { frappe.set_route("Tree", "Cost Center"); });
+ if (!frm.doc.__islocal) {
+ frm.add_custom_button(__("Chart of Cost Centers"), function () {
+ frappe.set_route("Tree", "Cost Center");
+ });
- frm.add_custom_button(__('Budget'),
- function() { frappe.set_route("List", "Budget", {'cost_center': frm.doc.name}); });
+ frm.add_custom_button(__("Budget"), function () {
+ frappe.set_route("List", "Budget", { cost_center: frm.doc.name });
+ });
}
},
- update_cost_center_number: function(frm) {
+ update_cost_center_number: function (frm) {
var d = new frappe.ui.Dialog({
- title: __('Update Cost Center Name / Number'),
+ title: __("Update Cost Center Name / Number"),
fields: [
{
- "label": "Cost Center Name",
- "fieldname": "cost_center_name",
- "fieldtype": "Data",
- "reqd": 1,
- "default": frm.doc.cost_center_name
+ label: "Cost Center Name",
+ fieldname: "cost_center_name",
+ fieldtype: "Data",
+ reqd: 1,
+ default: frm.doc.cost_center_name,
},
{
- "label": "Cost Center Number",
- "fieldname": "cost_center_number",
- "fieldtype": "Data",
- "default": frm.doc.cost_center_number
+ label: "Cost Center Number",
+ fieldname: "cost_center_number",
+ fieldtype: "Data",
+ default: frm.doc.cost_center_number,
},
{
- "label": __("Merge with existing"),
- "fieldname": "merge",
- "fieldtype": "Check",
- "default": 0
- }
+ label: __("Merge with existing"),
+ fieldname: "merge",
+ fieldtype: "Check",
+ default: 0,
+ },
],
- primary_action: function() {
+ primary_action: function () {
let data = d.get_values();
- if(data.cost_center_name === frm.doc.cost_center_name && data.cost_center_number === frm.doc.cost_center_number) {
+ if (
+ data.cost_center_name === frm.doc.cost_center_name &&
+ data.cost_center_number === frm.doc.cost_center_number
+ ) {
d.hide();
return;
}
@@ -83,12 +88,12 @@
cost_center_name: data.cost_center_name,
cost_center_number: cstr(data.cost_center_number),
company: frm.doc.company,
- merge: data.merge
+ merge: data.merge,
},
- callback: function(r) {
+ callback: function (r) {
frappe.dom.unfreeze();
- if(!r.exc) {
- if(r.message) {
+ if (!r.exc) {
+ if (r.message) {
frappe.set_route("Form", "Cost Center", r.message);
} else {
frm.set_value("cost_center_name", data.cost_center_name);
@@ -96,44 +101,42 @@
}
d.hide();
}
- }
+ },
});
},
- primary_action_label: __('Update')
+ primary_action_label: __("Update"),
});
d.show();
},
parent_cost_center(frm) {
- if(!frm.doc.company) {
- frappe.msgprint(__('Please enter company name first'));
+ if (!frm.doc.company) {
+ frappe.msgprint(__("Please enter company name first"));
}
},
hide_unhide_group_ledger(frm) {
let doc = frm.doc;
if (doc.is_group == 1) {
- frm.add_custom_button(__('Convert to Non-Group'),
- () => frm.events.convert_to_ledger(frm));
+ frm.add_custom_button(__("Convert to Non-Group"), () => frm.events.convert_to_ledger(frm));
} else if (doc.is_group == 0) {
- frm.add_custom_button(__('Convert to Group'),
- () => frm.events.convert_to_group(frm));
+ frm.add_custom_button(__("Convert to Group"), () => frm.events.convert_to_group(frm));
}
},
convert_to_group(frm) {
- frm.call('convert_ledger_to_group').then(r => {
- if(r.message === 1) {
+ frm.call("convert_ledger_to_group").then((r) => {
+ if (r.message === 1) {
frm.refresh();
}
});
},
convert_to_ledger(frm) {
- frm.call('convert_group_to_ledger').then(r => {
- if(r.message === 1) {
+ frm.call("convert_group_to_ledger").then((r) => {
+ if (r.message === 1) {
frm.refresh();
}
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.json b/erpnext/accounts/doctype/cost_center/cost_center.json
index 7cbb290..2e66db7 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.json
+++ b/erpnext/accounts/doctype/cost_center/cost_center.json
@@ -41,7 +41,7 @@
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Cost Center Number",
- "read_only": 1
+ "read_only_depends_on": "eval:!doc.__islocal"
},
{
"fieldname": "parent_cost_center",
@@ -170,4 +170,4 @@
"sort_field": "modified",
"sort_order": "ASC",
"states": []
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/doctype/cost_center/cost_center_tree.js b/erpnext/accounts/doctype/cost_center/cost_center_tree.js
index 1d482c5..3edeb8e 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center_tree.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center_tree.js
@@ -1,54 +1,84 @@
frappe.treeview_settings["Cost Center"] = {
breadcrumb: "Accounts",
get_tree_root: false,
- filters: [{
- fieldname: "company",
- fieldtype:"Select",
- options: erpnext.utils.get_tree_options("company"),
- label: __("Company"),
- default: erpnext.utils.get_tree_default("company")
- }],
- root_label: "Cost Centers",
- get_tree_nodes: 'erpnext.accounts.utils.get_children',
- add_tree_node: 'erpnext.accounts.utils.add_cc',
- menu_items:[
+ filters: [
{
- label: __('New Company'),
- action: function() { frappe.new_doc("Company", true) },
- condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1'
- }
+ fieldname: "company",
+ fieldtype: "Select",
+ options: erpnext.utils.get_tree_options("company"),
+ label: __("Company"),
+ default: erpnext.utils.get_tree_default("company"),
+ },
],
- fields:[
- {fieldtype:'Data', fieldname:'cost_center_name', label:__('New Cost Center Name'), reqd:true},
- {fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
- description:__('Further cost centers can be made under Groups but entries can be made against non-Groups')},
- {fieldtype:'Data', fieldname:'cost_center_number', label:__('Cost Center Number'),
- description: __("Number of new Cost Center, it will be included in the cost center name as a prefix")}
+ root_label: "Cost Centers",
+ get_tree_nodes: "erpnext.accounts.utils.get_children",
+ add_tree_node: "erpnext.accounts.utils.add_cc",
+ menu_items: [
+ {
+ label: __("New Company"),
+ action: function () {
+ frappe.new_doc("Company", true);
+ },
+ condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1',
+ },
],
- ignore_fields:["parent_cost_center"],
- onload: function(treeview) {
+ fields: [
+ { fieldtype: "Data", fieldname: "cost_center_name", label: __("New Cost Center Name"), reqd: true },
+ {
+ fieldtype: "Check",
+ fieldname: "is_group",
+ label: __("Is Group"),
+ description: __(
+ "Further cost centers can be made under Groups but entries can be made against non-Groups"
+ ),
+ },
+ {
+ fieldtype: "Data",
+ fieldname: "cost_center_number",
+ label: __("Cost Center Number"),
+ description: __(
+ "Number of new Cost Center, it will be included in the cost center name as a prefix"
+ ),
+ },
+ ],
+ ignore_fields: ["parent_cost_center"],
+ onload: function (treeview) {
function get_company() {
return treeview.page.fields_dict.company.get_value();
}
// tools
- treeview.page.add_inner_button(__("Chart of Accounts"), function() {
- frappe.set_route('Tree', 'Account', {company: get_company()});
- }, __('View'));
+ treeview.page.add_inner_button(
+ __("Chart of Accounts"),
+ function () {
+ frappe.set_route("Tree", "Account", { company: get_company() });
+ },
+ __("View")
+ );
// make
- treeview.page.add_inner_button(__("Budget List"), function() {
- frappe.set_route('List', 'Budget', {company: get_company()});
- }, __('Budget'));
+ treeview.page.add_inner_button(
+ __("Budget List"),
+ function () {
+ frappe.set_route("List", "Budget", { company: get_company() });
+ },
+ __("Budget")
+ );
- treeview.page.add_inner_button(__("Monthly Distribution"), function() {
- frappe.set_route('List', 'Monthly Distribution', {company: get_company()});
- }, __('Budget'));
+ treeview.page.add_inner_button(
+ __("Monthly Distribution"),
+ function () {
+ frappe.set_route("List", "Monthly Distribution", { company: get_company() });
+ },
+ __("Budget")
+ );
- treeview.page.add_inner_button(__("Budget Variance Report"), function() {
- frappe.set_route('query-report', 'Budget Variance Report', {company: get_company()});
- }, __('Budget'));
-
- }
-
-}
+ treeview.page.add_inner_button(
+ __("Budget Variance Report"),
+ function () {
+ frappe.set_route("query-report", "Budget Variance Report", { company: get_company() });
+ },
+ __("Budget")
+ );
+ },
+};
diff --git a/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js b/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js
index 0da9016..8adc5b2 100644
--- a/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js
+++ b/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js
@@ -1,24 +1,24 @@
// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Cost Center Allocation', {
- setup: function(frm) {
- frm.set_query('main_cost_center', function() {
+frappe.ui.form.on("Cost Center Allocation", {
+ setup: function (frm) {
+ frm.set_query("main_cost_center", function () {
return {
filters: {
company: frm.doc.company,
- is_group: 0
- }
+ is_group: 0,
+ },
};
});
- frm.set_query('cost_center', 'allocation_percentages', function() {
+ frm.set_query("cost_center", "allocation_percentages", function () {
return {
filters: {
company: frm.doc.company,
- is_group: 0
- }
+ is_group: 0,
+ },
};
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/coupon_code/coupon_code.js b/erpnext/accounts/doctype/coupon_code/coupon_code.js
index da3a9f8..f8b5bdc 100644
--- a/erpnext/accounts/doctype/coupon_code/coupon_code.js
+++ b/erpnext/accounts/doctype/coupon_code/coupon_code.js
@@ -1,44 +1,41 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Coupon Code', {
- setup: function(frm) {
- frm.set_query("pricing_rule", function() {
+frappe.ui.form.on("Coupon Code", {
+ setup: function (frm) {
+ frm.set_query("pricing_rule", function () {
return {
- filters: [
- ["Pricing Rule","coupon_code_based", "=", "1"]
- ]
+ filters: [["Pricing Rule", "coupon_code_based", "=", "1"]],
};
});
},
- coupon_name:function(frm){
- if (frm.doc.__islocal===1) {
+ coupon_name: function (frm) {
+ if (frm.doc.__islocal === 1) {
frm.trigger("make_coupon_code");
}
},
- coupon_type:function(frm){
- if (frm.doc.__islocal===1) {
+ coupon_type: function (frm) {
+ if (frm.doc.__islocal === 1) {
frm.trigger("make_coupon_code");
}
},
- make_coupon_code: function(frm) {
- var coupon_name=frm.doc.coupon_name;
+ make_coupon_code: function (frm) {
+ var coupon_name = frm.doc.coupon_name;
var coupon_code;
- if (frm.doc.coupon_type=='Gift Card') {
- coupon_code=Math.random().toString(12).substring(2, 12).toUpperCase();
+ if (frm.doc.coupon_type == "Gift Card") {
+ coupon_code = Math.random().toString(12).substring(2, 12).toUpperCase();
+ } else if (frm.doc.coupon_type == "Promotional") {
+ coupon_name = coupon_name.replace(/\s/g, "");
+ coupon_code = coupon_name.toUpperCase().slice(0, 8);
}
- else if(frm.doc.coupon_type=='Promotional'){
- coupon_name=coupon_name.replace(/\s/g,'');
- coupon_code=coupon_name.toUpperCase().slice(0,8);
- }
- frm.doc.coupon_code=coupon_code;
- frm.refresh_field('coupon_code');
+ frm.doc.coupon_code = coupon_code;
+ frm.refresh_field("coupon_code");
},
- refresh: function(frm) {
+ refresh: function (frm) {
if (frm.doc.pricing_rule) {
- frm.add_custom_button(__("Add/Edit Coupon Conditions"), function(){
+ frm.add_custom_button(__("Add/Edit Coupon Conditions"), function () {
frappe.set_route("Form", "Pricing Rule", frm.doc.pricing_rule);
});
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js
index 6c40f2b..d931f62 100644
--- a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js
+++ b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js
@@ -1,28 +1,27 @@
// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Currency Exchange Settings', {
- service_provider: function(frm) {
+frappe.ui.form.on("Currency Exchange Settings", {
+ service_provider: function (frm) {
if (frm.doc.service_provider == "exchangerate.host") {
- let result = ['result'];
+ let result = ["result"];
let params = {
- date: '{transaction_date}',
- from: '{from_currency}',
- to: '{to_currency}'
+ date: "{transaction_date}",
+ from: "{from_currency}",
+ to: "{to_currency}",
};
add_param(frm, "https://api.exchangerate.host/convert", params, result);
} else if (frm.doc.service_provider == "frankfurter.app") {
- let result = ['rates', '{to_currency}'];
+ let result = ["rates", "{to_currency}"];
let params = {
- base: '{from_currency}',
- symbols: '{to_currency}'
+ base: "{from_currency}",
+ symbols: "{to_currency}",
};
add_param(frm, "https://frankfurter.app/{transaction_date}", params, result);
}
- }
+ },
});
-
function add_param(frm, api, params, result) {
var row;
frm.clear_table("req_params");
@@ -30,13 +29,13 @@
frm.doc.api_endpoint = api;
- $.each(params, function(key, value) {
+ $.each(params, function (key, value) {
row = frm.add_child("req_params");
row.key = key;
row.value = value;
});
- $.each(result, function(key, value) {
+ $.each(result, function (key, value) {
row = frm.add_child("result_key");
row.key = value;
});
diff --git a/erpnext/accounts/doctype/dunning/dunning.js b/erpnext/accounts/doctype/dunning/dunning.js
index 1ac909e..e9d091f 100644
--- a/erpnext/accounts/doctype/dunning/dunning.js
+++ b/erpnext/accounts/doctype/dunning/dunning.js
@@ -10,7 +10,7 @@
company: frm.doc.company,
customer: frm.doc.customer,
outstanding_amount: [">", 0],
- status: "Overdue"
+ status: "Overdue",
},
};
});
@@ -19,16 +19,16 @@
filters: {
company: frm.doc.company,
root_type: "Income",
- is_group: 0
- }
+ is_group: 0,
+ },
};
});
frm.set_query("cost_center", () => {
return {
filters: {
company: frm.doc.company,
- is_group: 0
- }
+ is_group: 0,
+ },
};
});
@@ -51,7 +51,8 @@
__("Payment"),
function () {
frm.events.make_payment_entry(frm);
- }, __("Create")
+ },
+ __("Create")
);
frm.page.set_inner_btn_group_as_primary(__("Create"));
}
@@ -69,7 +70,7 @@
get_query_filters: {
docstatus: 1,
status: "Overdue",
- company: frm.doc.company
+ company: frm.doc.company,
},
allow_child_item_selection: true,
child_fieldname: "payment_schedule",
@@ -78,9 +79,12 @@
});
}
- frappe.dynamic_link = { doc: frm.doc, fieldname: 'customer', doctype: 'Customer' };
+ frappe.dynamic_link = { doc: frm.doc, fieldname: "customer", doctype: "Customer" };
- frm.toggle_display("customer_name", (frm.doc.customer_name && frm.doc.customer_name !== frm.doc.customer));
+ frm.toggle_display(
+ "customer_name",
+ frm.doc.customer_name && frm.doc.customer_name !== frm.doc.customer
+ );
},
// When multiple companies are set up. in case company name is changed set default company address
company: function (frm) {
@@ -90,8 +94,8 @@
args: { name: frm.doc.company, existing_address: frm.doc.company_address || "" },
debounce: 2000,
callback: function (r) {
- frm.set_value("company_address", r && r.message || "");
- }
+ frm.set_value("company_address", (r && r.message) || "");
+ },
});
if (frm.fields_dict.currency) {
@@ -125,16 +129,16 @@
transaction_date: frm.doc.posting_date,
from_currency: frm.doc.currency,
to_currency: company_currency,
- args: "for_selling"
+ args: "for_selling",
},
freeze: true,
freeze_message: __("Fetching exchange rates ..."),
- callback: function(r) {
+ callback: function (r) {
const exchange_rate = flt(r.message);
if (exchange_rate != frm.doc.conversion_rate) {
frm.set_value("conversion_rate", exchange_rate);
}
- }
+ },
});
} else {
frm.trigger("conversion_rate");
@@ -166,8 +170,7 @@
get_dunning_letter_text: function (frm) {
if (frm.doc.dunning_type) {
frappe.call({
- method:
- "erpnext.accounts.doctype.dunning.dunning.get_dunning_letter_text",
+ method: "erpnext.accounts.doctype.dunning.dunning.get_dunning_letter_text",
args: {
dunning_type: frm.doc.dunning_type,
language: frm.doc.language,
@@ -204,10 +207,7 @@
calculate_overdue_days: function (frm) {
frm.doc.overdue_payments.forEach((row) => {
if (frm.doc.posting_date && row.due_date) {
- const overdue_days = moment(frm.doc.posting_date).diff(
- row.due_date,
- "days"
- );
+ const overdue_days = moment(frm.doc.posting_date).diff(row.due_date, "days");
frappe.model.set_value(row.doctype, row.name, "overdue_days", overdue_days);
}
});
@@ -215,15 +215,16 @@
calculate_interest: function (frm) {
frm.doc.overdue_payments.forEach((row) => {
const interest_per_day = frm.doc.rate_of_interest / 100 / 365;
- const interest = flt((interest_per_day * row.overdue_days * row.outstanding), precision("interest", row));
+ const interest = flt(
+ interest_per_day * row.overdue_days * row.outstanding,
+ precision("interest", row)
+ );
frappe.model.set_value(row.doctype, row.name, "interest", interest);
});
},
calculate_totals: function (frm) {
- const total_interest = frm.doc.overdue_payments
- .reduce((prev, cur) => prev + cur.interest, 0);
- const total_outstanding = frm.doc.overdue_payments
- .reduce((prev, cur) => prev + cur.outstanding, 0);
+ const total_interest = frm.doc.overdue_payments.reduce((prev, cur) => prev + cur.interest, 0);
+ const total_outstanding = frm.doc.overdue_payments.reduce((prev, cur) => prev + cur.outstanding, 0);
const dunning_amount = total_interest + frm.doc.dunning_fee;
const base_dunning_amount = dunning_amount * frm.doc.conversion_rate;
const grand_total = total_outstanding + dunning_amount;
@@ -240,8 +241,7 @@
},
make_payment_entry: function (frm) {
return frappe.call({
- method:
- "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry",
+ method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry",
args: {
dt: frm.doc.doctype,
dn: frm.doc.name,
@@ -257,5 +257,5 @@
frappe.ui.form.on("Overdue Payment", {
interest: function (frm) {
frm.trigger("calculate_totals");
- }
-});
\ No newline at end of file
+ },
+});
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
index 1ef5c83..741039a 100644
--- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
@@ -1,75 +1,79 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Exchange Rate Revaluation', {
- setup: function(frm) {
- frm.set_query("party_type", "accounts", function() {
+frappe.ui.form.on("Exchange Rate Revaluation", {
+ setup: function (frm) {
+ frm.set_query("party_type", "accounts", function () {
return {
- "filters": {
- "name": ["in", Object.keys(frappe.boot.party_account_types)],
- }
+ filters: {
+ name: ["in", Object.keys(frappe.boot.party_account_types)],
+ },
};
});
- frm.set_query("account", "accounts", function(doc) {
+ frm.set_query("account", "accounts", function (doc) {
return {
- "filters": {
- "company": doc.company
- }
+ filters: {
+ company: doc.company,
+ },
};
});
},
- refresh: function(frm) {
- if(frm.doc.docstatus==1) {
+ refresh: function (frm) {
+ if (frm.doc.docstatus == 1) {
frappe.call({
- method: 'check_journal_entry_condition',
+ method: "check_journal_entry_condition",
doc: frm.doc,
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
- frm.add_custom_button(__('Journal Entries'), function() {
- return frm.events.make_jv(frm);
- }, __('Create'));
+ frm.add_custom_button(
+ __("Journal Entries"),
+ function () {
+ return frm.events.make_jv(frm);
+ },
+ __("Create")
+ );
}
- }
+ },
});
}
},
- validate_rounding_loss: function(frm) {
+ validate_rounding_loss: function (frm) {
let allowance = frm.doc.rounding_loss_allowance;
if (!(allowance >= 0 && allowance < 1)) {
frappe.throw(__("Rounding Loss Allowance should be between 0 and 1"));
}
},
- rounding_loss_allowance: function(frm) {
+ rounding_loss_allowance: function (frm) {
frm.events.validate_rounding_loss(frm);
},
- validate: function(frm) {
+ validate: function (frm) {
frm.events.validate_rounding_loss(frm);
},
- get_entries: function(frm, account) {
+ get_entries: function (frm, account) {
frappe.call({
method: "get_accounts_data",
doc: cur_frm.doc,
account: account,
- callback: function(r){
+ callback: function (r) {
frappe.model.clear_table(frm.doc, "accounts");
- if(r.message) {
+ if (r.message) {
r.message.forEach((d) => {
- cur_frm.add_child("accounts",d);
+ cur_frm.add_child("accounts", d);
});
frm.events.get_total_gain_loss(frm);
refresh_field("accounts");
}
- }
+ },
});
},
- get_total_gain_loss: function(frm) {
- if(!(frm.doc.accounts && frm.doc.accounts.length)) return;
+ get_total_gain_loss: function (frm) {
+ if (!(frm.doc.accounts && frm.doc.accounts.length)) return;
let total_gain_loss = 0;
frm.doc.accounts.forEach((d) => {
@@ -80,7 +84,7 @@
frm.refresh_fields();
},
- make_jv : function(frm) {
+ make_jv: function (frm) {
let revaluation_journal = null;
let zero_balance_journal = null;
frappe.call({
@@ -88,66 +92,68 @@
doc: frm.doc,
freeze: true,
freeze_message: "Making Journal Entries...",
- callback: function(r){
+ callback: function (r) {
if (r.message) {
let response = r.message;
- if(response['revaluation_jv'] || response['zero_balance_jv']) {
+ if (response["revaluation_jv"] || response["zero_balance_jv"]) {
frappe.msgprint(__("Journals have been created"));
}
}
- }
+ },
});
- }
+ },
});
frappe.ui.form.on("Exchange Rate Revaluation Account", {
- new_exchange_rate: function(frm, cdt, cdn) {
+ new_exchange_rate: function (frm, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
- row.new_balance_in_base_currency = flt(row.new_exchange_rate * flt(row.balance_in_account_currency),
- precision("new_balance_in_base_currency", row));
+ row.new_balance_in_base_currency = flt(
+ row.new_exchange_rate * flt(row.balance_in_account_currency),
+ precision("new_balance_in_base_currency", row)
+ );
row.gain_loss = row.new_balance_in_base_currency - flt(row.balance_in_base_currency);
refresh_field("accounts");
frm.events.get_total_gain_loss(frm);
},
- account: function(frm, cdt, cdn) {
+ account: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
if (row.account) {
get_account_details(frm, cdt, cdn);
}
},
- party: function(frm, cdt, cdn) {
+ party: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
if (row.party && row.account) {
get_account_details(frm, cdt, cdn);
}
},
- accounts_remove: function(frm) {
+ accounts_remove: function (frm) {
frm.events.get_total_gain_loss(frm);
- }
+ },
});
-var get_account_details = function(frm, cdt, cdn) {
+var get_account_details = function (frm, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
- if(!frm.doc.company || !frm.doc.posting_date) {
+ if (!frm.doc.company || !frm.doc.posting_date) {
frappe.throw(__("Please select Company and Posting Date to getting entries"));
}
frappe.call({
method: "erpnext.accounts.doctype.exchange_rate_revaluation.exchange_rate_revaluation.get_account_details",
- args:{
+ args: {
account: row.account,
company: frm.doc.company,
posting_date: frm.doc.posting_date,
party_type: row.party_type,
party: row.party,
- rounding_loss_allowance: frm.doc.rounding_loss_allowance
+ rounding_loss_allowance: frm.doc.rounding_loss_allowance,
},
- callback: function(r){
+ callback: function (r) {
$.extend(row, r.message);
refresh_field("accounts");
frm.events.get_total_gain_loss(frm);
- }
+ },
});
};
diff --git a/erpnext/accounts/doctype/finance_book/finance_book.js b/erpnext/accounts/doctype/finance_book/finance_book.js
index 71191bb..ebe1d24 100644
--- a/erpnext/accounts/doctype/finance_book/finance_book.js
+++ b/erpnext/accounts/doctype/finance_book/finance_book.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Finance Book', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Finance Book", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
index 508b2ea..a44b52f 100644
--- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
+++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
@@ -1,17 +1,21 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('Fiscal Year', {
- onload: function(frm) {
- if(frm.doc.__islocal) {
- frm.set_value("year_start_date",
- frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1));
+frappe.ui.form.on("Fiscal Year", {
+ onload: function (frm) {
+ if (frm.doc.__islocal) {
+ frm.set_value(
+ "year_start_date",
+ frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)
+ );
}
},
- year_start_date: function(frm) {
+ year_start_date: function (frm) {
if (!frm.doc.is_short_year) {
- let year_end_date =
- frappe.datetime.add_days(frappe.datetime.add_months(frm.doc.year_start_date, 12), -1);
+ let year_end_date = frappe.datetime.add_days(
+ frappe.datetime.add_months(frm.doc.year_start_date, 12),
+ -1
+ );
frm.set_value("year_end_date", year_end_date);
}
},
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.js b/erpnext/accounts/doctype/gl_entry/gl_entry.js
index 4d2a513..7f81a2a 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.js
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.js
@@ -1,8 +1,8 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('GL Entry', {
- refresh: function(frm) {
- frm.page.btn_secondary.hide()
- }
+frappe.ui.form.on("GL Entry", {
+ refresh: function (frm) {
+ frm.page.btn_secondary.hide();
+ },
});
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js
index c80bf62..6d90c26 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js
@@ -1,47 +1,49 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Invoice Discounting', {
+frappe.ui.form.on("Invoice Discounting", {
setup: (frm) => {
frm.set_query("sales_invoice", "invoices", (doc) => {
return {
- "filters": {
- "docstatus": 1,
- "company": doc.company,
- "outstanding_amount": [">", 0]
+ filters: {
+ docstatus: 1,
+ company: doc.company,
+ outstanding_amount: [">", 0],
},
};
});
-
frm.events.filter_accounts("bank_account", frm, [["account_type", "=", "Bank"]]);
frm.events.filter_accounts("bank_charges_account", frm, [["root_type", "=", "Expense"]]);
frm.events.filter_accounts("short_term_loan", frm, [["root_type", "=", "Liability"]]);
- frm.events.filter_accounts("accounts_receivable_discounted", frm, [["account_type", "=", "Receivable"]]);
+ frm.events.filter_accounts("accounts_receivable_discounted", frm, [
+ ["account_type", "=", "Receivable"],
+ ]);
frm.events.filter_accounts("accounts_receivable_credit", frm, [["account_type", "=", "Receivable"]]);
frm.events.filter_accounts("accounts_receivable_unpaid", frm, [["account_type", "=", "Receivable"]]);
-
},
filter_accounts: (fieldname, frm, addl_filters) => {
let filters = [
["company", "=", frm.doc.company],
- ["is_group", "=", 0]
+ ["is_group", "=", 0],
];
- if(addl_filters){
- filters = $.merge(filters , addl_filters);
+ if (addl_filters) {
+ filters = $.merge(filters, addl_filters);
}
- frm.set_query(fieldname, () => { return { "filters": filters }; });
+ frm.set_query(fieldname, () => {
+ return { filters: filters };
+ });
},
- refresh_filters: (frm) =>{
- let invoice_accounts = Object.keys(frm.doc.invoices).map(function(key) {
+ refresh_filters: (frm) => {
+ let invoice_accounts = Object.keys(frm.doc.invoices).map(function (key) {
return frm.doc.invoices[key].debit_to;
});
let filters = [
["account_type", "=", "Receivable"],
- ["name", "not in", invoice_accounts]
+ ["name", "not in", invoice_accounts],
];
frm.events.filter_accounts("accounts_receivable_credit", frm, filters);
frm.events.filter_accounts("accounts_receivable_discounted", frm, filters);
@@ -52,19 +54,19 @@
frm.events.show_general_ledger(frm);
if (frm.doc.docstatus === 0) {
- frm.add_custom_button(__('Get Invoices'), function() {
+ frm.add_custom_button(__("Get Invoices"), function () {
frm.events.get_invoices(frm);
});
}
if (frm.doc.docstatus === 1 && frm.doc.status !== "Settled") {
if (frm.doc.status == "Sanctioned") {
- frm.add_custom_button(__('Disburse Loan'), function() {
+ frm.add_custom_button(__("Disburse Loan"), function () {
frm.events.create_disbursement_entry(frm);
}).addClass("btn-primary");
}
if (frm.doc.status == "Disbursed") {
- frm.add_custom_button(__('Close Loan'), function() {
+ frm.add_custom_button(__("Close Loan"), function () {
frm.events.close_loan(frm);
}).addClass("btn-primary");
}
@@ -92,119 +94,121 @@
calculate_total_amount: (frm) => {
let total_amount = 0.0;
- for (let row of (frm.doc.invoices || [])) {
+ for (let row of frm.doc.invoices || []) {
total_amount += flt(row.outstanding_amount);
}
frm.set_value("total_amount", total_amount);
},
get_invoices: (frm) => {
var d = new frappe.ui.Dialog({
- title: __('Get Invoices based on Filters'),
+ title: __("Get Invoices based on Filters"),
fields: [
{
- "label": "Customer",
- "fieldname": "customer",
- "fieldtype": "Link",
- "options": "Customer"
+ label: "Customer",
+ fieldname: "customer",
+ fieldtype: "Link",
+ options: "Customer",
},
{
- "label": "From Date",
- "fieldname": "from_date",
- "fieldtype": "Date"
+ label: "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
},
{
- "label": "To Date",
- "fieldname": "to_date",
- "fieldtype": "Date"
+ label: "To Date",
+ fieldname: "to_date",
+ fieldtype: "Date",
},
{
- "fieldname": "col_break",
- "fieldtype": "Column Break",
+ fieldname: "col_break",
+ fieldtype: "Column Break",
},
{
- "label": "Min Amount",
- "fieldname": "min_amount",
- "fieldtype": "Currency"
+ label: "Min Amount",
+ fieldname: "min_amount",
+ fieldtype: "Currency",
},
{
- "label": "Max Amount",
- "fieldname": "max_amount",
- "fieldtype": "Currency"
- }
+ label: "Max Amount",
+ fieldname: "max_amount",
+ fieldtype: "Currency",
+ },
],
- primary_action: function() {
+ primary_action: function () {
var data = d.get_values();
frappe.call({
method: "erpnext.accounts.doctype.invoice_discounting.invoice_discounting.get_invoices",
args: {
- filters: data
+ filters: data,
},
- callback: function(r) {
- if(!r.exc) {
+ callback: function (r) {
+ if (!r.exc) {
d.hide();
- $.each(r.message, function(i, v) {
- frm.doc.invoices = frm.doc.invoices.filter(row => row.sales_invoice);
+ $.each(r.message, function (i, v) {
+ frm.doc.invoices = frm.doc.invoices.filter((row) => row.sales_invoice);
let row = frm.add_child("invoices");
$.extend(row, v);
frm.events.refresh_filters(frm);
});
refresh_field("invoices");
}
- }
+ },
});
},
- primary_action_label: __('Get Invoices')
+ primary_action_label: __("Get Invoices"),
});
d.show();
},
create_disbursement_entry: (frm) => {
frappe.call({
- method:"create_disbursement_entry",
+ method: "create_disbursement_entry",
doc: frm.doc,
- callback: function(r) {
- if(!r.exc){
+ callback: function (r) {
+ if (!r.exc) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
}
- }
+ },
});
-
},
close_loan: (frm) => {
frappe.call({
- method:"close_loan",
+ method: "close_loan",
doc: frm.doc,
- callback: function(r) {
- if(!r.exc){
+ callback: function (r) {
+ if (!r.exc) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
}
- }
+ },
});
-
},
show_general_ledger: (frm) => {
- if(frm.doc.docstatus > 0) {
- cur_frm.add_custom_button(__('Accounting Ledger'), function() {
- frappe.route_options = {
- voucher_no: frm.doc.name,
- from_date: frm.doc.posting_date,
- to_date: moment(frm.doc.modified).format('YYYY-MM-DD'),
- company: frm.doc.company,
- group_by: "Group by Voucher (Consolidated)",
- show_cancelled_entries: frm.doc.docstatus === 2
- };
- frappe.set_route("query-report", "General Ledger");
- }, __("View"));
+ if (frm.doc.docstatus > 0) {
+ cur_frm.add_custom_button(
+ __("Accounting Ledger"),
+ function () {
+ frappe.route_options = {
+ voucher_no: frm.doc.name,
+ from_date: frm.doc.posting_date,
+ to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+ company: frm.doc.company,
+ group_by: "Group by Voucher (Consolidated)",
+ show_cancelled_entries: frm.doc.docstatus === 2,
+ };
+ frappe.set_route("query-report", "General Ledger");
+ },
+ __("View")
+ );
}
- }
+ },
});
-frappe.ui.form.on('Discounted Invoice', {
+frappe.ui.form.on("Discounted Invoice", {
sales_invoice: (frm) => {
frm.events.calculate_total_amount(frm);
frm.events.refresh_filters(frm);
@@ -212,5 +216,5 @@
invoices_remove: (frm) => {
frm.events.calculate_total_amount(frm);
frm.events.refresh_filters(frm);
- }
+ },
});
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js
index 4895efc..0b08e39 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js
@@ -1,21 +1,16 @@
-frappe.listview_settings['Invoice Discounting'] = {
+frappe.listview_settings["Invoice Discounting"] = {
add_fields: ["status"],
- get_indicator: function(doc)
- {
- if(doc.status == "Draft") {
+ get_indicator: function (doc) {
+ if (doc.status == "Draft") {
return [__("Draft"), "red", "status,=,Draft"];
- }
- else if(doc.status == "Sanctioned") {
+ } else if (doc.status == "Sanctioned") {
return [__("Sanctioned"), "green", "status,=,Sanctioned"];
- }
- else if(doc.status == "Disbursed") {
+ } else if (doc.status == "Disbursed") {
return [__("Disbursed"), "blue", "status,=,Disbursed"];
- }
- else if(doc.status == "Settled") {
+ } else if (doc.status == "Settled") {
return [__("Settled"), "orange", "status,=,Settled"];
- }
- else if(doc.status == "Canceled") {
+ } else if (doc.status == "Canceled") {
return [__("Canceled"), "red", "status,=,Canceled"];
}
- }
+ },
};
diff --git a/erpnext/accounts/doctype/item_tax_template/item_tax_template.js b/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
index e921a0d..b608ccd 100644
--- a/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
+++ b/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
@@ -1,27 +1,49 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Item Tax Template', {
- setup: function(frm) {
- frm.set_query("tax_type", "taxes", function(doc) {
+frappe.ui.form.on("Item Tax Template", {
+ setup: function (frm) {
+ frm.set_query("tax_type", "taxes", function (doc) {
return {
filters: [
- ['Account', 'company', '=', frm.doc.company],
- ['Account', 'is_group', '=', 0],
- ['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Income Account', 'Expense Account', 'Expenses Included In Valuation']]
- ]
- }
+ ["Account", "company", "=", frm.doc.company],
+ ["Account", "is_group", "=", 0],
+ [
+ "Account",
+ "account_type",
+ "in",
+ [
+ "Tax",
+ "Chargeable",
+ "Income Account",
+ "Expense Account",
+ "Expenses Included In Valuation",
+ ],
+ ],
+ ],
+ };
});
},
company: function (frm) {
- frm.set_query("tax_type", "taxes", function(doc) {
+ frm.set_query("tax_type", "taxes", function (doc) {
return {
filters: [
- ['Account', 'company', '=', frm.doc.company],
- ['Account', 'is_group', '=', 0],
- ['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Income Account', 'Expense Account', 'Expenses Included In Valuation']]
- ]
- }
+ ["Account", "company", "=", frm.doc.company],
+ ["Account", "is_group", "=", 0],
+ [
+ "Account",
+ "account_type",
+ "in",
+ [
+ "Tax",
+ "Chargeable",
+ "Income Account",
+ "Expense Account",
+ "Expenses Included In Valuation",
+ ],
+ ],
+ ],
+ };
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index 72469ea..f6d35fe 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -4,58 +4,82 @@
frappe.provide("erpnext.accounts");
frappe.provide("erpnext.journal_entry");
-
frappe.ui.form.on("Journal Entry", {
- setup: function(frm) {
+ setup: function (frm) {
frm.add_fetch("bank_account", "account", "account");
- frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', "Repost Payment Ledger", 'Asset', 'Asset Movement', 'Asset Depreciation Schedule', "Repost Accounting Ledger", "Unreconcile Payment", "Unreconcile Payment Entries", "Bank Transaction"];
+ frm.ignore_doctypes_on_cancel_all = [
+ "Sales Invoice",
+ "Purchase Invoice",
+ "Journal Entry",
+ "Repost Payment Ledger",
+ "Asset",
+ "Asset Movement",
+ "Asset Depreciation Schedule",
+ "Repost Accounting Ledger",
+ "Unreconcile Payment",
+ "Unreconcile Payment Entries",
+ "Bank Transaction",
+ ];
},
- refresh: function(frm) {
+ refresh: function (frm) {
erpnext.toggle_naming_series();
- if (frm.doc.repost_required && frm.doc.docstatus===1) {
- frm.set_intro(__("Accounting entries for this Journal Entry need to be reposted. Please click on 'Repost' button to update."));
- frm.add_custom_button(__('Repost Accounting Entries'),
- () => {
- frm.call({
- doc: frm.doc,
- method: 'repost_accounting_entries',
- freeze: true,
- freeze_message: __('Reposting...'),
- callback: (r) => {
- if (!r.exc) {
- frappe.msgprint(__('Accounting Entries are reposted.'));
- frm.refresh();
- }
+ if (frm.doc.repost_required && frm.doc.docstatus === 1) {
+ frm.set_intro(
+ __(
+ "Accounting entries for this Journal Entry need to be reposted. Please click on 'Repost' button to update."
+ )
+ );
+ frm.add_custom_button(__("Repost Accounting Entries"), () => {
+ frm.call({
+ doc: frm.doc,
+ method: "repost_accounting_entries",
+ freeze: true,
+ freeze_message: __("Reposting..."),
+ callback: (r) => {
+ if (!r.exc) {
+ frappe.msgprint(__("Accounting Entries are reposted."));
+ frm.refresh();
}
- });
- }).removeClass('btn-default').addClass('btn-warning');
+ },
+ });
+ })
+ .removeClass("btn-default")
+ .addClass("btn-warning");
}
- if(frm.doc.docstatus > 0) {
- frm.add_custom_button(__('Ledger'), function() {
- frappe.route_options = {
- "voucher_no": frm.doc.name,
- "from_date": frm.doc.posting_date,
- "to_date": moment(frm.doc.modified).format('YYYY-MM-DD'),
- "company": frm.doc.company,
- "finance_book": frm.doc.finance_book,
- "group_by": '',
- "show_cancelled_entries": frm.doc.docstatus === 2
- };
- frappe.set_route("query-report", "General Ledger");
- }, __('View'));
+ if (frm.doc.docstatus > 0) {
+ frm.add_custom_button(
+ __("Ledger"),
+ function () {
+ frappe.route_options = {
+ voucher_no: frm.doc.name,
+ from_date: frm.doc.posting_date,
+ to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+ company: frm.doc.company,
+ finance_book: frm.doc.finance_book,
+ group_by: "",
+ show_cancelled_entries: frm.doc.docstatus === 2,
+ };
+ frappe.set_route("query-report", "General Ledger");
+ },
+ __("View")
+ );
}
- if(frm.doc.docstatus==1) {
- frm.add_custom_button(__('Reverse Journal Entry'), function() {
- return erpnext.journal_entry.reverse_journal_entry(frm);
- }, __('Actions'));
+ if (frm.doc.docstatus == 1) {
+ frm.add_custom_button(
+ __("Reverse Journal Entry"),
+ function () {
+ return erpnext.journal_entry.reverse_journal_entry(frm);
+ },
+ __("Actions")
+ );
}
if (frm.doc.__islocal) {
- frm.add_custom_button(__('Quick Entry'), function() {
+ frm.add_custom_button(__("Quick Entry"), function () {
return erpnext.journal_entry.quick_entry(frm);
});
}
@@ -63,52 +87,63 @@
// hide /unhide fields based on currency
erpnext.journal_entry.toggle_fields_based_on_currency(frm);
- if ((frm.doc.voucher_type == "Inter Company Journal Entry") && (frm.doc.docstatus == 1) && (!frm.doc.inter_company_journal_entry_reference)) {
- frm.add_custom_button(__("Create Inter Company Journal Entry"),
- function() {
+ if (
+ frm.doc.voucher_type == "Inter Company Journal Entry" &&
+ frm.doc.docstatus == 1 &&
+ !frm.doc.inter_company_journal_entry_reference
+ ) {
+ frm.add_custom_button(
+ __("Create Inter Company Journal Entry"),
+ function () {
frm.trigger("make_inter_company_journal_entry");
- }, __('Make'));
+ },
+ __("Make")
+ );
}
erpnext.accounts.unreconcile_payment.add_unreconcile_btn(frm);
},
- before_save: function(frm) {
- if ((frm.doc.docstatus == 0) && (!frm.doc.is_system_generated)) {
- let payment_entry_references = frm.doc.accounts.filter(elem => (elem.reference_type == "Payment Entry"));
+ before_save: function (frm) {
+ if (frm.doc.docstatus == 0 && !frm.doc.is_system_generated) {
+ let payment_entry_references = frm.doc.accounts.filter(
+ (elem) => elem.reference_type == "Payment Entry"
+ );
if (payment_entry_references.length > 0) {
- let rows = payment_entry_references.map(x => "#"+x.idx);
- frappe.throw(__("Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually.", [frappe.utils.comma_and(rows)]));
+ let rows = payment_entry_references.map((x) => "#" + x.idx);
+ frappe.throw(
+ __("Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually.", [
+ frappe.utils.comma_and(rows),
+ ])
+ );
}
}
},
- make_inter_company_journal_entry: function(frm) {
+ make_inter_company_journal_entry: function (frm) {
var d = new frappe.ui.Dialog({
title: __("Select Company"),
fields: [
{
- 'fieldname': 'company',
- 'fieldtype': 'Link',
- 'label': __('Company'),
- 'options': 'Company',
- "get_query": function () {
+ fieldname: "company",
+ fieldtype: "Link",
+ label: __("Company"),
+ options: "Company",
+ get_query: function () {
return {
- filters: [
- ["Company", "name", "!=", frm.doc.company]
- ]
+ filters: [["Company", "name", "!=", frm.doc.company]],
};
},
- 'reqd': 1
- }
+ reqd: 1,
+ },
],
});
- d.set_primary_action(__('Create'), function() {
+ d.set_primary_action(__("Create"), function () {
d.hide();
var args = d.get_values();
frappe.call({
args: {
- "name": frm.doc.name,
- "voucher_type": frm.doc.voucher_type,
- "company": args.company
+ name: frm.doc.name,
+ voucher_type: frm.doc.voucher_type,
+ company: args.company,
},
method: "erpnext.accounts.doctype.journal_entry.journal_entry.make_inter_company_journal_entry",
callback: function (r) {
@@ -116,96 +151,101 @@
var doc = frappe.model.sync(r.message)[0];
frappe.set_route("Form", doc.doctype, doc.name);
}
- }
+ },
});
});
d.show();
},
- multi_currency: function(frm) {
+ multi_currency: function (frm) {
erpnext.journal_entry.toggle_fields_based_on_currency(frm);
},
- posting_date: function(frm) {
- if(!frm.doc.multi_currency || !frm.doc.posting_date) return;
+ posting_date: function (frm) {
+ if (!frm.doc.multi_currency || !frm.doc.posting_date) return;
- $.each(frm.doc.accounts || [], function(i, row) {
+ $.each(frm.doc.accounts || [], function (i, row) {
erpnext.journal_entry.set_exchange_rate(frm, row.doctype, row.name);
- })
+ });
},
- company: function(frm) {
+ company: function (frm) {
frappe.call({
method: "frappe.client.get_value",
args: {
doctype: "Company",
- filters: {"name": frm.doc.company},
- fieldname: "cost_center"
+ filters: { name: frm.doc.company },
+ fieldname: "cost_center",
},
- callback: function(r){
- if(r.message){
- $.each(frm.doc.accounts || [], function(i, jvd) {
+ callback: function (r) {
+ if (r.message) {
+ $.each(frm.doc.accounts || [], function (i, jvd) {
frappe.model.set_value(jvd.doctype, jvd.name, "cost_center", r.message.cost_center);
});
}
- }
+ },
});
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
- voucher_type: function(frm){
+ voucher_type: function (frm) {
+ if (!frm.doc.company) return null;
- if(!frm.doc.company) return null;
-
- if((!(frm.doc.accounts || []).length) || ((frm.doc.accounts || []).length === 1 && !frm.doc.accounts[0].account)) {
- if(in_list(["Bank Entry", "Cash Entry"], frm.doc.voucher_type)) {
+ if (
+ !(frm.doc.accounts || []).length ||
+ ((frm.doc.accounts || []).length === 1 && !frm.doc.accounts[0].account)
+ ) {
+ if (in_list(["Bank Entry", "Cash Entry"], frm.doc.voucher_type)) {
return frappe.call({
type: "GET",
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_default_bank_cash_account",
args: {
- "account_type": (frm.doc.voucher_type=="Bank Entry" ?
- "Bank" : (frm.doc.voucher_type=="Cash Entry" ? "Cash" : null)),
- "company": frm.doc.company
+ account_type:
+ frm.doc.voucher_type == "Bank Entry"
+ ? "Bank"
+ : frm.doc.voucher_type == "Cash Entry"
+ ? "Cash"
+ : null,
+ company: frm.doc.company,
},
- callback: function(r) {
- if(r.message) {
+ callback: function (r) {
+ if (r.message) {
// If default company bank account not set
- if(!$.isEmptyObject(r.message)){
+ if (!$.isEmptyObject(r.message)) {
update_jv_details(frm.doc, [r.message]);
}
}
- }
+ },
});
}
}
},
- from_template: function(frm){
- if (frm.doc.from_template){
- frappe.db.get_doc("Journal Entry Template", frm.doc.from_template)
- .then((doc) => {
- frappe.model.clear_table(frm.doc, "accounts");
- frm.set_value({
- "company": doc.company,
- "voucher_type": doc.voucher_type,
- "naming_series": doc.naming_series,
- "is_opening": doc.is_opening,
- "multi_currency": doc.multi_currency
- })
- update_jv_details(frm.doc, doc.accounts);
+ from_template: function (frm) {
+ if (frm.doc.from_template) {
+ frappe.db.get_doc("Journal Entry Template", frm.doc.from_template).then((doc) => {
+ frappe.model.clear_table(frm.doc, "accounts");
+ frm.set_value({
+ company: doc.company,
+ voucher_type: doc.voucher_type,
+ naming_series: doc.naming_series,
+ is_opening: doc.is_opening,
+ multi_currency: doc.multi_currency,
});
+ update_jv_details(frm.doc, doc.accounts);
+ });
}
- }
+ },
});
-var update_jv_details = function(doc, r) {
- $.each(r, function(i, d) {
+var update_jv_details = function (doc, r) {
+ $.each(r, function (i, d) {
var row = frappe.model.add_child(doc, "Journal Entry Account", "accounts");
- frappe.model.set_value(row.doctype, row.name, "account", d.account)
+ frappe.model.set_value(row.doctype, row.name, "account", d.account);
});
refresh_field("accounts");
-}
+};
erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Controller {
onload() {
@@ -220,69 +260,67 @@
load_defaults() {
//this.frm.show_print_first = true;
- if(this.frm.doc.__islocal && this.frm.doc.company) {
+ if (this.frm.doc.__islocal && this.frm.doc.company) {
frappe.model.set_default_values(this.frm.doc);
- $.each(this.frm.doc.accounts || [], function(i, jvd) {
+ $.each(this.frm.doc.accounts || [], function (i, jvd) {
frappe.model.set_default_values(jvd);
});
var posting_date = this.frm.doc.posting_date;
- if(!this.frm.doc.amended_from) this.frm.set_value('posting_date', posting_date || frappe.datetime.get_today());
+ if (!this.frm.doc.amended_from)
+ this.frm.set_value("posting_date", posting_date || frappe.datetime.get_today());
}
}
setup_queries() {
var me = this;
- me.frm.set_query("account", "accounts", function(doc, cdt, cdn) {
+ me.frm.set_query("account", "accounts", function (doc, cdt, cdn) {
return erpnext.journal_entry.account_query(me.frm);
});
- me.frm.set_query("party_type", "accounts", function(doc, cdt, cdn) {
+ me.frm.set_query("party_type", "accounts", function (doc, cdt, cdn) {
const row = locals[cdt][cdn];
return {
query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
filters: {
- 'account': row.account
- }
- }
+ account: row.account,
+ },
+ };
});
- me.frm.set_query("reference_name", "accounts", function(doc, cdt, cdn) {
+ me.frm.set_query("reference_name", "accounts", function (doc, cdt, cdn) {
var jvd = frappe.get_doc(cdt, cdn);
// journal entry
- if(jvd.reference_type==="Journal Entry") {
+ if (jvd.reference_type === "Journal Entry") {
frappe.model.validate_missing(jvd, "account");
return {
query: "erpnext.accounts.doctype.journal_entry.journal_entry.get_against_jv",
filters: {
account: jvd.account,
- party: jvd.party
- }
+ party: jvd.party,
+ },
};
}
var out = {
- filters: [
- [jvd.reference_type, "docstatus", "=", 1]
- ]
+ filters: [[jvd.reference_type, "docstatus", "=", 1]],
};
- if(in_list(["Sales Invoice", "Purchase Invoice"], jvd.reference_type)) {
+ if (in_list(["Sales Invoice", "Purchase Invoice"], jvd.reference_type)) {
out.filters.push([jvd.reference_type, "outstanding_amount", "!=", 0]);
// Filter by cost center
- if(jvd.cost_center) {
+ if (jvd.cost_center) {
out.filters.push([jvd.reference_type, "cost_center", "in", ["", jvd.cost_center]]);
}
// account filter
frappe.model.validate_missing(jvd, "account");
- var party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
+ var party_account_field = jvd.reference_type === "Sales Invoice" ? "debit_to" : "credit_to";
out.filters.push([jvd.reference_type, party_account_field, "=", jvd.account]);
-
}
- if(in_list(["Sales Order", "Purchase Order"], jvd.reference_type)) {
+ if (in_list(["Sales Order", "Purchase Order"], jvd.reference_type)) {
// party_type and party mandatory
frappe.model.validate_missing(jvd, "party_type");
frappe.model.validate_missing(jvd, "party");
@@ -290,11 +328,11 @@
out.filters.push([jvd.reference_type, "per_billed", "<", 100]);
}
- if(jvd.party_type && jvd.party) {
+ if (jvd.party_type && jvd.party) {
let party_field = "";
- if(jvd.reference_type.indexOf("Sales")===0) {
+ if (jvd.reference_type.indexOf("Sales") === 0) {
party_field = "customer";
- } else if (jvd.reference_type.indexOf("Purchase")===0) {
+ } else if (jvd.reference_type.indexOf("Purchase") === 0) {
party_field = "supplier";
}
@@ -305,51 +343,49 @@
return out;
});
-
-
}
reference_name(doc, cdt, cdn) {
var d = frappe.get_doc(cdt, cdn);
- if(d.reference_name) {
- if (d.reference_type==="Purchase Invoice" && !flt(d.debit)) {
- this.get_outstanding('Purchase Invoice', d.reference_name, doc.company, d);
- } else if (d.reference_type==="Sales Invoice" && !flt(d.credit)) {
- this.get_outstanding('Sales Invoice', d.reference_name, doc.company, d);
- } else if (d.reference_type==="Journal Entry" && !flt(d.credit) && !flt(d.debit)) {
- this.get_outstanding('Journal Entry', d.reference_name, doc.company, d);
+ if (d.reference_name) {
+ if (d.reference_type === "Purchase Invoice" && !flt(d.debit)) {
+ this.get_outstanding("Purchase Invoice", d.reference_name, doc.company, d);
+ } else if (d.reference_type === "Sales Invoice" && !flt(d.credit)) {
+ this.get_outstanding("Sales Invoice", d.reference_name, doc.company, d);
+ } else if (d.reference_type === "Journal Entry" && !flt(d.credit) && !flt(d.debit)) {
+ this.get_outstanding("Journal Entry", d.reference_name, doc.company, d);
}
}
}
get_outstanding(doctype, docname, company, child) {
var args = {
- "doctype": doctype,
- "docname": docname,
- "party": child.party,
- "account": child.account,
- "account_currency": child.account_currency,
- "company": company
- }
+ doctype: doctype,
+ docname: docname,
+ party: child.party,
+ account: child.account,
+ account_currency: child.account_currency,
+ company: company,
+ };
return frappe.call({
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_outstanding",
- args: { args: args},
- callback: function(r) {
- if(r.message) {
- $.each(r.message, function(field, value) {
+ args: { args: args },
+ callback: function (r) {
+ if (r.message) {
+ $.each(r.message, function (field, value) {
frappe.model.set_value(child.doctype, child.name, field, value);
- })
+ });
}
- }
+ },
});
}
accounts_add(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
- $.each(doc.accounts, function(i, d) {
- if(d.account && d.party && d.party_type) {
+ $.each(doc.accounts, function (i, d) {
+ if (d.account && d.party && d.party_type) {
row.account = d.account;
row.party = d.party;
row.party_type = d.party_type;
@@ -357,8 +393,8 @@
});
// set difference
- if(doc.difference) {
- if(doc.difference > 0) {
+ if (doc.difference) {
+ if (doc.difference > 0) {
row.credit_in_account_currency = doc.difference;
row.credit = doc.difference;
} else {
@@ -368,41 +404,43 @@
}
cur_frm.cscript.update_totals(doc);
- erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'accounts');
+ erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "accounts");
}
-
};
cur_frm.script_manager.make(erpnext.accounts.JournalEntry);
-cur_frm.cscript.update_totals = function(doc) {
- var td=0.0; var tc =0.0;
+cur_frm.cscript.update_totals = function (doc) {
+ var td = 0.0;
+ var tc = 0.0;
var accounts = doc.accounts || [];
- for(var i in accounts) {
+ for (var i in accounts) {
td += flt(accounts[i].debit, precision("debit", accounts[i]));
tc += flt(accounts[i].credit, precision("credit", accounts[i]));
}
doc = locals[doc.doctype][doc.name];
doc.total_debit = td;
doc.total_credit = tc;
- doc.difference = flt((td - tc), precision("difference"));
- refresh_many(['total_debit','total_credit','difference']);
-}
+ doc.difference = flt(td - tc, precision("difference"));
+ refresh_many(["total_debit", "total_credit", "difference"]);
+};
-cur_frm.cscript.get_balance = function(doc,dt,dn) {
+cur_frm.cscript.get_balance = function (doc, dt, dn) {
cur_frm.cscript.update_totals(doc);
- cur_frm.call('get_balance', null, () => { cur_frm.refresh(); });
-}
+ cur_frm.call("get_balance", null, () => {
+ cur_frm.refresh();
+ });
+};
-cur_frm.cscript.validate = function(doc,cdt,cdn) {
+cur_frm.cscript.validate = function (doc, cdt, cdn) {
cur_frm.cscript.update_totals(doc);
-}
+};
frappe.ui.form.on("Journal Entry Account", {
- party: function(frm, cdt, cdn) {
+ party: function (frm, cdt, cdn) {
var d = frappe.get_doc(cdt, cdn);
- if(!d.account && d.party_type && d.party) {
- if(!frm.doc.company) frappe.throw(__("Please select Company"));
+ if (!d.account && d.party_type && d.party) {
+ if (!frm.doc.company) frappe.throw(__("Please select Company"));
return frm.call({
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_party_account_and_currency",
child: d,
@@ -410,89 +448,97 @@
company: frm.doc.company,
party_type: d.party_type,
party: d.party,
- }
+ },
});
}
},
- cost_center: function(frm, dt, dn) {
+ cost_center: function (frm, dt, dn) {
erpnext.journal_entry.set_account_details(frm, dt, dn);
},
- account: function(frm, dt, dn) {
+ account: function (frm, dt, dn) {
erpnext.journal_entry.set_account_details(frm, dt, dn);
},
- debit_in_account_currency: function(frm, cdt, cdn) {
+ debit_in_account_currency: function (frm, cdt, cdn) {
erpnext.journal_entry.set_exchange_rate(frm, cdt, cdn);
},
- credit_in_account_currency: function(frm, cdt, cdn) {
+ credit_in_account_currency: function (frm, cdt, cdn) {
erpnext.journal_entry.set_exchange_rate(frm, cdt, cdn);
},
- debit: function(frm, dt, dn) {
+ debit: function (frm, dt, dn) {
cur_frm.cscript.update_totals(frm.doc);
},
- credit: function(frm, dt, dn) {
+ credit: function (frm, dt, dn) {
cur_frm.cscript.update_totals(frm.doc);
},
- exchange_rate: function(frm, cdt, cdn) {
+ exchange_rate: function (frm, cdt, cdn) {
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
var row = locals[cdt][cdn];
- if(row.account_currency == company_currency || !frm.doc.multi_currency) {
+ if (row.account_currency == company_currency || !frm.doc.multi_currency) {
frappe.model.set_value(cdt, cdn, "exchange_rate", 1);
}
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
- }
-})
+ },
+});
-frappe.ui.form.on("Journal Entry Account", "accounts_remove", function(frm) {
+frappe.ui.form.on("Journal Entry Account", "accounts_remove", function (frm) {
cur_frm.cscript.update_totals(frm.doc);
});
$.extend(erpnext.journal_entry, {
- toggle_fields_based_on_currency: function(frm) {
+ toggle_fields_based_on_currency: function (frm) {
var fields = ["currency_section", "account_currency", "exchange_rate", "debit", "credit"];
var grid = frm.get_field("accounts").grid;
- if(grid) grid.set_column_disp(fields, frm.doc.multi_currency);
+ if (grid) grid.set_column_disp(fields, frm.doc.multi_currency);
// dynamic label
var field_label_map = {
- "debit_in_account_currency": "Debit",
- "credit_in_account_currency": "Credit"
+ debit_in_account_currency: "Debit",
+ credit_in_account_currency: "Credit",
};
$.each(field_label_map, function (fieldname, label) {
frm.fields_dict.accounts.grid.update_docfield_property(
fieldname,
- 'label',
- frm.doc.multi_currency ? (label + " in Account Currency") : label
+ "label",
+ frm.doc.multi_currency ? label + " in Account Currency" : label
);
- })
+ });
},
- set_debit_credit_in_company_currency: function(frm, cdt, cdn) {
+ set_debit_credit_in_company_currency: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
- frappe.model.set_value(cdt, cdn, "debit",
- flt(flt(row.debit_in_account_currency)*row.exchange_rate, precision("debit", row)));
+ frappe.model.set_value(
+ cdt,
+ cdn,
+ "debit",
+ flt(flt(row.debit_in_account_currency) * row.exchange_rate, precision("debit", row))
+ );
- frappe.model.set_value(cdt, cdn, "credit",
- flt(flt(row.credit_in_account_currency)*row.exchange_rate, precision("credit", row)));
+ frappe.model.set_value(
+ cdt,
+ cdn,
+ "credit",
+ flt(flt(row.credit_in_account_currency) * row.exchange_rate, precision("credit", row))
+ );
cur_frm.cscript.update_totals(frm.doc);
},
- set_exchange_rate: function(frm, cdt, cdn) {
+ set_exchange_rate: function (frm, cdt, cdn) {
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
var row = locals[cdt][cdn];
- if(row.account_currency == company_currency || !frm.doc.multi_currency) {
+ if (row.account_currency == company_currency || !frm.doc.multi_currency) {
row.exchange_rate = 1;
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
} else if (!row.exchange_rate || row.exchange_rate == 1 || row.account_type == "Bank") {
@@ -507,50 +553,70 @@
reference_name: cstr(row.reference_name),
debit: flt(row.debit_in_account_currency),
credit: flt(row.credit_in_account_currency),
- exchange_rate: row.exchange_rate
+ exchange_rate: row.exchange_rate,
},
- callback: function(r) {
- if(r.message) {
+ callback: function (r) {
+ if (r.message) {
row.exchange_rate = r.message;
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
}
- }
- })
+ },
+ });
} else {
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
}
refresh_field("exchange_rate", cdn, "accounts");
},
- quick_entry: function(frm) {
+ quick_entry: function (frm) {
var naming_series_options = frm.fields_dict.naming_series.df.options;
- var naming_series_default = frm.fields_dict.naming_series.df.default || naming_series_options.split("\n")[0];
+ var naming_series_default =
+ frm.fields_dict.naming_series.df.default || naming_series_options.split("\n")[0];
var dialog = new frappe.ui.Dialog({
title: __("Quick Journal Entry"),
fields: [
- {fieldtype: "Currency", fieldname: "debit", label: __("Amount"), reqd: 1},
- {fieldtype: "Link", fieldname: "debit_account", label: __("Debit Account"), reqd: 1,
+ { fieldtype: "Currency", fieldname: "debit", label: __("Amount"), reqd: 1 },
+ {
+ fieldtype: "Link",
+ fieldname: "debit_account",
+ label: __("Debit Account"),
+ reqd: 1,
options: "Account",
- get_query: function() {
+ get_query: function () {
return erpnext.journal_entry.account_query(frm);
- }
+ },
},
- {fieldtype: "Link", fieldname: "credit_account", label: __("Credit Account"), reqd: 1,
+ {
+ fieldtype: "Link",
+ fieldname: "credit_account",
+ label: __("Credit Account"),
+ reqd: 1,
options: "Account",
- get_query: function() {
+ get_query: function () {
return erpnext.journal_entry.account_query(frm);
- }
+ },
},
- {fieldtype: "Date", fieldname: "posting_date", label: __("Date"), reqd: 1,
- default: frm.doc.posting_date},
- {fieldtype: "Small Text", fieldname: "user_remark", label: __("User Remark")},
- {fieldtype: "Select", fieldname: "naming_series", label: __("Series"), reqd: 1,
- options: naming_series_options, default: naming_series_default},
- ]
+ {
+ fieldtype: "Date",
+ fieldname: "posting_date",
+ label: __("Date"),
+ reqd: 1,
+ default: frm.doc.posting_date,
+ },
+ { fieldtype: "Small Text", fieldname: "user_remark", label: __("User Remark") },
+ {
+ fieldtype: "Select",
+ fieldname: "naming_series",
+ label: __("Series"),
+ reqd: 1,
+ options: naming_series_options,
+ default: naming_series_default,
+ },
+ ],
});
- dialog.set_primary_action(__("Save"), function() {
+ dialog.set_primary_action(__("Save"), function () {
var btn = this;
var values = dialog.get_values();
@@ -567,11 +633,21 @@
var debit_row = frm.fields_dict.accounts.grid.add_new_row();
frappe.model.set_value(debit_row.doctype, debit_row.name, "account", values.debit_account);
- frappe.model.set_value(debit_row.doctype, debit_row.name, "debit_in_account_currency", values.debit);
+ frappe.model.set_value(
+ debit_row.doctype,
+ debit_row.name,
+ "debit_in_account_currency",
+ values.debit
+ );
var credit_row = frm.fields_dict.accounts.grid.add_new_row();
frappe.model.set_value(credit_row.doctype, credit_row.name, "account", values.credit_account);
- frappe.model.set_value(credit_row.doctype, credit_row.name, "credit_in_account_currency", values.debit);
+ frappe.model.set_value(
+ credit_row.doctype,
+ credit_row.name,
+ "credit_in_account_currency",
+ values.debit
+ );
frm.save();
@@ -581,33 +657,36 @@
dialog.show();
},
- account_query: function(frm) {
+ account_query: function (frm) {
var filters = {
company: frm.doc.company,
- is_group: 0
+ is_group: 0,
};
- if(!frm.doc.multi_currency) {
+ if (!frm.doc.multi_currency) {
$.extend(filters, {
- account_currency: ['in', [frappe.get_doc(":Company", frm.doc.company).default_currency, null]]
+ account_currency: [
+ "in",
+ [frappe.get_doc(":Company", frm.doc.company).default_currency, null],
+ ],
});
}
return { filters: filters };
},
- reverse_journal_entry: function() {
+ reverse_journal_entry: function () {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.journal_entry.journal_entry.make_reverse_journal_entry",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
},
});
$.extend(erpnext.journal_entry, {
- set_account_details: function(frm, dt, dn) {
+ set_account_details: function (frm, dt, dn) {
var d = locals[dt][dn];
- if(d.account) {
- if(!frm.doc.company) frappe.throw(__("Please select Company first"));
- if(!frm.doc.posting_date) frappe.throw(__("Please select Posting Date first"));
+ if (d.account) {
+ if (!frm.doc.company) frappe.throw(__("Please select Company first"));
+ if (!frm.doc.posting_date) frappe.throw(__("Please select Posting Date first"));
return frappe.call({
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_account_details_and_party_type",
@@ -619,13 +698,13 @@
credit: flt(d.credit_in_account_currency),
exchange_rate: d.exchange_rate,
},
- callback: function(r) {
- if(r.message) {
+ callback: function (r) {
+ if (r.message) {
$.extend(d, r.message);
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, dt, dn);
- refresh_field('accounts');
+ refresh_field("accounts");
}
- }
+ },
});
}
},
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry_list.js b/erpnext/accounts/doctype/journal_entry/journal_entry_list.js
index acd17cb..4ef7b99 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry_list.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry_list.js
@@ -1,18 +1,8 @@
frappe.listview_settings["Journal Entry"] = {
- add_fields: [
- "voucher_type",
- "posting_date",
- "total_debit",
- "company",
- "user_remark",
- ],
+ add_fields: ["voucher_type", "posting_date", "total_debit", "company", "user_remark"],
get_indicator: function (doc) {
if (doc.docstatus === 1) {
- return [
- __(doc.voucher_type),
- "blue",
- `voucher_type,=,${doc.voucher_type}`,
- ];
+ return [__(doc.voucher_type), "blue", `voucher_type,=,${doc.voucher_type}`];
}
},
};
diff --git a/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js b/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js
index 7d80754..cfd6ccf 100644
--- a/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js
+++ b/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js
@@ -2,78 +2,85 @@
// For license information, please see license.txt
frappe.ui.form.on("Journal Entry Template", {
- onload: function(frm) {
- if(frm.is_new()) {
+ onload: function (frm) {
+ if (frm.is_new()) {
frappe.call({
type: "GET",
method: "erpnext.accounts.doctype.journal_entry_template.journal_entry_template.get_naming_series",
- callback: function(r){
- if(r.message) {
+ callback: function (r) {
+ if (r.message) {
frm.set_df_property("naming_series", "options", r.message.split("\n"));
frm.set_value("naming_series", r.message.split("\n")[0]);
frm.refresh_field("naming_series");
}
- }
+ },
});
}
},
- refresh: function(frm) {
+ refresh: function (frm) {
frappe.model.set_default_values(frm.doc);
- frm.set_query("account" ,"accounts", function(){
+ frm.set_query("account", "accounts", function () {
var filters = {
company: frm.doc.company,
- is_group: 0
+ is_group: 0,
};
- if(!frm.doc.multi_currency) {
+ if (!frm.doc.multi_currency) {
$.extend(filters, {
- account_currency: ['in', [frappe.get_doc(":Company", frm.doc.company).default_currency, null]]
+ account_currency: [
+ "in",
+ [frappe.get_doc(":Company", frm.doc.company).default_currency, null],
+ ],
});
}
return { filters: filters };
});
},
- voucher_type: function(frm) {
- var add_accounts = function(doc, r) {
- $.each(r, function(i, d) {
+ voucher_type: function (frm) {
+ var add_accounts = function (doc, r) {
+ $.each(r, function (i, d) {
var row = frappe.model.add_child(doc, "Journal Entry Template Account", "accounts");
row.account = d.account;
});
refresh_field("accounts");
};
- if(!frm.doc.company) return;
+ if (!frm.doc.company) return;
frm.trigger("clear_child");
- switch(frm.doc.voucher_type){
+ switch (frm.doc.voucher_type) {
case "Bank Entry":
case "Cash Entry":
frappe.call({
type: "GET",
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_default_bank_cash_account",
args: {
- "account_type": (frm.doc.voucher_type=="Bank Entry" ?
- "Bank" : (frm.doc.voucher_type=="Cash Entry" ? "Cash" : null)),
- "company": frm.doc.company
+ account_type:
+ frm.doc.voucher_type == "Bank Entry"
+ ? "Bank"
+ : frm.doc.voucher_type == "Cash Entry"
+ ? "Cash"
+ : null,
+ company: frm.doc.company,
},
- callback: function(r) {
- if(r.message) {
+ callback: function (r) {
+ if (r.message) {
// If default company bank account not set
- if(!$.isEmptyObject(r.message)){
+ if (!$.isEmptyObject(r.message)) {
add_accounts(frm.doc, [r.message]);
}
}
- }
+ },
});
break;
default:
frm.trigger("clear_child");
}
},
- clear_child: function(frm){
+ clear_child: function (frm) {
frappe.model.clear_table(frm.doc, "accounts");
frm.refresh_field("accounts");
- }
+ },
});
diff --git a/erpnext/accounts/doctype/ledger_merge/ledger_merge.js b/erpnext/accounts/doctype/ledger_merge/ledger_merge.js
index b2db98d..6faae84 100644
--- a/erpnext/accounts/doctype/ledger_merge/ledger_merge.js
+++ b/erpnext/accounts/doctype/ledger_merge/ledger_merge.js
@@ -1,9 +1,9 @@
// Copyright (c) 2021, Wahni Green Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Ledger Merge', {
- setup: function(frm) {
- frappe.realtime.on('ledger_merge_refresh', ({ ledger_merge }) => {
+frappe.ui.form.on("Ledger Merge", {
+ setup: function (frm) {
+ frappe.realtime.on("ledger_merge_refresh", ({ ledger_merge }) => {
if (ledger_merge !== frm.doc.name) return;
frappe.model.clear_doc(frm.doc.doctype, frm.doc.name);
frappe.model.with_doc(frm.doc.doctype, frm.doc.name).then(() => {
@@ -11,29 +11,29 @@
});
});
- frappe.realtime.on('ledger_merge_progress', data => {
+ frappe.realtime.on("ledger_merge_progress", (data) => {
if (data.ledger_merge !== frm.doc.name) return;
- let message = __('Merging {0} of {1}', [data.current, data.total]);
+ let message = __("Merging {0} of {1}", [data.current, data.total]);
let percent = Math.floor((data.current * 100) / data.total);
- frm.dashboard.show_progress(__('Merge Progress'), percent, message);
- frm.page.set_indicator(__('In Progress'), 'orange');
+ frm.dashboard.show_progress(__("Merge Progress"), percent, message);
+ frm.page.set_indicator(__("In Progress"), "orange");
});
- frm.set_query("account", function(doc) {
- if (!doc.company) frappe.throw(__('Please set Company'));
- if (!doc.root_type) frappe.throw(__('Please set Root Type'));
+ frm.set_query("account", function (doc) {
+ if (!doc.company) frappe.throw(__("Please set Company"));
+ if (!doc.root_type) frappe.throw(__("Please set Root Type"));
return {
filters: {
root_type: doc.root_type,
- company: doc.company
- }
+ company: doc.company,
+ },
};
});
- frm.set_query('account', 'merge_accounts', function(doc) {
- if (!doc.company) frappe.throw(__('Please set Company'));
- if (!doc.root_type) frappe.throw(__('Please set Root Type'));
- if (!doc.account) frappe.throw(__('Please set Account'));
+ frm.set_query("account", "merge_accounts", function (doc) {
+ if (!doc.company) frappe.throw(__("Please set Company"));
+ if (!doc.root_type) frappe.throw(__("Please set Root Type"));
+ if (!doc.account) frappe.throw(__("Please set Account"));
let acc = [doc.account];
frm.doc.merge_accounts.forEach((row) => {
acc.push(row.account);
@@ -43,86 +43,86 @@
is_group: doc.is_group,
root_type: doc.root_type,
name: ["not in", acc],
- company: doc.company
- }
+ company: doc.company,
+ },
};
});
},
- refresh: function(frm) {
+ refresh: function (frm) {
frm.page.hide_icon_group();
- frm.trigger('set_merge_status');
- frm.trigger('update_primary_action');
+ frm.trigger("set_merge_status");
+ frm.trigger("update_primary_action");
},
- after_save: function(frm) {
+ after_save: function (frm) {
setTimeout(() => {
- frm.trigger('update_primary_action');
+ frm.trigger("update_primary_action");
}, 500);
},
- update_primary_action: function(frm) {
+ update_primary_action: function (frm) {
if (frm.is_dirty()) {
frm.enable_save();
return;
}
frm.disable_save();
- if (frm.doc.status !== 'Success') {
+ if (frm.doc.status !== "Success") {
if (!frm.is_new()) {
- let label = frm.doc.status === 'Pending' ? __('Start Merge') : __('Retry');
+ let label = frm.doc.status === "Pending" ? __("Start Merge") : __("Retry");
frm.page.set_primary_action(label, () => frm.events.start_merge(frm));
} else {
- frm.page.set_primary_action(__('Save'), () => frm.save());
+ frm.page.set_primary_action(__("Save"), () => frm.save());
}
}
},
- start_merge: function(frm) {
+ start_merge: function (frm) {
frm.call({
- method: 'form_start_merge',
+ method: "form_start_merge",
args: { docname: frm.doc.name },
- btn: frm.page.btn_primary
- }).then(r => {
+ btn: frm.page.btn_primary,
+ }).then((r) => {
if (r.message === true) {
frm.disable_save();
}
});
},
- set_merge_status: function(frm) {
+ set_merge_status: function (frm) {
if (frm.doc.status == "Pending") return;
let successful_records = 0;
frm.doc.merge_accounts.forEach((row) => {
if (row.merged) successful_records += 1;
});
let message_args = [successful_records, frm.doc.merge_accounts.length];
- frm.dashboard.set_headline(__('Successfully merged {0} out of {1}.', message_args));
+ frm.dashboard.set_headline(__("Successfully merged {0} out of {1}.", message_args));
},
- root_type: function(frm) {
- frm.set_value('account', '');
- frm.set_value('merge_accounts', []);
+ root_type: function (frm) {
+ frm.set_value("account", "");
+ frm.set_value("merge_accounts", []);
},
- company: function(frm) {
- frm.set_value('account', '');
- frm.set_value('merge_accounts', []);
- }
+ company: function (frm) {
+ frm.set_value("account", "");
+ frm.set_value("merge_accounts", []);
+ },
});
-frappe.ui.form.on('Ledger Merge Accounts', {
- merge_accounts_add: function(frm) {
- frm.trigger('update_primary_action');
+frappe.ui.form.on("Ledger Merge Accounts", {
+ merge_accounts_add: function (frm) {
+ frm.trigger("update_primary_action");
},
- merge_accounts_remove: function(frm) {
- frm.trigger('update_primary_action');
+ merge_accounts_remove: function (frm) {
+ frm.trigger("update_primary_action");
},
- account: function(frm, cdt, cdn) {
+ account: function (frm, cdt, cdn) {
let row = frappe.get_doc(cdt, cdn);
row.account_name = row.account;
- frm.refresh_field('merge_accounts');
- frm.trigger('update_primary_action');
- }
+ frm.refresh_field("merge_accounts");
+ frm.trigger("update_primary_action");
+ },
});
diff --git a/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js b/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js
index d7dc7f3..d522f6d 100644
--- a/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js
+++ b/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Loyalty Point Entry', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Loyalty Point Entry", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/accounts/doctype/loyalty_program/loyalty_program.js b/erpnext/accounts/doctype/loyalty_program/loyalty_program.js
index 6951b2a..4c29be3 100644
--- a/erpnext/accounts/doctype/loyalty_program/loyalty_program.js
+++ b/erpnext/accounts/doctype/loyalty_program/loyalty_program.js
@@ -3,30 +3,37 @@
frappe.provide("erpnext.accounts.dimensions");
-frappe.ui.form.on('Loyalty Program', {
- setup: function(frm) {
- var help_content =
- `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
+frappe.ui.form.on("Loyalty Program", {
+ setup: function (frm) {
+ var help_content = `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
<tr><td>
<h4>
<i class="fa fa-hand-right"></i>
- ${__('Notes')}
+ ${__("Notes")}
</h4>
<ul>
<li>
- ${__("Loyalty Points will be calculated from the spent done (via the Sales Invoice), based on collection factor mentioned.")}
+ ${__(
+ "Loyalty Points will be calculated from the spent done (via the Sales Invoice), based on collection factor mentioned."
+ )}
</li>
<li>
- ${__("There can be multiple tiered collection factor based on the total spent. But the conversion factor for redemption will always be same for all the tier.")}
+ ${__(
+ "There can be multiple tiered collection factor based on the total spent. But the conversion factor for redemption will always be same for all the tier."
+ )}
</li>
<li>
- ${__("In the case of multi-tier program, Customers will be auto assigned to the concerned tier as per their spent")}
+ ${__(
+ "In the case of multi-tier program, Customers will be auto assigned to the concerned tier as per their spent"
+ )}
</li>
<li>
${__("If unlimited expiry for the Loyalty Points, keep the Expiry Duration empty or 0.")}
</li>
<li>
- ${__("If Auto Opt In is checked, then the customers will be automatically linked with the concerned Loyalty Program (on save)")}
+ ${__(
+ "If Auto Opt In is checked, then the customers will be automatically linked with the concerned Loyalty Program (on save)"
+ )}
</li>
<li>
${__("One customer can be part of only single Loyalty Program.")}
@@ -37,14 +44,14 @@
set_field_options("loyalty_program_help", help_content);
},
- onload: function(frm) {
- frm.set_query("expense_account", function(doc) {
+ onload: function (frm) {
+ frm.set_query("expense_account", function (doc) {
return {
filters: {
- "root_type": "Expense",
- 'is_group': 0,
- 'company': doc.company
- }
+ root_type: "Expense",
+ is_group: 0,
+ company: doc.company,
+ },
};
});
@@ -52,13 +59,15 @@
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- refresh: function(frm) {
+ refresh: function (frm) {
if (frm.doc.loyalty_program_type === "Single Tier Program" && frm.doc.collection_rules.length > 1) {
- frappe.throw(__("Please select the Multiple Tier Program type for more than one collection rules."));
+ frappe.throw(
+ __("Please select the Multiple Tier Program type for more than one collection rules.")
+ );
}
},
- company: function(frm) {
+ company: function (frm) {
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
- }
+ },
});
diff --git a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js
index 103fa96..25d437f 100644
--- a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js
+++ b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js
@@ -1,16 +1,16 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('Mode of Payment', {
- setup: function(frm) {
- frm.set_query("default_account", "accounts", function(doc, cdt, cdn) {
+frappe.ui.form.on("Mode of Payment", {
+ setup: function (frm) {
+ frm.set_query("default_account", "accounts", function (doc, cdt, cdn) {
let d = locals[cdt][cdn];
return {
filters: [
- ['Account', 'account_type', 'in', 'Bank, Cash, Receivable'],
- ['Account', 'is_group', '=', 0],
- ['Account', 'company', '=', d.company]
- ]
+ ["Account", "account_type", "in", "Bank, Cash, Receivable"],
+ ["Account", "is_group", "=", 0],
+ ["Account", "company", "=", d.company],
+ ],
};
});
},
diff --git a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
index 569f008..3383534 100644
--- a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
+++ b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
@@ -1,16 +1,16 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('Monthly Distribution', {
+frappe.ui.form.on("Monthly Distribution", {
onload(frm) {
- if(frm.doc.__islocal) {
- return frm.call('get_months').then(() => {
- frm.refresh_field('percentages');
+ if (frm.doc.__islocal) {
+ return frm.call("get_months").then(() => {
+ frm.refresh_field("percentages");
});
}
},
refresh(frm) {
- frm.toggle_display('distribution_id', frm.doc.__islocal);
- }
+ frm.toggle_display("distribution_id", frm.doc.__islocal);
+ },
});
diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
index 88867d1..f1efba8 100644
--- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
+++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
@@ -1,48 +1,52 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Opening Invoice Creation Tool', {
- setup: function(frm) {
- frm.set_query('party_type', 'invoices', function(doc, cdt, cdn) {
+frappe.ui.form.on("Opening Invoice Creation Tool", {
+ setup: function (frm) {
+ frm.set_query("party_type", "invoices", function (doc, cdt, cdn) {
return {
filters: {
- 'name': ['in', 'Customer, Supplier']
- }
+ name: ["in", "Customer, Supplier"],
+ },
};
});
if (frm.doc.company) {
- frm.trigger('setup_company_filters');
+ frm.trigger("setup_company_filters");
}
- frappe.realtime.on('opening_invoice_creation_progress', data => {
+ frappe.realtime.on("opening_invoice_creation_progress", (data) => {
if (!frm.doc.import_in_progress) {
frm.dashboard.reset();
frm.doc.import_in_progress = true;
}
if (data.count == data.total) {
- setTimeout(() => {
- frm.doc.import_in_progress = false;
- frm.clear_table("invoices");
- frm.refresh_fields();
- frm.page.clear_indicator();
- frm.dashboard.hide_progress();
- frappe.msgprint(__("Opening {0} Invoices created", [frm.doc.invoice_type]));
- }, 1500, data.title);
+ setTimeout(
+ () => {
+ frm.doc.import_in_progress = false;
+ frm.clear_table("invoices");
+ frm.refresh_fields();
+ frm.page.clear_indicator();
+ frm.dashboard.hide_progress();
+ frappe.msgprint(__("Opening {0} Invoices created", [frm.doc.invoice_type]));
+ },
+ 1500,
+ data.title
+ );
return;
}
frm.dashboard.show_progress(data.title, (data.count / data.total) * 100, data.message);
- frm.page.set_indicator(__('In Progress'), 'orange');
+ frm.page.set_indicator(__("In Progress"), "orange");
});
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- refresh: function(frm) {
+ refresh: function (frm) {
frm.disable_save();
!frm.doc.import_in_progress && frm.trigger("make_dashboard");
- frm.page.set_primary_action(__('Create Invoices'), () => {
+ frm.page.set_primary_action(__("Create Invoices"), () => {
let btn_primary = frm.page.btn_primary.get(0);
return frm.call({
doc: frm.doc,
@@ -58,100 +62,98 @@
}
},
- setup_company_filters: function(frm) {
- frm.set_query('cost_center', 'invoices', function(doc, cdt, cdn) {
+ setup_company_filters: function (frm) {
+ frm.set_query("cost_center", "invoices", function (doc, cdt, cdn) {
return {
filters: {
- 'company': doc.company
- }
+ company: doc.company,
+ },
};
});
- frm.set_query('cost_center', function(doc) {
+ frm.set_query("cost_center", function (doc) {
return {
filters: {
- 'company': doc.company
- }
+ company: doc.company,
+ },
};
});
- frm.set_query('temporary_opening_account', 'invoices', function(doc, cdt, cdn) {
+ frm.set_query("temporary_opening_account", "invoices", function (doc, cdt, cdn) {
return {
filters: {
- 'company': doc.company
- }
- }
+ company: doc.company,
+ },
+ };
});
},
- company: function(frm) {
+ company: function (frm) {
if (frm.doc.company) {
-
- frm.trigger('setup_company_filters');
+ frm.trigger("setup_company_filters");
frappe.call({
- method: 'erpnext.accounts.doctype.opening_invoice_creation_tool.opening_invoice_creation_tool.get_temporary_opening_account',
+ method: "erpnext.accounts.doctype.opening_invoice_creation_tool.opening_invoice_creation_tool.get_temporary_opening_account",
args: {
- company: frm.doc.company
+ company: frm.doc.company,
},
callback: (r) => {
if (r.message) {
frm.doc.__onload.temporary_opening_account = r.message;
- frm.trigger('update_invoice_table');
+ frm.trigger("update_invoice_table");
}
- }
- })
+ },
+ });
}
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
- invoice_type: function(frm) {
+ invoice_type: function (frm) {
$.each(frm.doc.invoices, (idx, row) => {
- row.party_type = frm.doc.invoice_type == "Sales"? "Customer": "Supplier";
+ row.party_type = frm.doc.invoice_type == "Sales" ? "Customer" : "Supplier";
row.party = "";
});
frm.refresh_fields();
},
- make_dashboard: function(frm) {
+ make_dashboard: function (frm) {
let max_count = frm.doc.__onload.max_count;
let opening_invoices_summary = frm.doc.__onload.opening_invoices_summary;
- if(!$.isEmptyObject(opening_invoices_summary)) {
+ if (!$.isEmptyObject(opening_invoices_summary)) {
let section = frm.dashboard.add_section(
- frappe.render_template('opening_invoice_creation_tool_dashboard', {
+ frappe.render_template("opening_invoice_creation_tool_dashboard", {
data: opening_invoices_summary,
- max_count: max_count
+ max_count: max_count,
}),
__("Opening Invoices Summary")
);
- section.on('click', '.invoice-link', function() {
- let doctype = $(this).attr('data-type');
- let company = $(this).attr('data-company');
- frappe.set_route('List', doctype,
- {'is_opening': 'Yes', 'company': company, 'docstatus': 1});
+ section.on("click", ".invoice-link", function () {
+ let doctype = $(this).attr("data-type");
+ let company = $(this).attr("data-company");
+ frappe.set_route("List", doctype, { is_opening: "Yes", company: company, docstatus: 1 });
});
frm.dashboard.show();
}
},
- update_invoice_table: function(frm) {
+ update_invoice_table: function (frm) {
$.each(frm.doc.invoices, (idx, row) => {
if (!row.temporary_opening_account) {
row.temporary_opening_account = frm.doc.__onload.temporary_opening_account;
}
- if(!row.cost_center) {
+ if (!row.cost_center) {
row.cost_center = frm.doc.cost_center;
}
- row.party_type = frm.doc.invoice_type == "Sales"? "Customer": "Supplier";
+ row.party_type = frm.doc.invoice_type == "Sales" ? "Customer" : "Supplier";
});
- }
+ },
});
-frappe.ui.form.on('Opening Invoice Creation Tool Item', {
+frappe.ui.form.on("Opening Invoice Creation Tool Item", {
invoices_add: (frm) => {
- frm.trigger('update_invoice_table');
- }
+ frm.trigger("update_invoice_table");
+ },
});
diff --git a/erpnext/accounts/doctype/party_link/party_link.js b/erpnext/accounts/doctype/party_link/party_link.js
index 6da9291..dfa02c4 100644
--- a/erpnext/accounts/doctype/party_link/party_link.js
+++ b/erpnext/accounts/doctype/party_link/party_link.js
@@ -1,33 +1,34 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Party Link', {
- refresh: function(frm) {
- frm.set_query('primary_role', () => {
+frappe.ui.form.on("Party Link", {
+ refresh: function (frm) {
+ frm.set_query("primary_role", () => {
return {
filters: {
- name: ['in', ['Customer', 'Supplier']]
- }
+ name: ["in", ["Customer", "Supplier"]],
+ },
};
});
- frm.set_query('secondary_role', () => {
- let party_types = Object.keys(frappe.boot.party_account_types)
- .filter(p => p != frm.doc.primary_role);
+ frm.set_query("secondary_role", () => {
+ let party_types = Object.keys(frappe.boot.party_account_types).filter(
+ (p) => p != frm.doc.primary_role
+ );
return {
filters: {
- name: ['in', party_types]
- }
+ name: ["in", party_types],
+ },
};
});
},
primary_role(frm) {
- frm.set_value('primary_party', '');
- frm.set_value('secondary_role', '');
+ frm.set_value("primary_party", "");
+ frm.set_value("secondary_role", "");
},
secondary_role(frm) {
- frm.set_value('secondary_party', '');
- }
+ frm.set_value("secondary_party", "");
+ },
});
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 832b116..ab50c38 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -7,11 +7,20 @@
erpnext.accounts.taxes.setup_tax_validations("Payment Entry");
erpnext.accounts.taxes.setup_tax_filters("Advance Taxes and Charges");
-frappe.ui.form.on('Payment Entry', {
- onload: function(frm) {
- frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', 'Repost Payment Ledger','Repost Accounting Ledger', 'Unreconcile Payment', 'Unreconcile Payment Entries', "Bank Transaction"];
+frappe.ui.form.on("Payment Entry", {
+ onload: function (frm) {
+ frm.ignore_doctypes_on_cancel_all = [
+ "Sales Invoice",
+ "Purchase Invoice",
+ "Journal Entry",
+ "Repost Payment Ledger",
+ "Repost Accounting Ledger",
+ "Unreconcile Payment",
+ "Unreconcile Payment Entries",
+ "Bank Transaction",
+ ];
- if(frm.doc.__islocal) {
+ if (frm.doc.__islocal) {
if (!frm.doc.paid_from) frm.set_value("paid_from_account_currency", null);
if (!frm.doc.paid_to) frm.set_value("paid_to_account_currency", null);
}
@@ -19,95 +28,97 @@
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- setup: function(frm) {
- frm.set_query("paid_from", function() {
+ setup: function (frm) {
+ frm.set_query("paid_from", function () {
frm.events.validate_company(frm);
- var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type) ?
- ["Bank", "Cash"] : [frappe.boot.party_account_types[frm.doc.party_type]];
+ var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type)
+ ? ["Bank", "Cash"]
+ : [frappe.boot.party_account_types[frm.doc.party_type]];
return {
filters: {
- "account_type": ["in", account_types],
- "is_group": 0,
- "company": frm.doc.company
- }
- }
+ account_type: ["in", account_types],
+ is_group: 0,
+ company: frm.doc.company,
+ },
+ };
});
- frm.set_query("party_type", function() {
+ frm.set_query("party_type", function () {
frm.events.validate_company(frm);
- return{
+ return {
filters: {
- "name": ["in", Object.keys(frappe.boot.party_account_types)],
- }
- }
+ name: ["in", Object.keys(frappe.boot.party_account_types)],
+ },
+ };
});
- frm.set_query("party_bank_account", function() {
+ frm.set_query("party_bank_account", function () {
return {
filters: {
is_company_account: 0,
party_type: frm.doc.party_type,
- party: frm.doc.party
- }
- }
+ party: frm.doc.party,
+ },
+ };
});
- frm.set_query("bank_account", function() {
+ frm.set_query("bank_account", function () {
return {
filters: {
is_company_account: 1,
- company: frm.doc.company
- }
- }
+ company: frm.doc.company,
+ },
+ };
});
- frm.set_query("contact_person", function() {
+ frm.set_query("contact_person", function () {
if (frm.doc.party) {
return {
- query: 'frappe.contacts.doctype.contact.contact.contact_query',
+ query: "frappe.contacts.doctype.contact.contact.contact_query",
filters: {
link_doctype: frm.doc.party_type,
- link_name: frm.doc.party
- }
+ link_name: frm.doc.party,
+ },
};
}
});
- frm.set_query("paid_to", function() {
+ frm.set_query("paid_to", function () {
frm.events.validate_company(frm);
- var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ?
- ["Bank", "Cash"] : [frappe.boot.party_account_types[frm.doc.party_type]];
+ var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type)
+ ? ["Bank", "Cash"]
+ : [frappe.boot.party_account_types[frm.doc.party_type]];
return {
filters: {
- "account_type": ["in", account_types],
- "is_group": 0,
- "company": frm.doc.company
- }
- }
+ account_type: ["in", account_types],
+ is_group: 0,
+ company: frm.doc.company,
+ },
+ };
});
- frm.set_query("account", "deductions", function() {
+ frm.set_query("account", "deductions", function () {
return {
filters: {
- "is_group": 0,
- "company": frm.doc.company
- }
- }
+ is_group: 0,
+ company: frm.doc.company,
+ },
+ };
});
- frm.set_query("advance_tax_account", function() {
+ frm.set_query("advance_tax_account", function () {
return {
filters: {
- "company": frm.doc.company,
- "root_type": ["in", ["Asset", "Liability"]],
- "is_group": 0
- }
- }
+ company: frm.doc.company,
+ root_type: ["in", ["Asset", "Liability"]],
+ is_group: 0,
+ },
+ };
});
- frm.set_query("reference_doctype", "references", function() {
+ frm.set_query("reference_doctype", "references", function () {
let doctypes = ["Journal Entry"];
if (frm.doc.party_type == "Customer") {
doctypes = ["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"];
@@ -116,232 +127,312 @@
}
return {
- filters: { "name": ["in", doctypes] }
+ filters: { name: ["in", doctypes] },
};
});
- frm.set_query('payment_term', 'references', function(frm, cdt, cdn) {
+ frm.set_query("payment_term", "references", function (frm, cdt, cdn) {
const child = locals[cdt][cdn];
- if (in_list(['Purchase Invoice', 'Sales Invoice'], child.reference_doctype) && child.reference_name) {
+ if (
+ in_list(["Purchase Invoice", "Sales Invoice"], child.reference_doctype) &&
+ child.reference_name
+ ) {
return {
query: "erpnext.controllers.queries.get_payment_terms_for_references",
filters: {
- 'reference': child.reference_name
- }
- }
+ reference: child.reference_name,
+ },
+ };
}
});
- frm.set_query("reference_name", "references", function(doc, cdt, cdn) {
+ frm.set_query("reference_name", "references", function (doc, cdt, cdn) {
const child = locals[cdt][cdn];
- const filters = {"docstatus": 1, "company": doc.company};
- const party_type_doctypes = ['Sales Invoice', 'Sales Order', 'Purchase Invoice',
- 'Purchase Order', 'Dunning'];
+ const filters = { docstatus: 1, company: doc.company };
+ const party_type_doctypes = [
+ "Sales Invoice",
+ "Sales Order",
+ "Purchase Invoice",
+ "Purchase Order",
+ "Dunning",
+ ];
if (in_list(party_type_doctypes, child.reference_doctype)) {
filters[doc.party_type.toLowerCase()] = doc.party;
}
return {
- filters: filters
+ filters: filters,
};
});
},
- refresh: function(frm) {
+ refresh: function (frm) {
erpnext.hide_company(frm);
frm.events.hide_unhide_fields(frm);
frm.events.set_dynamic_labels(frm);
frm.events.show_general_ledger(frm);
erpnext.accounts.ledger_preview.show_accounting_ledger_preview(frm);
- if((frm.doc.references) && (frm.doc.references.find((elem) => {return elem.exchange_gain_loss != 0}))) {
- frm.add_custom_button(__("View Exchange Gain/Loss Journals"), function() {
- frappe.set_route("List", "Journal Entry", {"voucher_type": "Exchange Gain Or Loss", "reference_name": frm.doc.name});
- }, __('Actions'));
-
+ if (
+ frm.doc.references &&
+ frm.doc.references.find((elem) => {
+ return elem.exchange_gain_loss != 0;
+ })
+ ) {
+ frm.add_custom_button(
+ __("View Exchange Gain/Loss Journals"),
+ function () {
+ frappe.set_route("List", "Journal Entry", {
+ voucher_type: "Exchange Gain Or Loss",
+ reference_name: frm.doc.name,
+ });
+ },
+ __("Actions")
+ );
}
erpnext.accounts.unreconcile_payment.add_unreconcile_btn(frm);
},
validate_company: (frm) => {
- if (!frm.doc.company){
- frappe.throw({message:__("Please select a Company first."), title: __("Mandatory")});
+ if (!frm.doc.company) {
+ frappe.throw({ message: __("Please select a Company first."), title: __("Mandatory") });
}
},
- company: function(frm) {
- frm.trigger('party');
+ company: function (frm) {
+ frm.trigger("party");
frm.events.hide_unhide_fields(frm);
frm.events.set_dynamic_labels(frm);
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
- contact_person: function(frm) {
+ contact_person: function (frm) {
frm.set_value("contact_email", "");
erpnext.utils.get_contact_details(frm);
},
- hide_unhide_fields: function(frm) {
- var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
+ hide_unhide_fields: function (frm) {
+ var company_currency = frm.doc.company
+ ? frappe.get_doc(":Company", frm.doc.company).default_currency
+ : "";
- frm.toggle_display("source_exchange_rate",
- (frm.doc.paid_amount && frm.doc.paid_from_account_currency != company_currency));
+ frm.toggle_display(
+ "source_exchange_rate",
+ frm.doc.paid_amount && frm.doc.paid_from_account_currency != company_currency
+ );
- frm.toggle_display("target_exchange_rate", (frm.doc.received_amount &&
- frm.doc.paid_to_account_currency != company_currency &&
- frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
+ frm.toggle_display(
+ "target_exchange_rate",
+ frm.doc.received_amount &&
+ frm.doc.paid_to_account_currency != company_currency &&
+ frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency
+ );
frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
if (frm.doc.payment_type == "Pay") {
- frm.toggle_display("base_total_taxes_and_charges", frm.doc.total_taxes_and_charges &&
- (frm.doc.paid_to_account_currency != company_currency));
+ frm.toggle_display(
+ "base_total_taxes_and_charges",
+ frm.doc.total_taxes_and_charges && frm.doc.paid_to_account_currency != company_currency
+ );
} else {
- frm.toggle_display("base_total_taxes_and_charges", frm.doc.total_taxes_and_charges &&
- (frm.doc.paid_from_account_currency != company_currency));
+ frm.toggle_display(
+ "base_total_taxes_and_charges",
+ frm.doc.total_taxes_and_charges && frm.doc.paid_from_account_currency != company_currency
+ );
}
- frm.toggle_display("base_received_amount", (
- frm.doc.paid_to_account_currency != company_currency
- && frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency
- && frm.doc.base_paid_amount != frm.doc.base_received_amount
- ));
+ frm.toggle_display(
+ "base_received_amount",
+ frm.doc.paid_to_account_currency != company_currency &&
+ frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency &&
+ frm.doc.base_paid_amount != frm.doc.base_received_amount
+ );
- frm.toggle_display("received_amount", (frm.doc.payment_type=="Internal Transfer" ||
- frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency))
+ frm.toggle_display(
+ "received_amount",
+ frm.doc.payment_type == "Internal Transfer" ||
+ frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency
+ );
- frm.toggle_display(["base_total_allocated_amount"],
- (frm.doc.paid_amount && frm.doc.received_amount && frm.doc.base_total_allocated_amount &&
- ((frm.doc.payment_type=="Receive" && frm.doc.paid_from_account_currency != company_currency) ||
- (frm.doc.payment_type=="Pay" && frm.doc.paid_to_account_currency != company_currency))));
+ frm.toggle_display(
+ ["base_total_allocated_amount"],
+ frm.doc.paid_amount &&
+ frm.doc.received_amount &&
+ frm.doc.base_total_allocated_amount &&
+ ((frm.doc.payment_type == "Receive" &&
+ frm.doc.paid_from_account_currency != company_currency) ||
+ (frm.doc.payment_type == "Pay" && frm.doc.paid_to_account_currency != company_currency))
+ );
- var party_amount = frm.doc.payment_type=="Receive" ?
- frm.doc.paid_amount : frm.doc.received_amount;
+ var party_amount = frm.doc.payment_type == "Receive" ? frm.doc.paid_amount : frm.doc.received_amount;
- frm.toggle_display("write_off_difference_amount", (frm.doc.difference_amount && frm.doc.party &&
- (frm.doc.total_allocated_amount > party_amount)));
+ frm.toggle_display(
+ "write_off_difference_amount",
+ frm.doc.difference_amount && frm.doc.party && frm.doc.total_allocated_amount > party_amount
+ );
- frm.toggle_display("set_exchange_gain_loss",
- frm.doc.paid_amount && frm.doc.received_amount && frm.doc.difference_amount);
-
+ frm.toggle_display(
+ "set_exchange_gain_loss",
+ frm.doc.paid_amount && frm.doc.received_amount && frm.doc.difference_amount
+ );
},
- set_dynamic_labels: function(frm) {
- var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
+ set_dynamic_labels: function (frm) {
+ var company_currency = frm.doc.company
+ ? frappe.get_doc(":Company", frm.doc.company).default_currency
+ : "";
- frm.set_currency_labels(["base_paid_amount", "base_received_amount", "base_total_allocated_amount",
- "difference_amount", "base_paid_amount_after_tax", "base_received_amount_after_tax",
- "base_total_taxes_and_charges"], company_currency);
+ frm.set_currency_labels(
+ [
+ "base_paid_amount",
+ "base_received_amount",
+ "base_total_allocated_amount",
+ "difference_amount",
+ "base_paid_amount_after_tax",
+ "base_received_amount_after_tax",
+ "base_total_taxes_and_charges",
+ ],
+ company_currency
+ );
frm.set_currency_labels(["paid_amount"], frm.doc.paid_from_account_currency);
frm.set_currency_labels(["received_amount"], frm.doc.paid_to_account_currency);
- var party_account_currency = frm.doc.payment_type=="Receive" ?
- frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency;
+ var party_account_currency =
+ frm.doc.payment_type == "Receive"
+ ? frm.doc.paid_from_account_currency
+ : frm.doc.paid_to_account_currency;
- frm.set_currency_labels(["total_allocated_amount", "unallocated_amount",
- "total_taxes_and_charges"], party_account_currency);
+ frm.set_currency_labels(
+ ["total_allocated_amount", "unallocated_amount", "total_taxes_and_charges"],
+ party_account_currency
+ );
- var currency_field = (frm.doc.payment_type=="Receive") ? "paid_from_account_currency" : "paid_to_account_currency"
+ var currency_field =
+ frm.doc.payment_type == "Receive" ? "paid_from_account_currency" : "paid_to_account_currency";
frm.set_df_property("total_allocated_amount", "options", currency_field);
frm.set_df_property("unallocated_amount", "options", currency_field);
frm.set_df_property("total_taxes_and_charges", "options", currency_field);
frm.set_df_property("party_balance", "options", currency_field);
- frm.set_currency_labels(["total_amount", "outstanding_amount", "allocated_amount"],
- party_account_currency, "references");
+ frm.set_currency_labels(
+ ["total_amount", "outstanding_amount", "allocated_amount"],
+ party_account_currency,
+ "references"
+ );
- cur_frm.set_df_property("source_exchange_rate", "description",
- ("1 " + frm.doc.paid_from_account_currency + " = [?] " + company_currency));
+ cur_frm.set_df_property(
+ "source_exchange_rate",
+ "description",
+ "1 " + frm.doc.paid_from_account_currency + " = [?] " + company_currency
+ );
- cur_frm.set_df_property("target_exchange_rate", "description",
- ("1 " + frm.doc.paid_to_account_currency + " = [?] " + company_currency));
+ cur_frm.set_df_property(
+ "target_exchange_rate",
+ "description",
+ "1 " + frm.doc.paid_to_account_currency + " = [?] " + company_currency
+ );
frm.refresh_fields();
},
- show_general_ledger: function(frm) {
- if(frm.doc.docstatus > 0) {
- frm.add_custom_button(__('Ledger'), function() {
- frappe.route_options = {
- "voucher_no": frm.doc.name,
- "from_date": frm.doc.posting_date,
- "to_date": moment(frm.doc.modified).format('YYYY-MM-DD'),
- "company": frm.doc.company,
- "group_by": "",
- "show_cancelled_entries": frm.doc.docstatus === 2
- };
- frappe.set_route("query-report", "General Ledger");
- }, "fa fa-table");
+ show_general_ledger: function (frm) {
+ if (frm.doc.docstatus > 0) {
+ frm.add_custom_button(
+ __("Ledger"),
+ function () {
+ frappe.route_options = {
+ voucher_no: frm.doc.name,
+ from_date: frm.doc.posting_date,
+ to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+ company: frm.doc.company,
+ group_by: "",
+ show_cancelled_entries: frm.doc.docstatus === 2,
+ };
+ frappe.set_route("query-report", "General Ledger");
+ },
+ "fa fa-table"
+ );
}
},
- payment_type: function(frm) {
- if(frm.doc.payment_type == "Internal Transfer") {
- $.each(["party", "party_balance", "paid_from", "paid_to",
- "references", "total_allocated_amount"], function(i, field) {
- frm.set_value(field, null);
- });
+ payment_type: function (frm) {
+ if (frm.doc.payment_type == "Internal Transfer") {
+ $.each(
+ ["party", "party_balance", "paid_from", "paid_to", "references", "total_allocated_amount"],
+ function (i, field) {
+ frm.set_value(field, null);
+ }
+ );
} else {
- if(frm.doc.party) {
+ if (frm.doc.party) {
frm.events.party(frm);
}
- if(frm.doc.mode_of_payment) {
+ if (frm.doc.mode_of_payment) {
frm.events.mode_of_payment(frm);
}
}
},
- mode_of_payment: function(frm) {
- erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function(account){
+ mode_of_payment: function (frm) {
+ erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function (account) {
let payment_account_field = frm.doc.payment_type == "Receive" ? "paid_to" : "paid_from";
frm.set_value(payment_account_field, account);
- })
+ });
},
- party_type: function(frm) {
-
+ party_type: function (frm) {
let party_types = Object.keys(frappe.boot.party_account_types);
- if(frm.doc.party_type && !party_types.includes(frm.doc.party_type)){
+ if (frm.doc.party_type && !party_types.includes(frm.doc.party_type)) {
frm.set_value("party_type", "");
frappe.throw(__("Party can only be one of {0}", [party_types.join(", ")]));
}
- frm.set_query("party", function() {
- if(frm.doc.party_type == 'Employee'){
+ frm.set_query("party", function () {
+ if (frm.doc.party_type == "Employee") {
return {
- query: "erpnext.controllers.queries.employee_query"
- }
- }
- else if(frm.doc.party_type == 'Customer'){
+ query: "erpnext.controllers.queries.employee_query",
+ };
+ } else if (frm.doc.party_type == "Customer") {
return {
- query: "erpnext.controllers.queries.customer_query"
- }
+ query: "erpnext.controllers.queries.customer_query",
+ };
}
});
- if(frm.doc.party) {
- $.each(["party", "party_balance", "paid_from", "paid_to",
- "paid_from_account_currency", "paid_from_account_balance",
- "paid_to_account_currency", "paid_to_account_balance",
- "references", "total_allocated_amount"],
- function(i, field) {
+ if (frm.doc.party) {
+ $.each(
+ [
+ "party",
+ "party_balance",
+ "paid_from",
+ "paid_to",
+ "paid_from_account_currency",
+ "paid_from_account_balance",
+ "paid_to_account_currency",
+ "paid_to_account_balance",
+ "references",
+ "total_allocated_amount",
+ ],
+ function (i, field) {
frm.set_value(field, null);
- })
+ }
+ );
}
},
- party: function(frm) {
+ party: function (frm) {
if (frm.doc.contact_email || frm.doc.contact_person) {
frm.set_value("contact_email", "");
frm.set_value("contact_person", "");
}
- if(frm.doc.payment_type && frm.doc.party_type && frm.doc.party && frm.doc.company) {
- if(!frm.doc.posting_date) {
- frappe.msgprint(__("Please select Posting Date before selecting Party"))
+ if (frm.doc.payment_type && frm.doc.party_type && frm.doc.party && frm.doc.company) {
+ if (!frm.doc.posting_date) {
+ frappe.msgprint(__("Please select Posting Date before selecting Party"));
frm.set_value("party", "");
- return ;
+ return;
}
frm.set_party_account_based_on_party = true;
@@ -354,19 +445,25 @@
party_type: frm.doc.party_type,
party: frm.doc.party,
date: frm.doc.posting_date,
- cost_center: frm.doc.cost_center
+ cost_center: frm.doc.cost_center,
},
- callback: function(r, rt) {
- if(r.message) {
+ callback: function (r, rt) {
+ if (r.message) {
frappe.run_serially([
() => {
- if(frm.doc.payment_type == "Receive") {
+ if (frm.doc.payment_type == "Receive") {
frm.set_value("paid_from", r.message.party_account);
- frm.set_value("paid_from_account_currency", r.message.party_account_currency);
+ frm.set_value(
+ "paid_from_account_currency",
+ r.message.party_account_currency
+ );
frm.set_value("paid_from_account_balance", r.message.account_balance);
- } else if (frm.doc.payment_type == "Pay"){
+ } else if (frm.doc.payment_type == "Pay") {
frm.set_value("paid_to", r.message.party_account);
- frm.set_value("paid_to_account_currency", r.message.party_account_currency);
+ frm.set_value(
+ "paid_to_account_currency",
+ r.message.party_account_currency
+ );
frm.set_value("paid_to_account_balance", r.message.account_balance);
}
},
@@ -381,32 +478,46 @@
frm.set_value("bank_account", r.message.bank_account);
}
},
- () => frm.events.set_current_exchange_rate(frm, "source_exchange_rate",
- frm.doc.paid_from_account_currency, company_currency),
- () => frm.events.set_current_exchange_rate(frm, "target_exchange_rate",
- frm.doc.paid_to_account_currency, company_currency)
+ () =>
+ frm.events.set_current_exchange_rate(
+ frm,
+ "source_exchange_rate",
+ frm.doc.paid_from_account_currency,
+ company_currency
+ ),
+ () =>
+ frm.events.set_current_exchange_rate(
+ frm,
+ "target_exchange_rate",
+ frm.doc.paid_to_account_currency,
+ company_currency
+ ),
]);
}
- }
+ },
});
}
},
- apply_tax_withholding_amount: function(frm) {
+ apply_tax_withholding_amount: function (frm) {
if (!frm.doc.apply_tax_withholding_amount) {
- frm.set_value("tax_withholding_category", '');
+ frm.set_value("tax_withholding_category", "");
} else {
- frappe.db.get_value('Supplier', frm.doc.party, 'tax_withholding_category', (values) => {
+ frappe.db.get_value("Supplier", frm.doc.party, "tax_withholding_category", (values) => {
frm.set_value("tax_withholding_category", values.tax_withholding_category);
});
}
},
- paid_from: function(frm) {
- if(frm.set_party_account_based_on_party) return;
+ paid_from: function (frm) {
+ if (frm.set_party_account_based_on_party) return;
- frm.events.set_account_currency_and_balance(frm, frm.doc.paid_from,
- "paid_from_account_currency", "paid_from_account_balance", function(frm) {
+ frm.events.set_account_currency_and_balance(
+ frm,
+ frm.doc.paid_from,
+ "paid_from_account_currency",
+ "paid_from_account_balance",
+ function (frm) {
if (frm.doc.payment_type == "Pay") {
frm.events.paid_amount(frm);
}
@@ -414,18 +525,21 @@
);
},
- paid_to: function(frm) {
- if(frm.set_party_account_based_on_party) return;
+ paid_to: function (frm) {
+ if (frm.set_party_account_based_on_party) return;
- frm.events.set_account_currency_and_balance(frm, frm.doc.paid_to,
- "paid_to_account_currency", "paid_to_account_balance", function(frm) {
+ frm.events.set_account_currency_and_balance(
+ frm,
+ frm.doc.paid_to,
+ "paid_to_account_currency",
+ "paid_to_account_balance",
+ function (frm) {
if (frm.doc.payment_type == "Receive") {
- if(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
- if(frm.doc.source_exchange_rate) {
+ if (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
+ if (frm.doc.source_exchange_rate) {
frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
}
frm.set_value("received_amount", frm.doc.paid_amount);
-
} else {
frm.events.received_amount(frm);
}
@@ -434,66 +548,85 @@
);
},
- set_account_currency_and_balance: function(frm, account, currency_field,
- balance_field, callback_function) {
-
+ set_account_currency_and_balance: function (
+ frm,
+ account,
+ currency_field,
+ balance_field,
+ callback_function
+ ) {
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
if (frm.doc.posting_date && account) {
frappe.call({
method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_account_details",
args: {
- "account": account,
- "date": frm.doc.posting_date,
- "cost_center": frm.doc.cost_center
+ account: account,
+ date: frm.doc.posting_date,
+ cost_center: frm.doc.cost_center,
},
- callback: function(r, rt) {
- if(r.message) {
+ callback: function (r, rt) {
+ if (r.message) {
frappe.run_serially([
- () => frm.set_value(currency_field, r.message['account_currency']),
+ () => frm.set_value(currency_field, r.message["account_currency"]),
() => {
- frm.set_value(balance_field, r.message['account_balance']);
+ frm.set_value(balance_field, r.message["account_balance"]);
- if(frm.doc.payment_type=="Receive" && currency_field=="paid_to_account_currency") {
- frm.toggle_reqd(["reference_no", "reference_date"],
- (r.message['account_type'] == "Bank" ? 1 : 0));
- if(!frm.doc.received_amount && frm.doc.paid_amount)
+ if (
+ frm.doc.payment_type == "Receive" &&
+ currency_field == "paid_to_account_currency"
+ ) {
+ frm.toggle_reqd(
+ ["reference_no", "reference_date"],
+ r.message["account_type"] == "Bank" ? 1 : 0
+ );
+ if (!frm.doc.received_amount && frm.doc.paid_amount)
frm.events.paid_amount(frm);
- } else if(frm.doc.payment_type=="Pay" && currency_field=="paid_from_account_currency") {
- frm.toggle_reqd(["reference_no", "reference_date"],
- (r.message['account_type'] == "Bank" ? 1 : 0));
+ } else if (
+ frm.doc.payment_type == "Pay" &&
+ currency_field == "paid_from_account_currency"
+ ) {
+ frm.toggle_reqd(
+ ["reference_no", "reference_date"],
+ r.message["account_type"] == "Bank" ? 1 : 0
+ );
- if(!frm.doc.paid_amount && frm.doc.received_amount)
+ if (!frm.doc.paid_amount && frm.doc.received_amount)
frm.events.received_amount(frm);
- if (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency
- && frm.doc.paid_amount != frm.doc.received_amount) {
- if (company_currency != frm.doc.paid_from_account_currency &&
- frm.doc.payment_type == "Pay") {
- frm.doc.paid_amount = frm.doc.received_amount;
- }
+ if (
+ frm.doc.paid_from_account_currency ==
+ frm.doc.paid_to_account_currency &&
+ frm.doc.paid_amount != frm.doc.received_amount
+ ) {
+ if (
+ company_currency != frm.doc.paid_from_account_currency &&
+ frm.doc.payment_type == "Pay"
+ ) {
+ frm.doc.paid_amount = frm.doc.received_amount;
}
+ }
}
},
() => {
- if(callback_function) callback_function(frm);
+ if (callback_function) callback_function(frm);
frm.events.hide_unhide_fields(frm);
frm.events.set_dynamic_labels(frm);
- }
+ },
]);
}
- }
+ },
});
}
},
- paid_from_account_currency: function(frm) {
- if(!frm.doc.paid_from_account_currency || !frm.doc.company) return;
+ paid_from_account_currency: function (frm) {
+ if (!frm.doc.paid_from_account_currency || !frm.doc.company) return;
let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
if (frm.doc.paid_from_account_currency == company_currency) {
frm.set_value("source_exchange_rate", 1);
- } else if (frm.doc.paid_from){
+ } else if (frm.doc.paid_from) {
if (in_list(["Internal Transfer", "Pay"], frm.doc.payment_type)) {
let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
frappe.call({
@@ -501,52 +634,60 @@
args: {
from_currency: frm.doc.paid_from_account_currency,
to_currency: company_currency,
- transaction_date: frm.doc.posting_date
+ transaction_date: frm.doc.posting_date,
},
- callback: function(r, rt) {
+ callback: function (r, rt) {
frm.set_value("source_exchange_rate", r.message);
- }
- })
+ },
+ });
} else {
- frm.events.set_current_exchange_rate(frm, "source_exchange_rate",
- frm.doc.paid_from_account_currency, company_currency);
+ frm.events.set_current_exchange_rate(
+ frm,
+ "source_exchange_rate",
+ frm.doc.paid_from_account_currency,
+ company_currency
+ );
}
}
},
- paid_to_account_currency: function(frm) {
- if(!frm.doc.paid_to_account_currency || !frm.doc.company) return;
+ paid_to_account_currency: function (frm) {
+ if (!frm.doc.paid_to_account_currency || !frm.doc.company) return;
let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
- frm.events.set_current_exchange_rate(frm, "target_exchange_rate",
- frm.doc.paid_to_account_currency, company_currency);
+ frm.events.set_current_exchange_rate(
+ frm,
+ "target_exchange_rate",
+ frm.doc.paid_to_account_currency,
+ company_currency
+ );
},
- set_current_exchange_rate: function(frm, exchange_rate_field, from_currency, to_currency) {
+ set_current_exchange_rate: function (frm, exchange_rate_field, from_currency, to_currency) {
frappe.call({
method: "erpnext.setup.utils.get_exchange_rate",
args: {
transaction_date: frm.doc.posting_date,
from_currency: from_currency,
- to_currency: to_currency
+ to_currency: to_currency,
},
- callback: function(r, rt) {
+ callback: function (r, rt) {
const ex_rate = flt(r.message, frm.get_field(exchange_rate_field).get_precision());
frm.set_value(exchange_rate_field, ex_rate);
- }
- })
+ },
+ });
},
- posting_date: function(frm) {
+ posting_date: function (frm) {
frm.events.paid_from_account_currency(frm);
},
- source_exchange_rate: function(frm) {
+ source_exchange_rate: function (frm) {
let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
if (frm.doc.paid_amount) {
frm.set_value("base_paid_amount", flt(frm.doc.paid_amount) * flt(frm.doc.source_exchange_rate));
// target exchange rate should always be same as source if both account currencies is same
- if(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
+ if (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
frm.set_value("base_received_amount", frm.doc.base_paid_amount);
} else if (company_currency == frm.doc.paid_to_account_currency) {
@@ -563,16 +704,20 @@
frm.set_df_property("source_exchange_rate", "read_only", erpnext.stale_rate_allowed() ? 0 : 1);
},
- target_exchange_rate: function(frm) {
+ target_exchange_rate: function (frm) {
frm.set_paid_amount_based_on_received_amount = true;
let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
if (frm.doc.received_amount) {
- frm.set_value("base_received_amount",
- flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate));
+ frm.set_value(
+ "base_received_amount",
+ flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate)
+ );
- if(!frm.doc.source_exchange_rate &&
- (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
+ if (
+ !frm.doc.source_exchange_rate &&
+ frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency
+ ) {
frm.set_value("source_exchange_rate", frm.doc.target_exchange_rate);
frm.set_value("base_paid_amount", frm.doc.base_received_amount);
} else if (company_currency == frm.doc.paid_from_account_currency) {
@@ -590,125 +735,148 @@
frm.set_df_property("target_exchange_rate", "read_only", erpnext.stale_rate_allowed() ? 0 : 1);
},
- paid_amount: function(frm) {
+ paid_amount: function (frm) {
frm.set_value("base_paid_amount", flt(frm.doc.paid_amount) * flt(frm.doc.source_exchange_rate));
frm.trigger("reset_received_amount");
frm.events.hide_unhide_fields(frm);
},
- received_amount: function(frm) {
+ received_amount: function (frm) {
frm.set_paid_amount_based_on_received_amount = true;
- if(!frm.doc.paid_amount && frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
+ if (!frm.doc.paid_amount && frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
frm.set_value("paid_amount", frm.doc.received_amount);
- if(frm.doc.target_exchange_rate) {
+ if (frm.doc.target_exchange_rate) {
frm.set_value("source_exchange_rate", frm.doc.target_exchange_rate);
}
frm.set_value("base_paid_amount", frm.doc.base_received_amount);
}
- frm.set_value("base_received_amount",
- flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate));
+ frm.set_value(
+ "base_received_amount",
+ flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate)
+ );
- if(frm.doc.payment_type == "Pay")
+ if (frm.doc.payment_type == "Pay")
frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.received_amount, 1);
- else
- frm.events.set_unallocated_amount(frm);
+ else frm.events.set_unallocated_amount(frm);
frm.set_paid_amount_based_on_received_amount = false;
frm.events.hide_unhide_fields(frm);
},
- reset_received_amount: function(frm) {
- if(!frm.set_paid_amount_based_on_received_amount &&
- (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
-
+ reset_received_amount: function (frm) {
+ if (
+ !frm.set_paid_amount_based_on_received_amount &&
+ frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency
+ ) {
frm.set_value("received_amount", frm.doc.paid_amount);
- if(frm.doc.source_exchange_rate) {
+ if (frm.doc.source_exchange_rate) {
frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
}
frm.set_value("base_received_amount", frm.doc.base_paid_amount);
}
- if(frm.doc.payment_type == "Receive")
+ if (frm.doc.payment_type == "Receive")
frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.paid_amount, 1);
- else
- frm.events.set_unallocated_amount(frm);
+ else frm.events.set_unallocated_amount(frm);
},
- get_outstanding_invoices_or_orders: function(frm, get_outstanding_invoices, get_orders_to_be_billed) {
+ get_outstanding_invoices_or_orders: function (frm, get_outstanding_invoices, get_orders_to_be_billed) {
const today = frappe.datetime.get_today();
let fields = [
- {fieldtype:"Section Break", label: __("Posting Date")},
- {fieldtype:"Date", label: __("From Date"),
- fieldname:"from_posting_date", default:frappe.datetime.add_days(today, -30)},
- {fieldtype:"Column Break"},
- {fieldtype:"Date", label: __("To Date"), fieldname:"to_posting_date", default:today},
- {fieldtype:"Section Break", label: __("Due Date")},
- {fieldtype:"Date", label: __("From Date"), fieldname:"from_due_date"},
- {fieldtype:"Column Break"},
- {fieldtype:"Date", label: __("To Date"), fieldname:"to_due_date"},
- {fieldtype:"Section Break", label: __("Outstanding Amount")},
- {fieldtype:"Float", label: __("Greater Than Amount"),
- fieldname:"outstanding_amt_greater_than", default: 0},
- {fieldtype:"Column Break"},
- {fieldtype:"Float", label: __("Less Than Amount"), fieldname:"outstanding_amt_less_than"},
+ { fieldtype: "Section Break", label: __("Posting Date") },
+ {
+ fieldtype: "Date",
+ label: __("From Date"),
+ fieldname: "from_posting_date",
+ default: frappe.datetime.add_days(today, -30),
+ },
+ { fieldtype: "Column Break" },
+ { fieldtype: "Date", label: __("To Date"), fieldname: "to_posting_date", default: today },
+ { fieldtype: "Section Break", label: __("Due Date") },
+ { fieldtype: "Date", label: __("From Date"), fieldname: "from_due_date" },
+ { fieldtype: "Column Break" },
+ { fieldtype: "Date", label: __("To Date"), fieldname: "to_due_date" },
+ { fieldtype: "Section Break", label: __("Outstanding Amount") },
+ {
+ fieldtype: "Float",
+ label: __("Greater Than Amount"),
+ fieldname: "outstanding_amt_greater_than",
+ default: 0,
+ },
+ { fieldtype: "Column Break" },
+ { fieldtype: "Float", label: __("Less Than Amount"), fieldname: "outstanding_amt_less_than" },
];
if (frm.dimension_filters) {
- let column_break_insertion_point = Math.ceil((frm.dimension_filters.length)/2);
+ let column_break_insertion_point = Math.ceil(frm.dimension_filters.length / 2);
- fields.push({fieldtype:"Section Break"});
- frm.dimension_filters.map((elem, idx)=>{
+ fields.push({ fieldtype: "Section Break" });
+ frm.dimension_filters.map((elem, idx) => {
fields.push({
fieldtype: "Link",
label: elem.document_type == "Cost Center" ? "Cost Center" : elem.label,
options: elem.document_type,
- fieldname: elem.fieldname || elem.document_type
+ fieldname: elem.fieldname || elem.document_type,
});
- if(idx+1 == column_break_insertion_point) {
- fields.push({fieldtype:"Column Break"});
+ if (idx + 1 == column_break_insertion_point) {
+ fields.push({ fieldtype: "Column Break" });
}
});
}
fields = fields.concat([
- {fieldtype:"Section Break"},
- {fieldtype:"Check", label: __("Allocate Payment Amount"), fieldname:"allocate_payment_amount", default:1},
+ { fieldtype: "Section Break" },
+ {
+ fieldtype: "Check",
+ label: __("Allocate Payment Amount"),
+ fieldname: "allocate_payment_amount",
+ default: 1,
+ },
]);
let btn_text = "";
if (get_outstanding_invoices) {
btn_text = "Get Outstanding Invoices";
- }
- else if (get_orders_to_be_billed) {
+ } else if (get_orders_to_be_billed) {
btn_text = "Get Outstanding Orders";
}
- frappe.prompt(fields, function(filters){
- frappe.flags.allocate_payment_amount = true;
- frm.events.validate_filters_data(frm, filters);
- frm.doc.cost_center = filters.cost_center;
- frm.events.get_outstanding_documents(frm, filters, get_outstanding_invoices, get_orders_to_be_billed);
- }, __("Filters"), __(btn_text));
+ frappe.prompt(
+ fields,
+ function (filters) {
+ frappe.flags.allocate_payment_amount = true;
+ frm.events.validate_filters_data(frm, filters);
+ frm.doc.cost_center = filters.cost_center;
+ frm.events.get_outstanding_documents(
+ frm,
+ filters,
+ get_outstanding_invoices,
+ get_orders_to_be_billed
+ );
+ },
+ __("Filters"),
+ __(btn_text)
+ );
},
- get_outstanding_invoices: function(frm) {
+ get_outstanding_invoices: function (frm) {
frm.events.get_outstanding_invoices_or_orders(frm, true, false);
},
- get_outstanding_orders: function(frm) {
+ get_outstanding_orders: function (frm) {
frm.events.get_outstanding_invoices_or_orders(frm, false, true);
},
- validate_filters_data: function(frm, filters) {
+ validate_filters_data: function (frm, filters) {
const fields = {
- 'Posting Date': ['from_posting_date', 'to_posting_date'],
- 'Due Date': ['from_posting_date', 'to_posting_date'],
- 'Advance Amount': ['from_posting_date', 'to_posting_date'],
+ "Posting Date": ["from_posting_date", "to_posting_date"],
+ "Due Date": ["from_posting_date", "to_posting_date"],
+ "Advance Amount": ["from_posting_date", "to_posting_date"],
};
for (let key in fields) {
@@ -716,21 +884,23 @@
let to_field = fields[key][1];
if (filters[from_field] && !filters[to_field]) {
- frappe.throw(
- __("Error: {0} is mandatory field", [to_field.replace(/_/g, " ")])
- );
+ frappe.throw(__("Error: {0} is mandatory field", [to_field.replace(/_/g, " ")]));
} else if (filters[from_field] && filters[from_field] > filters[to_field]) {
frappe.throw(
- __("{0}: {1} must be less than {2}", [key, from_field.replace(/_/g, " "), to_field.replace(/_/g, " ")])
+ __("{0}: {1} must be less than {2}", [
+ key,
+ from_field.replace(/_/g, " "),
+ to_field.replace(/_/g, " "),
+ ])
);
}
}
},
- get_outstanding_documents: function(frm, filters, get_outstanding_invoices, get_orders_to_be_billed) {
+ get_outstanding_documents: function (frm, filters, get_outstanding_invoices, get_orders_to_be_billed) {
frm.clear_table("references");
- if(!frm.doc.party) {
+ if (!frm.doc.party) {
return;
}
@@ -738,14 +908,14 @@
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
var args = {
- "posting_date": frm.doc.posting_date,
- "company": frm.doc.company,
- "party_type": frm.doc.party_type,
- "payment_type": frm.doc.payment_type,
- "party": frm.doc.party,
- "party_account": frm.doc.payment_type=="Receive" ? frm.doc.paid_from : frm.doc.paid_to,
- "cost_center": frm.doc.cost_center
- }
+ posting_date: frm.doc.posting_date,
+ company: frm.doc.company,
+ party_type: frm.doc.party_type,
+ payment_type: frm.doc.payment_type,
+ party: frm.doc.party,
+ party_account: frm.doc.payment_type == "Receive" ? frm.doc.paid_from : frm.doc.paid_to,
+ cost_center: frm.doc.cost_center,
+ };
for (let key in filters) {
args[key] = filters[key];
@@ -753,8 +923,7 @@
if (get_outstanding_invoices) {
args["get_outstanding_invoices"] = true;
- }
- else if (get_orders_to_be_billed) {
+ } else if (get_orders_to_be_billed) {
args["get_orders_to_be_billed"] = true;
}
@@ -762,22 +931,22 @@
args["book_advance_payments_in_separate_party_account"] = true;
}
- frappe.flags.allocate_payment_amount = filters['allocate_payment_amount'];
+ frappe.flags.allocate_payment_amount = filters["allocate_payment_amount"];
- return frappe.call({
- method: 'erpnext.accounts.doctype.payment_entry.payment_entry.get_outstanding_reference_documents',
+ return frappe.call({
+ method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_outstanding_reference_documents",
args: {
- args:args
+ args: args,
},
- callback: function(r, rt) {
- if(r.message) {
+ callback: function (r, rt) {
+ if (r.message) {
var total_positive_outstanding = 0;
var total_negative_outstanding = 0;
- $.each(r.message, function(i, d) {
+ $.each(r.message, function (i, d) {
var c = frm.add_child("references");
c.reference_doctype = d.voucher_type;
c.reference_name = d.voucher_no;
- c.due_date = d.due_date
+ c.due_date = d.due_date;
c.total_amount = d.invoice_amount;
c.outstanding_amount = d.outstanding_amount;
c.bill_no = d.bill_no;
@@ -785,135 +954,157 @@
c.allocated_amount = d.allocated_amount;
c.account = d.account;
- if(!in_list(frm.events.get_order_doctypes(frm), d.voucher_type)) {
- if(flt(d.outstanding_amount) > 0)
+ if (!in_list(frm.events.get_order_doctypes(frm), d.voucher_type)) {
+ if (flt(d.outstanding_amount) > 0)
total_positive_outstanding += flt(d.outstanding_amount);
- else
- total_negative_outstanding += Math.abs(flt(d.outstanding_amount));
+ else total_negative_outstanding += Math.abs(flt(d.outstanding_amount));
}
- var party_account_currency = frm.doc.payment_type=="Receive" ?
- frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency;
+ var party_account_currency =
+ frm.doc.payment_type == "Receive"
+ ? frm.doc.paid_from_account_currency
+ : frm.doc.paid_to_account_currency;
- if(party_account_currency != company_currency) {
+ if (party_account_currency != company_currency) {
c.exchange_rate = d.exchange_rate;
} else {
c.exchange_rate = 1;
}
- if (in_list(frm.events.get_invoice_doctypes(frm), d.reference_doctype)){
+ if (in_list(frm.events.get_invoice_doctypes(frm), d.reference_doctype)) {
c.due_date = d.due_date;
}
});
- if(
- (frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
- (frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier") ||
- (frm.doc.payment_type=="Pay" && frm.doc.party_type=="Employee")
+ if (
+ (frm.doc.payment_type == "Receive" && frm.doc.party_type == "Customer") ||
+ (frm.doc.payment_type == "Pay" && frm.doc.party_type == "Supplier") ||
+ (frm.doc.payment_type == "Pay" && frm.doc.party_type == "Employee")
) {
- if(total_positive_outstanding > total_negative_outstanding)
+ if (total_positive_outstanding > total_negative_outstanding)
if (!frm.doc.paid_amount)
- frm.set_value("paid_amount",
- total_positive_outstanding - total_negative_outstanding);
+ frm.set_value(
+ "paid_amount",
+ total_positive_outstanding - total_negative_outstanding
+ );
} else if (
total_negative_outstanding &&
total_positive_outstanding < total_negative_outstanding
) {
if (!frm.doc.received_amount)
- frm.set_value("received_amount",
- total_negative_outstanding - total_positive_outstanding);
+ frm.set_value(
+ "received_amount",
+ total_negative_outstanding - total_positive_outstanding
+ );
}
}
- frm.events.allocate_party_amount_against_ref_docs(frm,
- (frm.doc.payment_type=="Receive" ? frm.doc.paid_amount : frm.doc.received_amount));
-
- }
+ frm.events.allocate_party_amount_against_ref_docs(
+ frm,
+ frm.doc.payment_type == "Receive" ? frm.doc.paid_amount : frm.doc.received_amount
+ );
+ },
});
},
- get_order_doctypes: function(frm) {
+ get_order_doctypes: function (frm) {
return ["Sales Order", "Purchase Order"];
},
- get_invoice_doctypes: function(frm) {
+ get_invoice_doctypes: function (frm) {
return ["Sales Invoice", "Purchase Invoice"];
},
- allocate_party_amount_against_ref_docs: function(frm, paid_amount, paid_amount_change) {
+ allocate_party_amount_against_ref_docs: function (frm, paid_amount, paid_amount_change) {
var total_positive_outstanding_including_order = 0;
var total_negative_outstanding = 0;
- var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
- function(d) { return flt(d.amount) }));
+ var total_deductions = frappe.utils.sum(
+ $.map(frm.doc.deductions || [], function (d) {
+ return flt(d.amount);
+ })
+ );
paid_amount -= total_deductions;
- $.each(frm.doc.references || [], function(i, row) {
- if(flt(row.outstanding_amount) > 0)
+ $.each(frm.doc.references || [], function (i, row) {
+ if (flt(row.outstanding_amount) > 0)
total_positive_outstanding_including_order += flt(row.outstanding_amount);
- else
- total_negative_outstanding += Math.abs(flt(row.outstanding_amount));
- })
+ else total_negative_outstanding += Math.abs(flt(row.outstanding_amount));
+ });
var allocated_negative_outstanding = 0;
if (
- (frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
- (frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier") ||
- (frm.doc.payment_type=="Pay" && frm.doc.party_type=="Employee")
- ) {
- if(total_positive_outstanding_including_order > paid_amount) {
- var remaining_outstanding = total_positive_outstanding_including_order - paid_amount;
- allocated_negative_outstanding = total_negative_outstanding < remaining_outstanding ?
- total_negative_outstanding : remaining_outstanding;
+ (frm.doc.payment_type == "Receive" && frm.doc.party_type == "Customer") ||
+ (frm.doc.payment_type == "Pay" && frm.doc.party_type == "Supplier") ||
+ (frm.doc.payment_type == "Pay" && frm.doc.party_type == "Employee")
+ ) {
+ if (total_positive_outstanding_including_order > paid_amount) {
+ var remaining_outstanding = total_positive_outstanding_including_order - paid_amount;
+ allocated_negative_outstanding =
+ total_negative_outstanding < remaining_outstanding
+ ? total_negative_outstanding
+ : remaining_outstanding;
}
- var allocated_positive_outstanding = paid_amount + allocated_negative_outstanding;
+ var allocated_positive_outstanding = paid_amount + allocated_negative_outstanding;
} else if (in_list(["Customer", "Supplier"], frm.doc.party_type)) {
- total_negative_outstanding = flt(total_negative_outstanding, precision("outstanding_amount"))
- if(paid_amount > total_negative_outstanding) {
- if(total_negative_outstanding == 0) {
+ total_negative_outstanding = flt(total_negative_outstanding, precision("outstanding_amount"));
+ if (paid_amount > total_negative_outstanding) {
+ if (total_negative_outstanding == 0) {
frappe.msgprint(
- __("Cannot {0} {1} {2} without any negative outstanding invoice", [frm.doc.payment_type,
- (frm.doc.party_type=="Customer" ? "to" : "from"), frm.doc.party_type])
+ __("Cannot {0} {1} {2} without any negative outstanding invoice", [
+ frm.doc.payment_type,
+ frm.doc.party_type == "Customer" ? "to" : "from",
+ frm.doc.party_type,
+ ])
);
- return false
+ return false;
} else {
frappe.msgprint(
- __("Paid Amount cannot be greater than total negative outstanding amount {0}", [total_negative_outstanding])
+ __("Paid Amount cannot be greater than total negative outstanding amount {0}", [
+ total_negative_outstanding,
+ ])
);
return false;
}
} else {
allocated_positive_outstanding = total_negative_outstanding - paid_amount;
- allocated_negative_outstanding = paid_amount +
- (total_positive_outstanding_including_order < allocated_positive_outstanding ?
- total_positive_outstanding_including_order : allocated_positive_outstanding)
+ allocated_negative_outstanding =
+ paid_amount +
+ (total_positive_outstanding_including_order < allocated_positive_outstanding
+ ? total_positive_outstanding_including_order
+ : allocated_positive_outstanding);
}
}
- $.each(frm.doc.references || [], function(i, row) {
+ $.each(frm.doc.references || [], function (i, row) {
if (frappe.flags.allocate_payment_amount == 0) {
//If allocate payment amount checkbox is unchecked, set zero to allocate amount
row.allocated_amount = 0;
-
- } else if (frappe.flags.allocate_payment_amount != 0 && (!row.allocated_amount || paid_amount_change)) {
+ } else if (
+ frappe.flags.allocate_payment_amount != 0 &&
+ (!row.allocated_amount || paid_amount_change)
+ ) {
if (row.outstanding_amount > 0 && allocated_positive_outstanding >= 0) {
- row.allocated_amount = (row.outstanding_amount >= allocated_positive_outstanding) ?
- allocated_positive_outstanding : row.outstanding_amount;
+ row.allocated_amount =
+ row.outstanding_amount >= allocated_positive_outstanding
+ ? allocated_positive_outstanding
+ : row.outstanding_amount;
allocated_positive_outstanding -= flt(row.allocated_amount);
-
} else if (row.outstanding_amount < 0 && allocated_negative_outstanding) {
- row.allocated_amount = (Math.abs(row.outstanding_amount) >= allocated_negative_outstanding) ?
- -1*allocated_negative_outstanding : row.outstanding_amount;
+ row.allocated_amount =
+ Math.abs(row.outstanding_amount) >= allocated_negative_outstanding
+ ? -1 * allocated_negative_outstanding
+ : row.outstanding_amount;
allocated_negative_outstanding -= Math.abs(flt(row.allocated_amount));
}
}
- })
+ });
- frm.refresh_fields()
+ frm.refresh_fields();
frm.events.set_total_allocated_amount(frm);
},
- set_total_allocated_amount: function(frm) {
+ set_total_allocated_amount: function (frm) {
let exchange_rate = 1;
if (frm.doc.payment_type == "Receive") {
exchange_rate = frm.doc.source_exchange_rate;
@@ -922,11 +1113,13 @@
}
var total_allocated_amount = 0.0;
var base_total_allocated_amount = 0.0;
- $.each(frm.doc.references || [], function(i, row) {
+ $.each(frm.doc.references || [], function (i, row) {
if (row.allocated_amount) {
total_allocated_amount += flt(row.allocated_amount);
- base_total_allocated_amount += flt(flt(row.allocated_amount)*flt(exchange_rate),
- precision("base_paid_amount"));
+ base_total_allocated_amount += flt(
+ flt(row.allocated_amount) * flt(exchange_rate),
+ precision("base_paid_amount")
+ );
}
});
frm.set_value("total_allocated_amount", Math.abs(total_allocated_amount));
@@ -935,36 +1128,53 @@
frm.events.set_unallocated_amount(frm);
},
- set_unallocated_amount: function(frm) {
+ set_unallocated_amount: function (frm) {
var unallocated_amount = 0;
- var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
- function(d) { return flt(d.amount) }));
+ var total_deductions = frappe.utils.sum(
+ $.map(frm.doc.deductions || [], function (d) {
+ return flt(d.amount);
+ })
+ );
- if(frm.doc.party) {
- if(frm.doc.payment_type == "Receive"
- && frm.doc.base_total_allocated_amount < frm.doc.base_received_amount + total_deductions
- && frm.doc.total_allocated_amount < frm.doc.paid_amount + (total_deductions / frm.doc.source_exchange_rate)) {
- unallocated_amount = (frm.doc.base_received_amount + total_deductions - flt(frm.doc.base_total_taxes_and_charges)
- - frm.doc.base_total_allocated_amount) / frm.doc.source_exchange_rate;
- } else if (frm.doc.payment_type == "Pay"
- && frm.doc.base_total_allocated_amount < frm.doc.base_paid_amount - total_deductions
- && frm.doc.total_allocated_amount < frm.doc.received_amount + (total_deductions / frm.doc.target_exchange_rate)) {
- unallocated_amount = (frm.doc.base_paid_amount + flt(frm.doc.base_total_taxes_and_charges) - (total_deductions
- + frm.doc.base_total_allocated_amount)) / frm.doc.target_exchange_rate;
+ if (frm.doc.party) {
+ if (
+ frm.doc.payment_type == "Receive" &&
+ frm.doc.base_total_allocated_amount < frm.doc.base_received_amount + total_deductions &&
+ frm.doc.total_allocated_amount <
+ frm.doc.paid_amount + total_deductions / frm.doc.source_exchange_rate
+ ) {
+ unallocated_amount =
+ (frm.doc.base_received_amount +
+ total_deductions -
+ flt(frm.doc.base_total_taxes_and_charges) -
+ frm.doc.base_total_allocated_amount) /
+ frm.doc.source_exchange_rate;
+ } else if (
+ frm.doc.payment_type == "Pay" &&
+ frm.doc.base_total_allocated_amount < frm.doc.base_paid_amount - total_deductions &&
+ frm.doc.total_allocated_amount <
+ frm.doc.received_amount + total_deductions / frm.doc.target_exchange_rate
+ ) {
+ unallocated_amount =
+ (frm.doc.base_paid_amount +
+ flt(frm.doc.base_total_taxes_and_charges) -
+ (total_deductions + frm.doc.base_total_allocated_amount)) /
+ frm.doc.target_exchange_rate;
}
}
frm.set_value("unallocated_amount", unallocated_amount);
frm.trigger("set_difference_amount");
},
- set_difference_amount: function(frm) {
+ set_difference_amount: function (frm) {
var difference_amount = 0;
- var base_unallocated_amount = flt(frm.doc.unallocated_amount) *
- (frm.doc.payment_type=="Receive" ? frm.doc.source_exchange_rate : frm.doc.target_exchange_rate);
+ var base_unallocated_amount =
+ flt(frm.doc.unallocated_amount) *
+ (frm.doc.payment_type == "Receive" ? frm.doc.source_exchange_rate : frm.doc.target_exchange_rate);
var base_party_amount = flt(frm.doc.base_total_allocated_amount) + base_unallocated_amount;
- if(frm.doc.payment_type == "Receive") {
+ if (frm.doc.payment_type == "Receive") {
difference_amount = base_party_amount - flt(frm.doc.base_received_amount);
} else if (frm.doc.payment_type == "Pay") {
difference_amount = flt(frm.doc.base_paid_amount) - base_party_amount;
@@ -972,51 +1182,67 @@
difference_amount = flt(frm.doc.base_paid_amount) - flt(frm.doc.base_received_amount);
}
- var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
- function(d) { return flt(d.amount) }));
+ var total_deductions = frappe.utils.sum(
+ $.map(frm.doc.deductions || [], function (d) {
+ return flt(d.amount);
+ })
+ );
- frm.set_value("difference_amount", difference_amount - total_deductions +
- flt(frm.doc.base_total_taxes_and_charges));
+ frm.set_value(
+ "difference_amount",
+ difference_amount - total_deductions + flt(frm.doc.base_total_taxes_and_charges)
+ );
frm.events.hide_unhide_fields(frm);
},
- unallocated_amount: function(frm) {
+ unallocated_amount: function (frm) {
frm.trigger("set_difference_amount");
},
- check_mandatory_to_fetch: function(frm) {
- $.each(["Company", "Party Type", "Party", "payment_type"], function(i, field) {
- if(!frm.doc[frappe.model.scrub(field)]) {
+ check_mandatory_to_fetch: function (frm) {
+ $.each(["Company", "Party Type", "Party", "payment_type"], function (i, field) {
+ if (!frm.doc[frappe.model.scrub(field)]) {
frappe.msgprint(__("Please select {0} first", [field]));
return false;
}
-
});
},
- validate_reference_document: function(frm, row) {
- var _validate = function(i, row) {
+ validate_reference_document: function (frm, row) {
+ var _validate = function (i, row) {
if (!row.reference_doctype) {
return;
}
- if(frm.doc.party_type=="Customer" &&
+ if (
+ frm.doc.party_type == "Customer" &&
!in_list(["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"], row.reference_doctype)
) {
frappe.model.set_value(row.doctype, row.name, "reference_doctype", null);
- frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry or Dunning", [row.idx]));
+ frappe.msgprint(
+ __(
+ "Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry or Dunning",
+ [row.idx]
+ )
+ );
return false;
}
- if(frm.doc.party_type=="Supplier" &&
+ if (
+ frm.doc.party_type == "Supplier" &&
!in_list(["Purchase Order", "Purchase Invoice", "Journal Entry"], row.reference_doctype)
) {
frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
- frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
+ frappe.msgprint(
+ __(
+ "Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry",
+ [row.idx]
+ )
+ );
return false;
}
- }
+ };
if (row) {
_validate(0, row);
@@ -1025,28 +1251,31 @@
}
},
- write_off_difference_amount: function(frm) {
+ write_off_difference_amount: function (frm) {
frm.events.set_deductions_entry(frm, "write_off_account");
},
- set_exchange_gain_loss: function(frm) {
+ set_exchange_gain_loss: function (frm) {
frm.events.set_deductions_entry(frm, "exchange_gain_loss_account");
},
- set_deductions_entry: function(frm, account) {
- if(frm.doc.difference_amount) {
+ set_deductions_entry: function (frm, account) {
+ if (frm.doc.difference_amount) {
frappe.call({
method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_company_defaults",
args: {
- company: frm.doc.company
+ company: frm.doc.company,
},
- callback: function(r, rt) {
- if(r.message) {
- const write_off_row = $.map(frm.doc["deductions"] || [], function(t) {
- return t.account==r.message[account] ? t : null; });
+ callback: function (r, rt) {
+ if (r.message) {
+ const write_off_row = $.map(frm.doc["deductions"] || [], function (t) {
+ return t.account == r.message[account] ? t : null;
+ });
- const difference_amount = flt(frm.doc.difference_amount,
- precision("difference_amount"));
+ const difference_amount = flt(
+ frm.doc.difference_amount,
+ precision("difference_amount")
+ );
const add_deductions = (details) => {
let row = null;
@@ -1061,73 +1290,77 @@
if (row) {
row.amount = flt(row.amount) + difference_amount;
} else {
- frappe.msgprint(__("No gain or loss in the exchange rate"))
+ frappe.msgprint(__("No gain or loss in the exchange rate"));
}
refresh_field("deductions");
};
if (!r.message[account]) {
- frappe.prompt({
- label: __("Please Specify Account"),
- fieldname: account,
- fieldtype: "Link",
- options: "Account",
- get_query: () => ({
- filters: {
- company: frm.doc.company,
- }
- })
- }, (values) => {
- const details = Object.assign({}, r.message, values);
- add_deductions(details);
- }, __(frappe.unscrub(account)));
+ frappe.prompt(
+ {
+ label: __("Please Specify Account"),
+ fieldname: account,
+ fieldtype: "Link",
+ options: "Account",
+ get_query: () => ({
+ filters: {
+ company: frm.doc.company,
+ },
+ }),
+ },
+ (values) => {
+ const details = Object.assign({}, r.message, values);
+ add_deductions(details);
+ },
+ __(frappe.unscrub(account))
+ );
} else {
add_deductions(r.message);
}
frm.events.set_unallocated_amount(frm);
}
- }
- })
- }
- },
-
- bank_account: function(frm) {
- const field = frm.doc.payment_type == "Pay" ? "paid_from":"paid_to";
- if (frm.doc.bank_account && in_list(['Pay', 'Receive'], frm.doc.payment_type)) {
- frappe.call({
- method: "erpnext.accounts.doctype.bank_account.bank_account.get_bank_account_details",
- args: {
- bank_account: frm.doc.bank_account
},
- callback: function(r) {
- if (r.message) {
- frm.set_value(field, r.message.account);
- frm.set_value('bank', r.message.bank);
- frm.set_value('bank_account_no', r.message.bank_account_no);
- }
- }
});
}
},
- sales_taxes_and_charges_template: function(frm) {
- frm.trigger('fetch_taxes_from_template');
+ bank_account: function (frm) {
+ const field = frm.doc.payment_type == "Pay" ? "paid_from" : "paid_to";
+ if (frm.doc.bank_account && in_list(["Pay", "Receive"], frm.doc.payment_type)) {
+ frappe.call({
+ method: "erpnext.accounts.doctype.bank_account.bank_account.get_bank_account_details",
+ args: {
+ bank_account: frm.doc.bank_account,
+ },
+ callback: function (r) {
+ if (r.message) {
+ frm.set_value(field, r.message.account);
+ frm.set_value("bank", r.message.bank);
+ frm.set_value("bank_account_no", r.message.bank_account_no);
+ }
+ },
+ });
+ }
},
- purchase_taxes_and_charges_template: function(frm) {
- frm.trigger('fetch_taxes_from_template');
+ sales_taxes_and_charges_template: function (frm) {
+ frm.trigger("fetch_taxes_from_template");
},
- fetch_taxes_from_template: function(frm) {
- let master_doctype = '';
- let taxes_and_charges = '';
+ purchase_taxes_and_charges_template: function (frm) {
+ frm.trigger("fetch_taxes_from_template");
+ },
- if (frm.doc.party_type == 'Supplier') {
- master_doctype = 'Purchase Taxes and Charges Template';
+ fetch_taxes_from_template: function (frm) {
+ let master_doctype = "";
+ let taxes_and_charges = "";
+
+ if (frm.doc.party_type == "Supplier") {
+ master_doctype = "Purchase Taxes and Charges Template";
taxes_and_charges = frm.doc.purchase_taxes_and_charges_template;
- } else if (frm.doc.party_type == 'Customer') {
- master_doctype = 'Sales Taxes and Charges Template';
+ } else if (frm.doc.party_type == "Customer") {
+ master_doctype = "Sales Taxes and Charges Template";
taxes_and_charges = frm.doc.sales_taxes_and_charges_template;
}
@@ -1138,16 +1371,16 @@
frappe.call({
method: "erpnext.controllers.accounts_controller.get_taxes_and_charges",
args: {
- "master_doctype": master_doctype,
- "master_name": taxes_and_charges
+ master_doctype: master_doctype,
+ master_name: taxes_and_charges,
},
- callback: function(r) {
- if(!r.exc && r.message) {
+ callback: function (r) {
+ if (!r.exc && r.message) {
// set taxes table
- if(r.message) {
+ if (r.message) {
for (let tax of r.message) {
- if (tax.charge_type === 'On Net Total') {
- tax.charge_type = 'On Paid Amount';
+ if (tax.charge_type === "On Net Total") {
+ tax.charge_type = "On Paid Amount";
}
frm.add_child("taxes", tax);
}
@@ -1155,58 +1388,77 @@
frm.events.set_unallocated_amount(frm);
}
}
- }
+ },
});
},
- apply_taxes: function(frm) {
+ apply_taxes: function (frm) {
frm.events.initialize_taxes(frm);
frm.events.determine_exclusive_rate(frm);
frm.events.calculate_taxes(frm);
},
- initialize_taxes: function(frm) {
- $.each(frm.doc["taxes"] || [], function(i, tax) {
+ initialize_taxes: function (frm) {
+ $.each(frm.doc["taxes"] || [], function (i, tax) {
frm.events.validate_taxes_and_charges(tax);
frm.events.validate_inclusive_tax(tax);
tax.item_wise_tax_detail = {};
- let tax_fields = ["total", "tax_fraction_for_current_item",
- "grand_total_fraction_for_current_item"];
+ let tax_fields = [
+ "total",
+ "tax_fraction_for_current_item",
+ "grand_total_fraction_for_current_item",
+ ];
if (cstr(tax.charge_type) != "Actual") {
tax_fields.push("tax_amount");
}
- $.each(tax_fields, function(i, fieldname) { tax[fieldname] = 0.0; });
+ $.each(tax_fields, function (i, fieldname) {
+ tax[fieldname] = 0.0;
+ });
frm.doc.paid_amount_after_tax = frm.doc.base_paid_amount;
});
},
- validate_taxes_and_charges: function(d) {
+ validate_taxes_and_charges: function (d) {
let msg = "";
if (d.account_head && !d.description) {
// set description from account head
- d.description = d.account_head.split(' - ').slice(0, -1).join(' - ');
+ d.description = d.account_head.split(" - ").slice(0, -1).join(" - ");
}
if (!d.charge_type && (d.row_id || d.rate || d.tax_amount)) {
msg = __("Please select Charge Type first");
d.row_id = "";
d.rate = d.tax_amount = 0.0;
- } else if ((d.charge_type == 'Actual' || d.charge_type == 'On Net Total' || d.charge_type == 'On Paid Amount') && d.row_id) {
- msg = __("Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'");
+ } else if (
+ (d.charge_type == "Actual" ||
+ d.charge_type == "On Net Total" ||
+ d.charge_type == "On Paid Amount") &&
+ d.row_id
+ ) {
+ msg = __(
+ "Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'"
+ );
d.row_id = "";
- } else if ((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id) {
+ } else if (
+ (d.charge_type == "On Previous Row Amount" || d.charge_type == "On Previous Row Total") &&
+ d.row_id
+ ) {
if (d.idx == 1) {
- msg = __("Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row");
- d.charge_type = '';
+ msg = __(
+ "Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"
+ );
+ d.charge_type = "";
} else if (!d.row_id) {
msg = __("Please specify a valid Row ID for row {0} in table {1}", [d.idx, __(d.doctype)]);
d.row_id = "";
} else if (d.row_id && d.row_id >= d.idx) {
- msg = __("Cannot refer row number greater than or equal to current row number for this Charge type");
+ msg = __(
+ "Cannot refer row number greater than or equal to current row number for this Charge type"
+ );
d.row_id = "";
}
}
@@ -1215,34 +1467,39 @@
refresh_field("taxes");
frappe.throw(msg);
}
-
},
- validate_inclusive_tax: function(tax) {
- let actual_type_error = function() {
- let msg = __("Actual type tax cannot be included in Item rate in row {0}", [tax.idx])
+ validate_inclusive_tax: function (tax) {
+ let actual_type_error = function () {
+ let msg = __("Actual type tax cannot be included in Item rate in row {0}", [tax.idx]);
frappe.throw(msg);
};
- let on_previous_row_error = function(row_range) {
- let msg = __("For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included",
- [tax.idx, __(tax.doctype), tax.charge_type, row_range])
+ let on_previous_row_error = function (row_range) {
+ let msg = __("For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included", [
+ tax.idx,
+ __(tax.doctype),
+ tax.charge_type,
+ row_range,
+ ]);
frappe.throw(msg);
};
- if(cint(tax.included_in_paid_amount)) {
- if(tax.charge_type == "Actual") {
+ if (cint(tax.included_in_paid_amount)) {
+ if (tax.charge_type == "Actual") {
// inclusive tax cannot be of type Actual
actual_type_error();
- } else if(tax.charge_type == "On Previous Row Amount" &&
+ } else if (
+ tax.charge_type == "On Previous Row Amount" &&
!cint(this.frm.doc["taxes"][tax.row_id - 1].included_in_paid_amount)
) {
// referred row should also be an inclusive tax
on_previous_row_error(tax.row_id);
- } else if(tax.charge_type == "On Previous Row Total") {
- let taxes_not_included = $.map(this.frm.doc["taxes"].slice(0, tax.row_id),
- function(t) { return cint(t.included_in_paid_amount) ? null : t; });
- if(taxes_not_included.length > 0) {
+ } else if (tax.charge_type == "On Previous Row Total") {
+ let taxes_not_included = $.map(this.frm.doc["taxes"].slice(0, tax.row_id), function (t) {
+ return cint(t.included_in_paid_amount) ? null : t;
+ });
+ if (taxes_not_included.length > 0) {
// all rows above this tax should be inclusive
on_previous_row_error(tax.row_id == 1 ? "1" : "1 - " + tax.row_id);
}
@@ -1250,55 +1507,55 @@
}
},
- determine_exclusive_rate: function(frm) {
+ determine_exclusive_rate: function (frm) {
let has_inclusive_tax = false;
- $.each(frm.doc["taxes"] || [], function(i, row) {
- if(cint(row.included_in_paid_amount)) has_inclusive_tax = true;
+ $.each(frm.doc["taxes"] || [], function (i, row) {
+ if (cint(row.included_in_paid_amount)) has_inclusive_tax = true;
});
- if(has_inclusive_tax==false) return;
+ if (has_inclusive_tax == false) return;
let cumulated_tax_fraction = 0.0;
- $.each(frm.doc["taxes"] || [], function(i, tax) {
+ $.each(frm.doc["taxes"] || [], function (i, tax) {
tax.tax_fraction_for_current_item = frm.events.get_current_tax_fraction(frm, tax);
- if(i==0) {
+ if (i == 0) {
tax.grand_total_fraction_for_current_item = 1 + tax.tax_fraction_for_current_item;
} else {
tax.grand_total_fraction_for_current_item =
- frm.doc["taxes"][i-1].grand_total_fraction_for_current_item +
+ frm.doc["taxes"][i - 1].grand_total_fraction_for_current_item +
tax.tax_fraction_for_current_item;
}
cumulated_tax_fraction += tax.tax_fraction_for_current_item;
- frm.doc.paid_amount_after_tax = flt(frm.doc.base_paid_amount/(1+cumulated_tax_fraction))
+ frm.doc.paid_amount_after_tax = flt(frm.doc.base_paid_amount / (1 + cumulated_tax_fraction));
});
},
- get_current_tax_fraction: function(frm, tax) {
+ get_current_tax_fraction: function (frm, tax) {
let current_tax_fraction = 0.0;
- if(cint(tax.included_in_paid_amount)) {
+ if (cint(tax.included_in_paid_amount)) {
let tax_rate = tax.rate;
- if(tax.charge_type == "On Paid Amount") {
- current_tax_fraction = (tax_rate / 100.0);
- } else if(tax.charge_type == "On Previous Row Amount") {
- current_tax_fraction = (tax_rate / 100.0) *
- frm.doc["taxes"][cint(tax.row_id) - 1].tax_fraction_for_current_item;
- } else if(tax.charge_type == "On Previous Row Total") {
- current_tax_fraction = (tax_rate / 100.0) *
+ if (tax.charge_type == "On Paid Amount") {
+ current_tax_fraction = tax_rate / 100.0;
+ } else if (tax.charge_type == "On Previous Row Amount") {
+ current_tax_fraction =
+ (tax_rate / 100.0) * frm.doc["taxes"][cint(tax.row_id) - 1].tax_fraction_for_current_item;
+ } else if (tax.charge_type == "On Previous Row Total") {
+ current_tax_fraction =
+ (tax_rate / 100.0) *
frm.doc["taxes"][cint(tax.row_id) - 1].grand_total_fraction_for_current_item;
}
}
- if(tax.add_deduct_tax && tax.add_deduct_tax == "Deduct") {
+ if (tax.add_deduct_tax && tax.add_deduct_tax == "Deduct") {
current_tax_fraction *= -1;
}
return current_tax_fraction;
},
-
- calculate_taxes: function(frm) {
+ calculate_taxes: function (frm) {
frm.doc.total_taxes_and_charges = 0.0;
frm.doc.base_total_taxes_and_charges = 0.0;
@@ -1306,13 +1563,13 @@
let actual_tax_dict = {};
// maintain actual tax rate based on idx
- $.each(frm.doc["taxes"] || [], function(i, tax) {
+ $.each(frm.doc["taxes"] || [], function (i, tax) {
if (tax.charge_type == "Actual") {
actual_tax_dict[tax.idx] = flt(tax.tax_amount, precision("tax_amount", tax));
}
});
- $.each(frm.doc["taxes"] || [], function(i, tax) {
+ $.each(frm.doc["taxes"] || [], function (i, tax) {
let current_tax_amount = frm.events.get_current_tax_amount(frm, tax);
// Adjust divisional loss to the last item
@@ -1325,29 +1582,28 @@
// tax accounts are only in company currency
tax.base_tax_amount = current_tax_amount;
- current_tax_amount *= (tax.add_deduct_tax == "Deduct") ? -1.0 : 1.0;
+ current_tax_amount *= tax.add_deduct_tax == "Deduct" ? -1.0 : 1.0;
- if(i==0) {
+ if (i == 0) {
tax.total = flt(frm.doc.paid_amount_after_tax + current_tax_amount, precision("total", tax));
} else {
- tax.total = flt(frm.doc["taxes"][i-1].total + current_tax_amount, precision("total", tax));
+ tax.total = flt(frm.doc["taxes"][i - 1].total + current_tax_amount, precision("total", tax));
}
// tac accounts are only in company currency
- tax.base_total = tax.total
+ tax.base_total = tax.total;
// calculate total taxes and base total taxes
- if(frm.doc.payment_type == "Pay") {
+ if (frm.doc.payment_type == "Pay") {
// tax accounts only have company currency
- if(tax.currency != frm.doc.paid_to_account_currency) {
+ if (tax.currency != frm.doc.paid_to_account_currency) {
//total_taxes_and_charges has the target currency. so using target conversion rate
frm.doc.total_taxes_and_charges += flt(current_tax_amount / frm.doc.target_exchange_rate);
-
} else {
frm.doc.total_taxes_and_charges += current_tax_amount;
}
- } else if(frm.doc.payment_type == "Receive") {
- if(tax.currency != frm.doc.paid_from_account_currency) {
+ } else if (frm.doc.payment_type == "Receive") {
+ if (tax.currency != frm.doc.paid_from_account_currency) {
//total_taxes_and_charges has the target currency. so using source conversion rate
frm.doc.total_taxes_and_charges += flt(current_tax_amount / frm.doc.source_exchange_rate);
} else {
@@ -1357,49 +1613,48 @@
frm.doc.base_total_taxes_and_charges += tax.base_tax_amount;
- frm.refresh_field('taxes');
- frm.refresh_field('total_taxes_and_charges');
- frm.refresh_field('base_total_taxes_and_charges');
+ frm.refresh_field("taxes");
+ frm.refresh_field("total_taxes_and_charges");
+ frm.refresh_field("base_total_taxes_and_charges");
});
},
- get_current_tax_amount: function(frm, tax) {
+ get_current_tax_amount: function (frm, tax) {
let tax_rate = tax.rate;
let current_tax_amount = 0.0;
// To set row_id by default as previous row.
- if(["On Previous Row Amount", "On Previous Row Total"].includes(tax.charge_type)) {
+ if (["On Previous Row Amount", "On Previous Row Total"].includes(tax.charge_type)) {
if (tax.idx === 1) {
frappe.throw(
- __("Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
+ __(
+ "Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"
+ )
+ );
}
}
- if(tax.charge_type == "Actual") {
- current_tax_amount = flt(tax.tax_amount, precision("tax_amount", tax))
- } else if(tax.charge_type == "On Paid Amount") {
+ if (tax.charge_type == "Actual") {
+ current_tax_amount = flt(tax.tax_amount, precision("tax_amount", tax));
+ } else if (tax.charge_type == "On Paid Amount") {
current_tax_amount = flt((tax_rate / 100.0) * frm.doc.paid_amount_after_tax);
- } else if(tax.charge_type == "On Previous Row Amount") {
- current_tax_amount = flt((tax_rate / 100.0) *
- frm.doc["taxes"][cint(tax.row_id) - 1].tax_amount);
-
- } else if(tax.charge_type == "On Previous Row Total") {
- current_tax_amount = flt((tax_rate / 100.0) *
- frm.doc["taxes"][cint(tax.row_id) - 1].total);
+ } else if (tax.charge_type == "On Previous Row Amount") {
+ current_tax_amount = flt((tax_rate / 100.0) * frm.doc["taxes"][cint(tax.row_id) - 1].tax_amount);
+ } else if (tax.charge_type == "On Previous Row Total") {
+ current_tax_amount = flt((tax_rate / 100.0) * frm.doc["taxes"][cint(tax.row_id) - 1].total);
}
return current_tax_amount;
},
});
-
-frappe.ui.form.on('Payment Entry Reference', {
- reference_doctype: function(frm, cdt, cdn) {
+frappe.ui.form.on("Payment Entry Reference", {
+ reference_doctype: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
frm.events.validate_reference_document(frm, row);
},
- reference_name: function(frm, cdt, cdn) {
+ reference_name: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
if (row.reference_name && row.reference_doctype) {
return frappe.call({
@@ -1407,79 +1662,83 @@
args: {
reference_doctype: row.reference_doctype,
reference_name: row.reference_name,
- party_account_currency: frm.doc.payment_type=="Receive" ?
- frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency
+ party_account_currency:
+ frm.doc.payment_type == "Receive"
+ ? frm.doc.paid_from_account_currency
+ : frm.doc.paid_to_account_currency,
},
- callback: function(r, rt) {
- if(r.message) {
- $.each(r.message, function(field, value) {
+ callback: function (r, rt) {
+ if (r.message) {
+ $.each(r.message, function (field, value) {
frappe.model.set_value(cdt, cdn, field, value);
- })
+ });
- let allocated_amount = frm.doc.unallocated_amount > row.outstanding_amount ?
- row.outstanding_amount : frm.doc.unallocated_amount;
+ let allocated_amount =
+ frm.doc.unallocated_amount > row.outstanding_amount
+ ? row.outstanding_amount
+ : frm.doc.unallocated_amount;
- frappe.model.set_value(cdt, cdn, 'allocated_amount', allocated_amount);
+ frappe.model.set_value(cdt, cdn, "allocated_amount", allocated_amount);
frm.refresh_fields();
}
- }
- })
+ },
+ });
}
},
- allocated_amount: function(frm) {
+ allocated_amount: function (frm) {
frm.events.set_total_allocated_amount(frm);
},
- references_remove: function(frm) {
+ references_remove: function (frm) {
frm.events.set_total_allocated_amount(frm);
- }
-})
+ },
+});
-frappe.ui.form.on('Advance Taxes and Charges', {
- rate: function(frm) {
+frappe.ui.form.on("Advance Taxes and Charges", {
+ rate: function (frm) {
frm.events.apply_taxes(frm);
frm.events.set_unallocated_amount(frm);
},
- tax_amount : function(frm) {
+ tax_amount: function (frm) {
frm.events.apply_taxes(frm);
frm.events.set_unallocated_amount(frm);
},
- row_id: function(frm) {
+ row_id: function (frm) {
frm.events.apply_taxes(frm);
frm.events.set_unallocated_amount(frm);
},
- taxes_remove: function(frm) {
+ taxes_remove: function (frm) {
frm.events.apply_taxes(frm);
frm.events.set_unallocated_amount(frm);
},
- included_in_paid_amount: function(frm) {
+ included_in_paid_amount: function (frm) {
frm.events.apply_taxes(frm);
frm.events.set_unallocated_amount(frm);
},
- charge_type: function(frm) {
+ charge_type: function (frm) {
frm.events.apply_taxes(frm);
frm.events.set_unallocated_amount(frm);
- }
-})
+ },
+});
-frappe.ui.form.on('Payment Entry Deduction', {
- amount: function(frm) {
+frappe.ui.form.on("Payment Entry Deduction", {
+ amount: function (frm) {
frm.events.set_unallocated_amount(frm);
},
- deductions_remove: function(frm) {
+ deductions_remove: function (frm) {
frm.events.set_unallocated_amount(frm);
- }
-})
-frappe.ui.form.on('Payment Entry', {
- cost_center: function(frm){
- if (frm.doc.posting_date && (frm.doc.paid_from||frm.doc.paid_to)) {
+ },
+});
+frappe.ui.form.on("Payment Entry", {
+ cost_center: function (frm) {
+ if (frm.doc.posting_date && (frm.doc.paid_from || frm.doc.paid_to)) {
return frappe.call({
method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_party_and_account_balance",
args: {
@@ -1489,21 +1748,23 @@
paid_to: frm.doc.paid_to,
ptype: frm.doc.party_type,
pty: frm.doc.party,
- cost_center: frm.doc.cost_center
+ cost_center: frm.doc.cost_center,
},
- callback: function(r, rt) {
- if(r.message) {
+ callback: function (r, rt) {
+ if (r.message) {
frappe.run_serially([
() => {
- frm.set_value("paid_from_account_balance", r.message.paid_from_account_balance);
+ frm.set_value(
+ "paid_from_account_balance",
+ r.message.paid_from_account_balance
+ );
frm.set_value("paid_to_account_balance", r.message.paid_to_account_balance);
frm.set_value("party_balance", r.message.party_balance);
- }
+ },
]);
-
}
- }
+ },
});
}
},
-})
+});
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 77efe78..7970a3e 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -1271,7 +1271,13 @@
references = [x for x in self.get("references") if x.name == entry.name]
for ref in references:
- if ref.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Journal Entry"):
+ if ref.reference_doctype in (
+ "Sales Invoice",
+ "Purchase Invoice",
+ "Journal Entry",
+ "Sales Order",
+ "Purchase Order",
+ ):
self.add_advance_gl_for_reference(gl_entries, ref)
def add_advance_gl_for_reference(self, gl_entries, invoice):
@@ -1285,14 +1291,15 @@
"voucher_detail_no": invoice.name,
}
- posting_date = frappe.db.get_value(
- invoice.reference_doctype, invoice.reference_name, "posting_date"
- )
+ date_field = "posting_date"
+ if invoice.reference_doctype in ["Sales Order", "Purchase Order"]:
+ date_field = "transaction_date"
+ posting_date = frappe.db.get_value(invoice.reference_doctype, invoice.reference_name, date_field)
if getdate(posting_date) < getdate(self.posting_date):
posting_date = self.posting_date
- dr_or_cr = "credit" if invoice.reference_doctype == "Sales Invoice" else "debit"
+ dr_or_cr = "credit" if invoice.reference_doctype in ["Sales Invoice", "Sales Order"] else "debit"
args_dict["account"] = invoice.account
args_dict[dr_or_cr] = invoice.allocated_amount
args_dict[dr_or_cr + "_in_account_currency"] = invoice.allocated_amount
@@ -2197,6 +2204,11 @@
else:
outstanding_amount = flt(total_amount) - flt(ref_doc.get("advance_paid"))
+ if reference_doctype in ["Sales Order", "Purchase Order"]:
+ party_type = "Customer" if reference_doctype == "Sales Order" else "Supplier"
+ party_field = "customer" if reference_doctype == "Sales Order" else "supplier"
+ party = ref_doc.get(party_field)
+ account = get_party_account(party_type, party, ref_doc.company)
else:
# Get the exchange rate based on the posting date of the ref doc.
exchange_rate = get_exchange_rate(party_account_currency, company_currency, ref_doc.posting_date)
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js b/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
index 2d76fe6..6974e58 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
@@ -1,14 +1,13 @@
-frappe.listview_settings['Payment Entry'] = {
-
- onload: function(listview) {
+frappe.listview_settings["Payment Entry"] = {
+ onload: function (listview) {
if (listview.page.fields_dict.party_type) {
- listview.page.fields_dict.party_type.get_query = function() {
+ listview.page.fields_dict.party_type.get_query = function () {
return {
- "filters": {
- "name": ["in", Object.keys(frappe.boot.party_account_types)],
- }
+ filters: {
+ name: ["in", Object.keys(frappe.boot.party_account_types)],
+ },
};
};
}
- }
+ },
};
diff --git a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
index 8a03dd7..5a014b8 100644
--- a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
@@ -1070,6 +1070,8 @@
self.assertRaises(frappe.ValidationError, pe_draft.submit)
def test_details_update_on_reference_table(self):
+ from erpnext.accounts.party import get_party_account
+
so = make_sales_order(
customer="_Test Customer USD", currency="USD", qty=1, rate=100, do_not_submit=True
)
@@ -1084,6 +1086,7 @@
ref_details = get_reference_details(so.doctype, so.name, pe.paid_from_account_currency)
expected_response = {
+ "account": get_party_account("Customer", so.customer, so.company),
"total_amount": 5000.0,
"outstanding_amount": 5000.0,
"exchange_rate": 1.0,
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
index aff067e..f15c2bd 100644
--- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
@@ -1,11 +1,11 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('Payment Gateway Account', {
+frappe.ui.form.on("Payment Gateway Account", {
refresh(frm) {
erpnext.utils.check_payments_app();
- if(!frm.doc.__islocal) {
- frm.set_df_property('payment_gateway', 'read_only', 1);
+ if (!frm.doc.__islocal) {
+ frm.set_df_property("payment_gateway", "read_only", 1);
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js
index 5a7be8e..07fe831 100644
--- a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js
+++ b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js
@@ -1,8 +1,7 @@
// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Payment Ledger Entry', {
+frappe.ui.form.on("Payment Ledger Entry", {
// refresh: function(frm) {
-
// }
});
diff --git a/erpnext/accounts/doctype/payment_order/payment_order.js b/erpnext/accounts/doctype/payment_order/payment_order.js
index 6630e71..f009de5 100644
--- a/erpnext/accounts/doctype/payment_order/payment_order.js
+++ b/erpnext/accounts/doctype/payment_order/payment_order.js
@@ -1,61 +1,69 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Payment Order', {
- setup: function(frm) {
- frm.set_query("company_bank_account", function() {
+frappe.ui.form.on("Payment Order", {
+ setup: function (frm) {
+ frm.set_query("company_bank_account", function () {
return {
filters: {
- "is_company_account":1
- }
- }
+ is_company_account: 1,
+ },
+ };
});
- frm.set_df_property('references', 'cannot_add_rows', true);
+ frm.set_df_property("references", "cannot_add_rows", true);
},
- refresh: function(frm) {
+ refresh: function (frm) {
if (frm.doc.docstatus == 0) {
- frm.add_custom_button(__('Payment Request'), function() {
- frm.trigger("get_from_payment_request");
- }, __("Get Payments from"));
+ frm.add_custom_button(
+ __("Payment Request"),
+ function () {
+ frm.trigger("get_from_payment_request");
+ },
+ __("Get Payments from")
+ );
- frm.add_custom_button(__('Payment Entry'), function() {
- frm.trigger("get_from_payment_entry");
- }, __("Get Payments from"));
+ frm.add_custom_button(
+ __("Payment Entry"),
+ function () {
+ frm.trigger("get_from_payment_entry");
+ },
+ __("Get Payments from")
+ );
- frm.trigger('remove_button');
+ frm.trigger("remove_button");
}
// payment Entry
- if (frm.doc.docstatus===1 && frm.doc.payment_order_type==='Payment Request') {
- frm.add_custom_button(__('Create Payment Entries'), function() {
+ if (frm.doc.docstatus === 1 && frm.doc.payment_order_type === "Payment Request") {
+ frm.add_custom_button(__("Create Payment Entries"), function () {
frm.trigger("make_payment_records");
});
}
},
- remove_row_if_empty: function(frm) {
+ remove_row_if_empty: function (frm) {
// remove if first row is empty
if (frm.doc.references.length > 0 && !frm.doc.references[0].reference_name) {
frm.doc.references = [];
}
},
- remove_button: function(frm) {
+ remove_button: function (frm) {
// remove custom button of order type that is not imported
let label = ["Payment Request", "Payment Entry"];
if (frm.doc.references.length > 0 && frm.doc.payment_order_type) {
- label = label.reduce(x => {
- x!= frm.doc.payment_order_type;
+ label = label.reduce((x) => {
+ x != frm.doc.payment_order_type;
return x;
});
frm.remove_custom_button(label, "Get from");
}
},
- get_from_payment_entry: function(frm) {
+ get_from_payment_entry: function (frm) {
frm.trigger("remove_row_if_empty");
erpnext.utils.map_current_doc({
method: "erpnext.accounts.doctype.payment_entry.payment_entry.make_payment_order",
@@ -63,7 +71,7 @@
target: frm,
date_field: "posting_date",
setters: {
- party: frm.doc.supplier || ""
+ party: frm.doc.supplier || "",
},
get_query_filters: {
bank: frm.doc.bank,
@@ -71,70 +79,79 @@
payment_type: ["!=", "Receive"],
bank_account: frm.doc.company_bank_account,
paid_from: frm.doc.account,
- payment_order_status: ["=", "Initiated"]
- }
+ payment_order_status: ["=", "Initiated"],
+ },
});
},
- get_from_payment_request: function(frm) {
+ get_from_payment_request: function (frm) {
frm.trigger("remove_row_if_empty");
erpnext.utils.map_current_doc({
method: "erpnext.accounts.doctype.payment_request.payment_request.make_payment_order",
source_doctype: "Payment Request",
target: frm,
setters: {
- party: frm.doc.supplier || ""
+ party: frm.doc.supplier || "",
},
get_query_filters: {
bank: frm.doc.bank,
docstatus: 1,
status: ["=", "Initiated"],
- }
+ },
});
},
- make_payment_records: function(frm){
+ make_payment_records: function (frm) {
var dialog = new frappe.ui.Dialog({
title: __("For Supplier"),
fields: [
- {"fieldtype": "Link", "label": __("Supplier"), "fieldname": "supplier", "options":"Supplier",
- "get_query": function () {
+ {
+ fieldtype: "Link",
+ label: __("Supplier"),
+ fieldname: "supplier",
+ options: "Supplier",
+ get_query: function () {
return {
- query:"erpnext.accounts.doctype.payment_order.payment_order.get_supplier_query",
- filters: {'parent': frm.doc.name}
- }
- }, "reqd": 1
+ query: "erpnext.accounts.doctype.payment_order.payment_order.get_supplier_query",
+ filters: { parent: frm.doc.name },
+ };
+ },
+ reqd: 1,
},
- {"fieldtype": "Link", "label": __("Mode of Payment"), "fieldname": "mode_of_payment", "options":"Mode of Payment",
- "get_query": function () {
+ {
+ fieldtype: "Link",
+ label: __("Mode of Payment"),
+ fieldname: "mode_of_payment",
+ options: "Mode of Payment",
+ get_query: function () {
return {
- query:"erpnext.accounts.doctype.payment_order.payment_order.get_mop_query",
- filters: {'parent': frm.doc.name}
- }
- }
- }
- ]
+ query: "erpnext.accounts.doctype.payment_order.payment_order.get_mop_query",
+ filters: { parent: frm.doc.name },
+ };
+ },
+ },
+ ],
});
- dialog.set_primary_action(__("Submit"), function() {
+ dialog.set_primary_action(__("Submit"), function () {
var args = dialog.get_values();
- if(!args) return;
+ if (!args) return;
return frappe.call({
method: "erpnext.accounts.doctype.payment_order.payment_order.make_payment_records",
args: {
- "name": frm.doc.name,
- "supplier": args.supplier,
- "mode_of_payment": args.mode_of_payment
+ name: frm.doc.name,
+ supplier: args.supplier,
+ mode_of_payment: args.mode_of_payment,
},
freeze: true,
- callback: function(r) {
+ callback: function (r) {
dialog.hide();
frm.refresh();
- }
- })
- })
+ },
+ });
+ });
dialog.show();
},
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
index 99593de..cc99fe7 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
@@ -2,97 +2,94 @@
// For license information, please see license.txt
frappe.provide("erpnext.accounts");
-erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationController extends frappe.ui.form.Controller {
+erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationController extends (
+ frappe.ui.form.Controller
+) {
onload() {
- const default_company = frappe.defaults.get_default('company');
- this.frm.set_value('company', default_company);
+ const default_company = frappe.defaults.get_default("company");
+ this.frm.set_value("company", default_company);
- this.frm.set_value('party_type', '');
- this.frm.set_value('party', '');
- this.frm.set_value('receivable_payable_account', '');
+ this.frm.set_value("party_type", "");
+ this.frm.set_value("party", "");
+ this.frm.set_value("receivable_payable_account", "");
this.frm.set_query("party_type", () => {
return {
- "filters": {
- "name": ["in", Object.keys(frappe.boot.party_account_types)],
- }
- }
- });
-
- this.frm.set_query('receivable_payable_account', () => {
- return {
filters: {
- "company": this.frm.doc.company,
- "is_group": 0,
- "account_type": frappe.boot.party_account_types[this.frm.doc.party_type],
- "root_type": this.frm.doc.party_type == 'Customer' ? "Asset" : "Liability"
- }
+ name: ["in", Object.keys(frappe.boot.party_account_types)],
+ },
};
});
- this.frm.set_query('default_advance_account', () => {
+ this.frm.set_query("receivable_payable_account", () => {
return {
filters: {
- "company": this.frm.doc.company,
- "is_group": 0,
- "account_type": this.frm.doc.party_type == 'Customer' ? "Receivable": "Payable",
- "root_type": this.frm.doc.party_type == 'Customer' ? "Liability": "Asset"
- }
+ company: this.frm.doc.company,
+ is_group: 0,
+ account_type: frappe.boot.party_account_types[this.frm.doc.party_type],
+ root_type: this.frm.doc.party_type == "Customer" ? "Asset" : "Liability",
+ },
};
});
- this.frm.set_query('bank_cash_account', () => {
+ this.frm.set_query("default_advance_account", () => {
return {
- filters:[
- ['Account', 'company', '=', this.frm.doc.company],
- ['Account', 'is_group', '=', 0],
- ['Account', 'account_type', 'in', ['Bank', 'Cash']]
- ]
+ filters: {
+ company: this.frm.doc.company,
+ is_group: 0,
+ account_type: this.frm.doc.party_type == "Customer" ? "Receivable" : "Payable",
+ root_type: this.frm.doc.party_type == "Customer" ? "Liability" : "Asset",
+ },
+ };
+ });
+
+ this.frm.set_query("bank_cash_account", () => {
+ return {
+ filters: [
+ ["Account", "company", "=", this.frm.doc.company],
+ ["Account", "is_group", "=", 0],
+ ["Account", "account_type", "in", ["Bank", "Cash"]],
+ ],
};
});
this.frm.set_query("cost_center", () => {
return {
- "filters": {
- "company": this.frm.doc.company,
- "is_group": 0
- }
- }
+ filters: {
+ company: this.frm.doc.company,
+ is_group: 0,
+ },
+ };
});
}
refresh() {
this.frm.disable_save();
- this.frm.set_df_property('invoices', 'cannot_delete_rows', true);
- this.frm.set_df_property('payments', 'cannot_delete_rows', true);
- this.frm.set_df_property('allocation', 'cannot_delete_rows', true);
+ this.frm.set_df_property("invoices", "cannot_delete_rows", true);
+ this.frm.set_df_property("payments", "cannot_delete_rows", true);
+ this.frm.set_df_property("allocation", "cannot_delete_rows", true);
- this.frm.set_df_property('invoices', 'cannot_add_rows', true);
- this.frm.set_df_property('payments', 'cannot_add_rows', true);
- this.frm.set_df_property('allocation', 'cannot_add_rows', true);
-
+ this.frm.set_df_property("invoices", "cannot_add_rows", true);
+ this.frm.set_df_property("payments", "cannot_add_rows", true);
+ this.frm.set_df_property("allocation", "cannot_add_rows", true);
if (this.frm.doc.receivable_payable_account) {
- this.frm.add_custom_button(__('Get Unreconciled Entries'), () =>
+ this.frm.add_custom_button(__("Get Unreconciled Entries"), () =>
this.frm.trigger("get_unreconciled_entries")
);
- this.frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'primary');
+ this.frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "primary");
}
if (this.frm.doc.invoices.length && this.frm.doc.payments.length) {
- this.frm.add_custom_button(__('Allocate'), () =>
- this.frm.trigger("allocate")
- );
- this.frm.change_custom_button_type(__('Allocate'), null, 'primary');
- this.frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'default');
+ this.frm.add_custom_button(__("Allocate"), () => this.frm.trigger("allocate"));
+ this.frm.change_custom_button_type(__("Allocate"), null, "primary");
+ this.frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "default");
}
if (this.frm.doc.allocation.length) {
- this.frm.add_custom_button(__('Reconcile'), () =>
- this.frm.trigger("reconcile")
- );
- this.frm.change_custom_button_type(__('Reconcile'), null, 'primary');
- this.frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'default');
- this.frm.change_custom_button_type(__('Allocate'), null, 'default');
+ this.frm.add_custom_button(__("Reconcile"), () => this.frm.trigger("reconcile"));
+ this.frm.change_custom_button_type(__("Reconcile"), null, "primary");
+ this.frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "default");
+ this.frm.change_custom_button_type(__("Allocate"), null, "default");
}
this.frm.trigger("set_query_for_dimension_filters");
@@ -101,31 +98,39 @@
if (this.frm.doc.receivable_payable_account) {
this.frm.call({
doc: this.frm.doc,
- method: 'is_auto_process_enabled',
+ method: "is_auto_process_enabled",
callback: (r) => {
if (r.message) {
- this.frm.call({
- 'method': "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.is_any_doc_running",
- "args": {
- for_filter: {
- company: this.frm.doc.company,
- party_type: this.frm.doc.party_type,
- party: this.frm.doc.party,
- receivable_payable_account: this.frm.doc.receivable_payable_account
+ this.frm
+ .call({
+ method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.is_any_doc_running",
+ args: {
+ for_filter: {
+ company: this.frm.doc.company,
+ party_type: this.frm.doc.party_type,
+ party: this.frm.doc.party,
+ receivable_payable_account: this.frm.doc.receivable_payable_account,
+ },
+ },
+ })
+ .then((r) => {
+ if (r.message) {
+ let doc_link = frappe.utils.get_form_link(
+ "Process Payment Reconciliation",
+ r.message,
+ true
+ );
+ let msg = __(
+ "Payment Reconciliation Job: {0} is running for this party. Can't reconcile now.",
+ [doc_link]
+ );
+ this.frm.dashboard.add_comment(msg, "yellow");
}
- }
- }).then(r => {
- if (r.message) {
- let doc_link = frappe.utils.get_form_link("Process Payment Reconciliation", r.message, true);
- let msg = __("Payment Reconciliation Job: {0} is running for this party. Can't reconcile now.", [doc_link]);
- this.frm.dashboard.add_comment(msg, "yellow");
- }
- });
+ });
}
- }
+ },
});
}
-
}
set_query_for_dimension_filters() {
frappe.call({
@@ -135,29 +140,29 @@
},
callback: (r) => {
if (!r.exc && r.message) {
- r.message.forEach(x => {
+ r.message.forEach((x) => {
this.frm.set_query(x.fieldname, () => {
return {
- 'filters': x.filters
+ filters: x.filters,
};
});
});
}
- }
+ },
});
}
company() {
- this.frm.set_value('party', '');
- this.frm.set_value('receivable_payable_account', '');
+ this.frm.set_value("party", "");
+ this.frm.set_value("receivable_payable_account", "");
}
party_type() {
- this.frm.set_value('party', '');
+ this.frm.set_value("party", "");
}
party() {
- this.frm.set_value('receivable_payable_account', '');
+ this.frm.set_value("receivable_payable_account", "");
this.frm.trigger("clear_child_tables");
if (!this.frm.doc.receivable_payable_account && this.frm.doc.party_type && this.frm.doc.party) {
@@ -167,7 +172,7 @@
company: this.frm.doc.company,
party_type: this.frm.doc.party_type,
party: this.frm.doc.party,
- include_advance: 1
+ include_advance: 1,
},
callback: (r) => {
if (!r.exc && r.message) {
@@ -175,7 +180,7 @@
this.frm.set_value("default_advance_account", r.message[1]);
}
this.frm.refresh();
- }
+ },
});
}
}
@@ -193,7 +198,6 @@
this.frm.trigger("get_unreconciled_entries");
}
-
clear_child_tables() {
this.frm.clear_table("invoices");
this.frm.clear_table("payments");
@@ -205,52 +209,52 @@
this.frm.clear_table("allocation");
return this.frm.call({
doc: this.frm.doc,
- method: 'get_unreconciled_entries',
+ method: "get_unreconciled_entries",
callback: () => {
if (!(this.frm.doc.payments.length || this.frm.doc.invoices.length)) {
- frappe.throw({message: __("No Unreconciled Invoices and Payments found for this party and account")});
- } else if (!(this.frm.doc.invoices.length)) {
- frappe.throw({message: __("No Outstanding Invoices found for this party")});
- } else if (!(this.frm.doc.payments.length)) {
- frappe.throw({message: __("No Unreconciled Payments found for this party")});
+ frappe.throw({
+ message: __("No Unreconciled Invoices and Payments found for this party and account"),
+ });
+ } else if (!this.frm.doc.invoices.length) {
+ frappe.throw({ message: __("No Outstanding Invoices found for this party") });
+ } else if (!this.frm.doc.payments.length) {
+ frappe.throw({ message: __("No Unreconciled Payments found for this party") });
}
this.frm.refresh();
- }
+ },
});
-
}
allocate() {
let payments = this.frm.fields_dict.payments.grid.get_selected_children();
- if (!(payments.length)) {
+ if (!payments.length) {
payments = this.frm.doc.payments;
}
let invoices = this.frm.fields_dict.invoices.grid.get_selected_children();
- if (!(invoices.length)) {
+ if (!invoices.length) {
invoices = this.frm.doc.invoices;
}
return this.frm.call({
doc: this.frm.doc,
- method: 'allocate_entries',
+ method: "allocate_entries",
args: {
payments: payments,
- invoices: invoices
+ invoices: invoices,
},
callback: () => {
this.frm.refresh();
- }
+ },
});
}
reconcile() {
- var show_dialog = this.frm.doc.allocation.filter(d => d.difference_amount);
+ var show_dialog = this.frm.doc.allocation.filter((d) => d.difference_amount);
if (show_dialog && show_dialog.length) {
-
this.data = [];
const dialog = new frappe.ui.Dialog({
title: __("Select Difference Account"),
- size: 'extra-large',
+ size: "extra-large",
fields: [
{
fieldname: "allocation",
@@ -262,77 +266,89 @@
get_data: () => {
return this.data;
},
- fields: [{
- fieldtype:'Data',
- fieldname:"docname",
- in_list_view: 1,
- hidden: 1
- }, {
- fieldtype:'Data',
- fieldname:"reference_name",
- label: __("Voucher No"),
- in_list_view: 1,
- read_only: 1
- }, {
- fieldtype:'Date',
- fieldname:"gain_loss_posting_date",
- label: __("Posting Date"),
- in_list_view: 1,
- reqd: 1,
- }, {
-
- fieldtype:'Link',
- options: 'Account',
- in_list_view: 1,
- label: __("Difference Account"),
- fieldname: 'difference_account',
- reqd: 1,
- get_query: () => {
- return {
- filters: {
- company: this.frm.doc.company,
- is_group: 0
- }
- }
- }
- }, {
- fieldtype:'Currency',
- in_list_view: 1,
- label: __("Difference Amount"),
- fieldname: 'difference_amount',
- read_only: 1
- }]
+ fields: [
+ {
+ fieldtype: "Data",
+ fieldname: "docname",
+ in_list_view: 1,
+ hidden: 1,
+ },
+ {
+ fieldtype: "Data",
+ fieldname: "reference_name",
+ label: __("Voucher No"),
+ in_list_view: 1,
+ read_only: 1,
+ },
+ {
+ fieldtype: "Date",
+ fieldname: "gain_loss_posting_date",
+ label: __("Posting Date"),
+ in_list_view: 1,
+ reqd: 1,
+ },
+ {
+ fieldtype: "Link",
+ options: "Account",
+ in_list_view: 1,
+ label: __("Difference Account"),
+ fieldname: "difference_account",
+ reqd: 1,
+ get_query: () => {
+ return {
+ filters: {
+ company: this.frm.doc.company,
+ is_group: 0,
+ },
+ };
+ },
+ },
+ {
+ fieldtype: "Currency",
+ in_list_view: 1,
+ label: __("Difference Amount"),
+ fieldname: "difference_amount",
+ read_only: 1,
+ },
+ ],
},
{
- fieldtype: 'HTML',
- options: "<b> New Journal Entry will be posted for the difference amount </b>"
- }
+ fieldtype: "HTML",
+ options: "<b> New Journal Entry will be posted for the difference amount </b>",
+ },
],
primary_action: () => {
const args = dialog.get_values()["allocation"];
- args.forEach(d => {
- frappe.model.set_value("Payment Reconciliation Allocation", d.docname,
- "difference_account", d.difference_account);
- frappe.model.set_value("Payment Reconciliation Allocation", d.docname,
- "gain_loss_posting_date", d.gain_loss_posting_date);
-
+ args.forEach((d) => {
+ frappe.model.set_value(
+ "Payment Reconciliation Allocation",
+ d.docname,
+ "difference_account",
+ d.difference_account
+ );
+ frappe.model.set_value(
+ "Payment Reconciliation Allocation",
+ d.docname,
+ "gain_loss_posting_date",
+ d.gain_loss_posting_date
+ );
});
this.reconcile_payment_entries();
dialog.hide();
},
- primary_action_label: __('Reconcile Entries')
+ primary_action_label: __("Reconcile Entries"),
});
- this.frm.doc.allocation.forEach(d => {
+ this.frm.doc.allocation.forEach((d) => {
if (d.difference_amount) {
dialog.fields_dict.allocation.df.data.push({
- 'docname': d.name,
- 'reference_name': d.reference_name,
- 'difference_amount': d.difference_amount,
- 'difference_account': d.difference_account,
- 'gain_loss_posting_date': d.gain_loss_posting_date
+ docname: d.name,
+ reference_name: d.reference_name,
+ difference_amount: d.difference_amount,
+ difference_account: d.difference_account,
+ gain_loss_posting_date: d.gain_loss_posting_date,
});
}
});
@@ -348,41 +364,39 @@
reconcile_payment_entries() {
return this.frm.call({
doc: this.frm.doc,
- method: 'reconcile',
+ method: "reconcile",
callback: () => {
this.frm.clear_table("allocation");
this.frm.refresh();
- }
+ },
});
}
};
-frappe.ui.form.on('Payment Reconciliation Allocation', {
- allocated_amount: function(frm, cdt, cdn) {
+frappe.ui.form.on("Payment Reconciliation Allocation", {
+ allocated_amount: function (frm, cdt, cdn) {
let row = locals[cdt][cdn];
// filter invoice
- let invoice = frm.doc.invoices.filter((x) => (x.invoice_number == row.invoice_number));
+ let invoice = frm.doc.invoices.filter((x) => x.invoice_number == row.invoice_number);
// filter payment
- let payment = frm.doc.payments.filter((x) => (x.reference_name == row.reference_name));
+ let payment = frm.doc.payments.filter((x) => x.reference_name == row.reference_name);
frm.call({
doc: frm.doc,
- method: 'calculate_difference_on_allocation_change',
+ method: "calculate_difference_on_allocation_change",
args: {
payment_entry: payment,
invoice: invoice,
- allocated_amount: row.allocated_amount
+ allocated_amount: row.allocated_amount,
},
callback: (r) => {
if (r.message) {
row.difference_amount = r.message;
frm.refresh();
}
- }
+ },
});
- }
+ },
});
-
-
-extend_cscript(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({ frm: cur_frm }));
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.js b/erpnext/accounts/doctype/payment_request/payment_request.js
index c85cd42..d07f824 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.js
+++ b/erpnext/accounts/doctype/payment_request/payment_request.js
@@ -1,87 +1,99 @@
-cur_frm.add_fetch("payment_gateway_account", "payment_account", "payment_account")
-cur_frm.add_fetch("payment_gateway_account", "payment_gateway", "payment_gateway")
-cur_frm.add_fetch("payment_gateway_account", "message", "message")
+cur_frm.add_fetch("payment_gateway_account", "payment_account", "payment_account");
+cur_frm.add_fetch("payment_gateway_account", "payment_gateway", "payment_gateway");
+cur_frm.add_fetch("payment_gateway_account", "message", "message");
frappe.ui.form.on("Payment Request", {
- setup: function(frm) {
- frm.set_query("party_type", function() {
+ setup: function (frm) {
+ frm.set_query("party_type", function () {
return {
query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
};
});
- }
-})
+ },
+});
-frappe.ui.form.on("Payment Request", "onload", function(frm, dt, dn){
+frappe.ui.form.on("Payment Request", "onload", function (frm, dt, dn) {
if (frm.doc.reference_doctype) {
frappe.call({
- method:"erpnext.accounts.doctype.payment_request.payment_request.get_print_format_list",
- args: {"ref_doctype": frm.doc.reference_doctype},
- callback:function(r){
- set_field_options("print_format", r.message["print_format"])
- }
- })
+ method: "erpnext.accounts.doctype.payment_request.payment_request.get_print_format_list",
+ args: { ref_doctype: frm.doc.reference_doctype },
+ callback: function (r) {
+ set_field_options("print_format", r.message["print_format"]);
+ },
+ });
}
-})
+});
-frappe.ui.form.on("Payment Request", "refresh", function(frm) {
- if(frm.doc.status == 'Failed'){
+frappe.ui.form.on("Payment Request", "refresh", function (frm) {
+ if (frm.doc.status == "Failed") {
frm.set_intro(__("Failure: {0}", [frm.doc.failed_reason]), "red");
}
- if(frm.doc.payment_request_type == 'Inward' && frm.doc.payment_channel !== "Phone" &&
- !in_list(["Initiated", "Paid"], frm.doc.status) && !frm.doc.__islocal && frm.doc.docstatus==1){
- frm.add_custom_button(__('Resend Payment Email'), function(){
+ if (
+ frm.doc.payment_request_type == "Inward" &&
+ frm.doc.payment_channel !== "Phone" &&
+ !in_list(["Initiated", "Paid"], frm.doc.status) &&
+ !frm.doc.__islocal &&
+ frm.doc.docstatus == 1
+ ) {
+ frm.add_custom_button(__("Resend Payment Email"), function () {
frappe.call({
method: "erpnext.accounts.doctype.payment_request.payment_request.resend_payment_email",
- args: {"docname": frm.doc.name},
+ args: { docname: frm.doc.name },
freeze: true,
freeze_message: __("Sending"),
- callback: function(r){
- if(!r.exc) {
+ callback: function (r) {
+ if (!r.exc) {
frappe.msgprint(__("Message Sent"));
}
- }
+ },
});
});
}
- if((!frm.doc.payment_gateway_account || frm.doc.payment_request_type == "Outward") && frm.doc.status == "Initiated") {
- frm.add_custom_button(__('Create Payment Entry'), function(){
+ if (
+ (!frm.doc.payment_gateway_account || frm.doc.payment_request_type == "Outward") &&
+ frm.doc.status == "Initiated"
+ ) {
+ frm.add_custom_button(__("Create Payment Entry"), function () {
frappe.call({
method: "erpnext.accounts.doctype.payment_request.payment_request.make_payment_entry",
- args: {"docname": frm.doc.name},
+ args: { docname: frm.doc.name },
freeze: true,
- callback: function(r){
- if(!r.exc) {
+ callback: function (r) {
+ if (!r.exc) {
var doc = frappe.model.sync(r.message);
frappe.set_route("Form", r.message.doctype, r.message.name);
}
- }
+ },
});
}).addClass("btn-primary");
}
});
-frappe.ui.form.on("Payment Request", "is_a_subscription", function(frm) {
+frappe.ui.form.on("Payment Request", "is_a_subscription", function (frm) {
frm.toggle_reqd("payment_gateway_account", frm.doc.is_a_subscription);
frm.toggle_reqd("subscription_plans", frm.doc.is_a_subscription);
if (frm.doc.is_a_subscription && frm.doc.reference_doctype && frm.doc.reference_name) {
frappe.call({
method: "erpnext.accounts.doctype.payment_request.payment_request.get_subscription_details",
- args: {"reference_doctype": frm.doc.reference_doctype, "reference_name": frm.doc.reference_name},
+ args: { reference_doctype: frm.doc.reference_doctype, reference_name: frm.doc.reference_name },
freeze: true,
- callback: function(data){
- if(!data.exc) {
- $.each(data.message || [], function(i, v){
- var d = frappe.model.add_child(frm.doc, "Subscription Plan Detail", "subscription_plans");
+ callback: function (data) {
+ if (!data.exc) {
+ $.each(data.message || [], function (i, v) {
+ var d = frappe.model.add_child(
+ frm.doc,
+ "Subscription Plan Detail",
+ "subscription_plans"
+ );
d.qty = v.qty;
d.plan = v.plan;
});
frm.refresh_field("subscription_plans");
}
- }
+ },
});
}
});
diff --git a/erpnext/accounts/doctype/payment_request/payment_request_list.js b/erpnext/accounts/doctype/payment_request/payment_request_list.js
index 43f7856..6e3dcef 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request_list.js
+++ b/erpnext/accounts/doctype/payment_request/payment_request_list.js
@@ -1,26 +1,21 @@
-frappe.listview_settings['Payment Request'] = {
+frappe.listview_settings["Payment Request"] = {
add_fields: ["status"],
- get_indicator: function(doc) {
- if(doc.status == "Draft") {
+ get_indicator: function (doc) {
+ if (doc.status == "Draft") {
return [__("Draft"), "gray", "status,=,Draft"];
}
- if(doc.status == "Requested") {
+ if (doc.status == "Requested") {
return [__("Requested"), "green", "status,=,Requested"];
- }
- else if(doc.status == "Initiated") {
+ } else if (doc.status == "Initiated") {
return [__("Initiated"), "green", "status,=,Initiated"];
- }
- else if(doc.status == "Partially Paid") {
+ } else if (doc.status == "Partially Paid") {
return [__("Partially Paid"), "orange", "status,=,Partially Paid"];
- }
- else if(doc.status == "Paid") {
+ } else if (doc.status == "Paid") {
return [__("Paid"), "blue", "status,=,Paid"];
- }
- else if(doc.status == "Failed") {
+ } else if (doc.status == "Failed") {
return [__("Failed"), "red", "status,=,Failed"];
- }
- else if(doc.status == "Cancelled") {
+ } else if (doc.status == "Cancelled") {
return [__("Cancelled"), "red", "status,=,Cancelled"];
}
- }
-}
+ },
+};
diff --git a/erpnext/accounts/doctype/payment_term/payment_term.js b/erpnext/accounts/doctype/payment_term/payment_term.js
index 0898a09..96cc507 100644
--- a/erpnext/accounts/doctype/payment_term/payment_term.js
+++ b/erpnext/accounts/doctype/payment_term/payment_term.js
@@ -1,22 +1,24 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Payment Term', {
+frappe.ui.form.on("Payment Term", {
onload(frm) {
- frm.trigger('set_dynamic_description');
+ frm.trigger("set_dynamic_description");
},
discount(frm) {
- frm.trigger('set_dynamic_description');
+ frm.trigger("set_dynamic_description");
},
discount_type(frm) {
- frm.trigger('set_dynamic_description');
+ frm.trigger("set_dynamic_description");
},
set_dynamic_description(frm) {
if (frm.doc.discount) {
- let description = __("{0}% of total invoice value will be given as discount.", [frm.doc.discount]);
- if (frm.doc.discount_type == 'Amount') {
+ let description = __("{0}% of total invoice value will be given as discount.", [
+ frm.doc.discount,
+ ]);
+ if (frm.doc.discount_type == "Amount") {
description = __("{0} will be given as discount.", [frm.doc.discount]);
}
frm.set_df_property("discount", "description", description);
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js b/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js
index 6046c13..b766c3b 100644
--- a/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js
+++ b/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js
@@ -1,12 +1,18 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Payment Terms Template', {
- refresh: function(frm) {
- frm.fields_dict.terms.grid.toggle_reqd("payment_term", frm.doc.allocate_payment_based_on_payment_terms);
+frappe.ui.form.on("Payment Terms Template", {
+ refresh: function (frm) {
+ frm.fields_dict.terms.grid.toggle_reqd(
+ "payment_term",
+ frm.doc.allocate_payment_based_on_payment_terms
+ );
},
- allocate_payment_based_on_payment_terms: function(frm) {
- frm.fields_dict.terms.grid.toggle_reqd("payment_term", frm.doc.allocate_payment_based_on_payment_terms);
- }
+ allocate_payment_based_on_payment_terms: function (frm) {
+ frm.fields_dict.terms.grid.toggle_reqd(
+ "payment_term",
+ frm.doc.allocate_payment_based_on_payment_terms
+ );
+ },
});
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
index e923d4e..82d8cb3 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
@@ -1,38 +1,41 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('Period Closing Voucher', {
- onload: function(frm) {
+frappe.ui.form.on("Period Closing Voucher", {
+ onload: function (frm) {
if (!frm.doc.transaction_date) frm.doc.transaction_date = frappe.datetime.obj_to_str(new Date());
},
- setup: function(frm) {
- frm.set_query("closing_account_head", function() {
+ setup: function (frm) {
+ frm.set_query("closing_account_head", function () {
return {
filters: [
- ['Account', 'company', '=', frm.doc.company],
- ['Account', 'is_group', '=', '0'],
- ['Account', 'freeze_account', '=', 'No'],
- ['Account', 'root_type', 'in', 'Liability, Equity']
- ]
- }
+ ["Account", "company", "=", frm.doc.company],
+ ["Account", "is_group", "=", "0"],
+ ["Account", "freeze_account", "=", "No"],
+ ["Account", "root_type", "in", "Liability, Equity"],
+ ],
+ };
});
},
- refresh: function(frm) {
- if(frm.doc.docstatus > 0) {
- frm.add_custom_button(__('Ledger'), function() {
- frappe.route_options = {
- "voucher_no": frm.doc.name,
- "from_date": frm.doc.posting_date,
- "to_date": moment(frm.doc.modified).format('YYYY-MM-DD'),
- "company": frm.doc.company,
- "group_by": "",
- "show_cancelled_entries": frm.doc.docstatus === 2
- };
- frappe.set_route("query-report", "General Ledger");
- }, "fa fa-table");
+ refresh: function (frm) {
+ if (frm.doc.docstatus > 0) {
+ frm.add_custom_button(
+ __("Ledger"),
+ function () {
+ frappe.route_options = {
+ voucher_no: frm.doc.name,
+ from_date: frm.doc.posting_date,
+ to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+ company: frm.doc.company,
+ group_by: "",
+ show_cancelled_entries: frm.doc.docstatus === 2,
+ };
+ frappe.set_route("query-report", "General Ledger");
+ },
+ "fa fa-table"
+ );
}
- }
-
-})
+ },
+});
diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js
index faceaf3..68a85f7 100644
--- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js
+++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js
@@ -1,36 +1,37 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('POS Closing Entry', {
- onload: function(frm) {
- frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log'];
- frm.set_query("pos_profile", function(doc) {
+frappe.ui.form.on("POS Closing Entry", {
+ onload: function (frm) {
+ frm.ignore_doctypes_on_cancel_all = ["POS Invoice Merge Log"];
+ frm.set_query("pos_profile", function (doc) {
return {
- filters: { 'user': doc.user }
+ filters: { user: doc.user },
};
});
- frm.set_query("user", function(doc) {
+ frm.set_query("user", function (doc) {
return {
query: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_cashiers",
- filters: { 'parent': doc.pos_profile }
+ filters: { parent: doc.pos_profile },
};
});
- frm.set_query("pos_opening_entry", function(doc) {
- return { filters: { 'status': 'Open', 'docstatus': 1 } };
+ frm.set_query("pos_opening_entry", function (doc) {
+ return { filters: { status: "Open", docstatus: 1 } };
});
- if (frm.doc.docstatus === 0 && !frm.doc.amended_from) frm.set_value("period_end_date", frappe.datetime.now_datetime());
+ if (frm.doc.docstatus === 0 && !frm.doc.amended_from)
+ frm.set_value("period_end_date", frappe.datetime.now_datetime());
- frappe.realtime.on('closing_process_complete', async function(data) {
+ frappe.realtime.on("closing_process_complete", async function (data) {
await frm.reload_doc();
- if (frm.doc.status == 'Failed' && frm.doc.error_message) {
+ if (frm.doc.status == "Failed" && frm.doc.error_message) {
frappe.msgprint({
- title: __('POS Closing Failed'),
+ title: __("POS Closing Failed"),
message: frm.doc.error_message,
- indicator: 'orange',
- clear: true
+ indicator: "orange",
+ clear: true,
});
}
});
@@ -47,23 +48,23 @@
}
},
- refresh: function(frm) {
- if (frm.doc.docstatus == 1 && frm.doc.status == 'Failed') {
+ refresh: function (frm) {
+ if (frm.doc.docstatus == 1 && frm.doc.status == "Failed") {
const issue = '<a id="jump_to_error" style="text-decoration: underline;">issue</a>';
frm.dashboard.set_headline(
- __('POS Closing failed while running in a background process. You can resolve the {0} and retry the process again.', [issue]));
+ __(
+ "POS Closing failed while running in a background process. You can resolve the {0} and retry the process again.",
+ [issue]
+ )
+ );
- $('#jump_to_error').on('click', (e) => {
+ $("#jump_to_error").on("click", (e) => {
e.preventDefault();
- frappe.utils.scroll_to(
- cur_frm.get_field("error_message").$wrapper,
- true,
- 30
- );
+ frappe.utils.scroll_to(cur_frm.get_field("error_message").$wrapper, true, 30);
});
- frm.add_custom_button(__('Retry'), function () {
- frm.call('retry', {}, () => {
+ frm.add_custom_button(__("Retry"), function () {
+ frm.call("retry", {}, () => {
frm.reload_doc();
});
});
@@ -71,48 +72,54 @@
},
pos_opening_entry(frm) {
- if (frm.doc.pos_opening_entry && frm.doc.period_start_date && frm.doc.period_end_date && frm.doc.user) {
+ if (
+ frm.doc.pos_opening_entry &&
+ frm.doc.period_start_date &&
+ frm.doc.period_end_date &&
+ frm.doc.user
+ ) {
reset_values(frm);
frappe.run_serially([
() => frm.trigger("set_opening_amounts"),
- () => frm.trigger("get_pos_invoices")
+ () => frm.trigger("get_pos_invoices"),
]);
}
},
set_opening_amounts(frm) {
- return frappe.db.get_doc("POS Opening Entry", frm.doc.pos_opening_entry)
+ return frappe.db
+ .get_doc("POS Opening Entry", frm.doc.pos_opening_entry)
.then(({ balance_details }) => {
- balance_details.forEach(detail => {
+ balance_details.forEach((detail) => {
frm.add_child("payment_reconciliation", {
mode_of_payment: detail.mode_of_payment,
opening_amount: detail.opening_amount,
- expected_amount: detail.opening_amount
+ expected_amount: detail.opening_amount,
});
- })
+ });
});
},
get_pos_invoices(frm) {
return frappe.call({
- method: 'erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices',
+ method: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices",
args: {
start: frappe.datetime.get_datetime_as_string(frm.doc.period_start_date),
end: frappe.datetime.get_datetime_as_string(frm.doc.period_end_date),
pos_profile: frm.doc.pos_profile,
- user: frm.doc.user
+ user: frm.doc.user,
},
callback: (r) => {
let pos_docs = r.message;
set_form_data(pos_docs, frm);
refresh_fields(frm);
set_html_data(frm);
- }
+ },
});
},
- before_save: async function(frm) {
- frappe.dom.freeze(__('Processing Sales! Please Wait...'));
+ before_save: async function (frm) {
+ frappe.dom.freeze(__("Processing Sales! Please Wait..."));
frm.set_value("grand_total", 0);
frm.set_value("net_total", 0);
@@ -125,12 +132,12 @@
await Promise.all([
frappe.call({
- method: 'erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices',
+ method: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices",
args: {
start: frappe.datetime.get_datetime_as_string(frm.doc.period_start_date),
end: frappe.datetime.get_datetime_as_string(frm.doc.period_end_date),
pos_profile: frm.doc.pos_profile,
- user: frm.doc.user
+ user: frm.doc.user,
},
callback: (r) => {
let pos_invoices = r.message;
@@ -143,22 +150,22 @@
refresh_fields(frm);
set_html_data(frm);
}
- }
- })
- ])
+ },
+ }),
+ ]);
frappe.dom.unfreeze();
- }
+ },
});
-frappe.ui.form.on('POS Closing Entry Detail', {
+frappe.ui.form.on("POS Closing Entry Detail", {
closing_amount: (frm, cdt, cdn) => {
const row = locals[cdt][cdn];
frappe.model.set_value(cdt, cdn, "difference", flt(row.closing_amount - row.expected_amount));
- }
-})
+ },
+});
function set_form_data(data, frm) {
- data.forEach(d => {
+ data.forEach((d) => {
add_to_pos_transaction(d, frm);
frm.doc.grand_total += flt(d.grand_total);
frm.doc.net_total += flt(d.net_total);
@@ -173,13 +180,15 @@
pos_invoice: d.name,
posting_date: d.posting_date,
grand_total: d.grand_total,
- customer: d.customer
- })
+ customer: d.customer,
+ });
}
function refresh_payments(d, frm) {
- d.payments.forEach(p => {
- const payment = frm.doc.payment_reconciliation.find(pay => pay.mode_of_payment === p.mode_of_payment);
+ d.payments.forEach((p) => {
+ const payment = frm.doc.payment_reconciliation.find(
+ (pay) => pay.mode_of_payment === p.mode_of_payment
+ );
if (p.account == d.account_for_change_amount) {
p.amount -= flt(d.change_amount);
}
@@ -192,25 +201,25 @@
mode_of_payment: p.mode_of_payment,
opening_amount: 0,
expected_amount: p.amount,
- closing_amount: 0
- })
+ closing_amount: 0,
+ });
}
- })
+ });
}
function refresh_taxes(d, frm) {
- d.taxes.forEach(t => {
- const tax = frm.doc.taxes.find(tx => tx.account_head === t.account_head && tx.rate === t.rate);
+ d.taxes.forEach((t) => {
+ const tax = frm.doc.taxes.find((tx) => tx.account_head === t.account_head && tx.rate === t.rate);
if (tax) {
tax.amount += flt(t.tax_amount);
} else {
frm.add_child("taxes", {
account_head: t.account_head,
rate: t.rate,
- amount: t.tax_amount
- })
+ amount: t.tax_amount,
+ });
}
- })
+ });
}
function reset_values(frm) {
@@ -232,13 +241,13 @@
}
function set_html_data(frm) {
- if (frm.doc.docstatus === 1 && frm.doc.status == 'Submitted') {
+ if (frm.doc.docstatus === 1 && frm.doc.status == "Submitted") {
frappe.call({
method: "get_payment_reconciliation_details",
doc: frm.doc,
callback: (r) => {
frm.get_field("payment_reconciliation_details").$wrapper.html(r.message);
- }
+ },
});
}
}
diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js
index cffeb4d..29f00fb 100644
--- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js
+++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js
@@ -2,16 +2,15 @@
// License: GNU General Public License v3. See license.txt
// render
-frappe.listview_settings['POS Closing Entry'] = {
- get_indicator: function(doc) {
+frappe.listview_settings["POS Closing Entry"] = {
+ get_indicator: function (doc) {
var status_color = {
- "Draft": "red",
- "Submitted": "blue",
- "Queued": "orange",
- "Failed": "red",
- "Cancelled": "red"
-
+ Draft: "red",
+ Submitted: "blue",
+ Queued: "orange",
+ Failed: "red",
+ Cancelled: "red",
};
- return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
- }
+ return [__(doc.status), status_color[doc.status], "status,=," + doc.status];
+ },
};
diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js
index ae132eb..a6e8bfa 100644
--- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js
+++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js
@@ -21,19 +21,23 @@
onload(doc) {
super.onload();
- this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log', 'POS Closing Entry', 'Serial and Batch Bundle'];
+ this.frm.ignore_doctypes_on_cancel_all = [
+ "POS Invoice Merge Log",
+ "POS Closing Entry",
+ "Serial and Batch Bundle",
+ ];
- if(doc.__islocal && doc.is_pos && frappe.get_route_str() !== 'point-of-sale') {
+ if (doc.__islocal && doc.is_pos && frappe.get_route_str() !== "point-of-sale") {
this.frm.script_manager.trigger("is_pos");
this.frm.refresh_fields();
}
- this.frm.set_query("set_warehouse", function(doc) {
+ this.frm.set_query("set_warehouse", function (doc) {
return {
filters: {
- company: doc.company ? doc.company : '',
- }
- }
+ company: doc.company ? doc.company : "",
+ },
+ };
});
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
@@ -47,26 +51,29 @@
super.refresh();
if (doc.docstatus == 1 && !doc.is_return) {
- this.frm.add_custom_button(__('Return'), this.make_sales_return, __('Create'));
- this.frm.page.set_inner_btn_group_as_primary(__('Create'));
+ this.frm.add_custom_button(__("Return"), this.make_sales_return, __("Create"));
+ this.frm.page.set_inner_btn_group_as_primary(__("Create"));
}
if (doc.is_return && doc.__islocal) {
this.frm.return_print_format = "Sales Invoice Return";
- this.frm.set_value('consolidated_invoice', '');
+ this.frm.set_value("consolidated_invoice", "");
}
- this.frm.set_query("customer", (function () {
- const customer_groups = this.settings?.customer_groups;
+ this.frm.set_query(
+ "customer",
+ function () {
+ const customer_groups = this.settings?.customer_groups;
- if (!customer_groups?.length) return {};
+ if (!customer_groups?.length) return {};
- return {
- filters: {
- customer_group: ["in", customer_groups],
- }
- }
- }).bind(this));
+ return {
+ filters: {
+ customer_group: ["in", customer_groups],
+ },
+ };
+ }.bind(this)
+ );
}
is_pos() {
@@ -74,19 +81,19 @@
}
async set_pos_data() {
- if(this.frm.doc.is_pos) {
+ if (this.frm.doc.is_pos) {
this.frm.set_value("allocate_advances_automatically", 0);
- if(!this.frm.doc.company) {
+ if (!this.frm.doc.company) {
this.frm.set_value("is_pos", 0);
frappe.msgprint(__("Please specify Company to proceed"));
} else {
const r = await this.frm.call({
doc: this.frm.doc,
method: "set_missing_values",
- freeze: true
+ freeze: true,
});
- if(!r.exc) {
- if(r.message) {
+ if (!r.exc) {
+ if (r.message) {
this.frm.pos_print_format = r.message.print_format || "";
this.frm.meta.default_print_format = r.message.print_format || "";
this.frm.doc.campaign = r.message.campaign;
@@ -103,32 +110,36 @@
}
customer() {
- if (!this.frm.doc.customer) return
+ if (!this.frm.doc.customer) return;
const pos_profile = this.frm.doc.pos_profile;
- if(this.frm.updating_party_details) return;
- erpnext.utils.get_party_details(this.frm,
- "erpnext.accounts.party.get_party_details", {
+ if (this.frm.updating_party_details) return;
+ erpnext.utils.get_party_details(
+ this.frm,
+ "erpnext.accounts.party.get_party_details",
+ {
posting_date: this.frm.doc.posting_date,
party: this.frm.doc.customer,
party_type: "Customer",
account: this.frm.doc.debit_to,
price_list: this.frm.doc.selling_price_list,
pos_profile: pos_profile,
- company_address: this.frm.doc.company_address
- }, () => {
+ company_address: this.frm.doc.company_address,
+ },
+ () => {
this.apply_pricing_rule();
- });
+ }
+ );
}
pos_profile(frm) {
- if (!frm.pos_profile || frm.pos_profile == '') {
+ if (!frm.pos_profile || frm.pos_profile == "") {
this.update_customer_groups_settings([]);
return;
}
frappe.call({
method: "erpnext.selling.page.point_of_sale.point_of_sale.get_pos_profile_data",
- args: { "pos_profile": frm.pos_profile },
+ args: { pos_profile: frm.pos_profile },
callback: ({ message: profile }) => {
this.update_customer_groups_settings(profile?.customer_groups);
this.frm.set_value("company", profile?.company);
@@ -137,17 +148,17 @@
}
update_customer_groups_settings(customer_groups) {
- this.settings.customer_groups = customer_groups?.map((group) => group.name)
+ this.settings.customer_groups = customer_groups?.map((group) => group.name);
}
- amount(){
- this.write_off_outstanding_amount_automatically()
+ amount() {
+ this.write_off_outstanding_amount_automatically();
}
- change_amount(){
- if(this.frm.doc.paid_amount > this.frm.doc.grand_total){
+ change_amount() {
+ if (this.frm.doc.paid_amount > this.frm.doc.grand_total) {
this.calculate_write_off_amount();
- }else {
+ } else {
this.frm.set_value("change_amount", 0.0);
this.frm.set_value("base_change_amount", 0.0);
}
@@ -155,7 +166,7 @@
this.frm.refresh_fields();
}
- loyalty_amount(){
+ loyalty_amount() {
this.calculate_outstanding_amount();
this.frm.refresh_field("outstanding_amount");
this.frm.refresh_field("paid_amount");
@@ -166,8 +177,12 @@
if (cint(this.frm.doc.write_off_outstanding_amount_automatically)) {
frappe.model.round_floats_in(this.frm.doc, ["grand_total", "paid_amount"]);
// this will make outstanding amount 0
- this.frm.set_value("write_off_amount",
- flt(this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance, precision("write_off_amount"))
+ this.frm.set_value(
+ "write_off_amount",
+ flt(
+ this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance,
+ precision("write_off_amount")
+ )
);
}
@@ -178,65 +193,69 @@
make_sales_return() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_sales_return",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
-}
+};
-extend_cscript(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm }))
+extend_cscript(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm }));
-frappe.ui.form.on('POS Invoice', {
- redeem_loyalty_points: function(frm) {
+frappe.ui.form.on("POS Invoice", {
+ redeem_loyalty_points: function (frm) {
frm.events.get_loyalty_details(frm);
},
- loyalty_points: function(frm) {
+ loyalty_points: function (frm) {
if (frm.redemption_conversion_factor) {
frm.events.set_loyalty_points(frm);
} else {
frappe.call({
method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_redeemption_factor",
args: {
- "loyalty_program": frm.doc.loyalty_program
+ loyalty_program: frm.doc.loyalty_program,
},
- callback: function(r) {
+ callback: function (r) {
if (r) {
frm.redemption_conversion_factor = r.message;
frm.events.set_loyalty_points(frm);
}
- }
+ },
});
}
},
- get_loyalty_details: function(frm) {
+ get_loyalty_details: function (frm) {
if (frm.doc.customer && frm.doc.redeem_loyalty_points) {
frappe.call({
method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details",
args: {
- "customer": frm.doc.customer,
- "loyalty_program": frm.doc.loyalty_program,
- "expiry_date": frm.doc.posting_date,
- "company": frm.doc.company
+ customer: frm.doc.customer,
+ loyalty_program: frm.doc.loyalty_program,
+ expiry_date: frm.doc.posting_date,
+ company: frm.doc.company,
},
- callback: function(r) {
+ callback: function (r) {
if (r) {
frm.set_value("loyalty_redemption_account", r.message.expense_account);
frm.set_value("loyalty_redemption_cost_center", r.message.cost_center);
frm.redemption_conversion_factor = r.message.conversion_factor;
}
- }
+ },
});
}
},
- set_loyalty_points: function(frm) {
+ set_loyalty_points: function (frm) {
if (frm.redemption_conversion_factor) {
- let loyalty_amount = flt(frm.redemption_conversion_factor*flt(frm.doc.loyalty_points), precision("loyalty_amount"));
- var remaining_amount = flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
- if (frm.doc.grand_total && (remaining_amount < loyalty_amount)) {
- let redeemable_points = parseInt(remaining_amount/frm.redemption_conversion_factor);
- frappe.throw(__("You can only redeem max {0} points in this order.",[redeemable_points]));
+ let loyalty_amount = flt(
+ frm.redemption_conversion_factor * flt(frm.doc.loyalty_points),
+ precision("loyalty_amount")
+ );
+ var remaining_amount =
+ flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
+ if (frm.doc.grand_total && remaining_amount < loyalty_amount) {
+ let redeemable_points = parseInt(remaining_amount / frm.redemption_conversion_factor);
+ frappe.throw(__("You can only redeem max {0} points in this order.", [redeemable_points]));
}
frm.set_value("loyalty_amount", loyalty_amount);
}
@@ -244,43 +263,49 @@
request_for_payment: function (frm) {
if (!frm.doc.contact_mobile) {
- frappe.throw(__('Please enter mobile number first.'));
+ frappe.throw(__("Please enter mobile number first."));
}
frm.dirty();
frm.save().then(() => {
- frappe.dom.freeze(__('Waiting for payment...'));
+ frappe.dom.freeze(__("Waiting for payment..."));
frappe
.call({
- method: 'create_payment_request',
- doc: frm.doc
+ method: "create_payment_request",
+ doc: frm.doc,
})
.fail(() => {
frappe.dom.unfreeze();
- frappe.msgprint(__('Payment request failed'));
+ frappe.msgprint(__("Payment request failed"));
})
.then(({ message }) => {
const payment_request_name = message.name;
setTimeout(() => {
- frappe.db.get_value('Payment Request', payment_request_name, ['status', 'grand_total']).then(({ message }) => {
- if (message.status != 'Paid') {
- frappe.dom.unfreeze();
- frappe.msgprint({
- message: __('Payment Request took too long to respond. Please try requesting for payment again.'),
- title: __('Request Timeout')
- });
- } else if (frappe.dom.freeze_count != 0) {
- frappe.dom.unfreeze();
- cur_frm.reload_doc();
- cur_pos.payment.events.submit_invoice();
+ frappe.db
+ .get_value("Payment Request", payment_request_name, ["status", "grand_total"])
+ .then(({ message }) => {
+ if (message.status != "Paid") {
+ frappe.dom.unfreeze();
+ frappe.msgprint({
+ message: __(
+ "Payment Request took too long to respond. Please try requesting for payment again."
+ ),
+ title: __("Request Timeout"),
+ });
+ } else if (frappe.dom.freeze_count != 0) {
+ frappe.dom.unfreeze();
+ cur_frm.reload_doc();
+ cur_pos.payment.events.submit_invoice();
- frappe.show_alert({
- message: __("Payment of {0} received successfully.", [format_currency(message.grand_total, frm.doc.currency, 0)]),
- indicator: 'green'
- });
- }
- });
+ frappe.show_alert({
+ message: __("Payment of {0} received successfully.", [
+ format_currency(message.grand_total, frm.doc.currency, 0),
+ ]),
+ indicator: "green",
+ });
+ }
+ });
}, 60000);
});
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js
index 2dbf2a4..0379932 100644
--- a/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js
+++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js
@@ -2,40 +2,47 @@
// License: GNU General Public License v3. See license.txt
// render
-frappe.listview_settings['POS Invoice'] = {
- add_fields: ["customer", "customer_name", "base_grand_total", "outstanding_amount", "due_date", "company",
- "currency", "is_return"],
- get_indicator: function(doc) {
+frappe.listview_settings["POS Invoice"] = {
+ add_fields: [
+ "customer",
+ "customer_name",
+ "base_grand_total",
+ "outstanding_amount",
+ "due_date",
+ "company",
+ "currency",
+ "is_return",
+ ],
+ get_indicator: function (doc) {
var status_color = {
- "Draft": "red",
- "Unpaid": "orange",
- "Paid": "green",
- "Submitted": "blue",
- "Consolidated": "green",
- "Return": "darkgrey",
+ Draft: "red",
+ Unpaid: "orange",
+ Paid: "green",
+ Submitted: "blue",
+ Consolidated: "green",
+ Return: "darkgrey",
"Unpaid and Discounted": "orange",
"Overdue and Discounted": "red",
- "Overdue": "red"
-
+ Overdue: "red",
};
- return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
+ return [__(doc.status), status_color[doc.status], "status,=," + doc.status];
},
right_column: "grand_total",
- onload: function(me) {
- me.page.add_action_item('Make Merge Log', function() {
+ onload: function (me) {
+ me.page.add_action_item("Make Merge Log", function () {
const invoices = me.get_checked_items();
frappe.call({
method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_merge_log",
freeze: true,
- args:{
- "invoices": invoices
+ args: {
+ invoices: invoices,
},
callback: function (r) {
if (r.message) {
var doc = frappe.model.sync(r.message)[0];
frappe.set_route("Form", doc.doctype, doc.name);
}
- }
+ },
});
});
},
diff --git a/erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.py b/erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.py
index c24db1d..e058f82 100644
--- a/erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.py
+++ b/erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.py
@@ -3,10 +3,10 @@
# import frappe
-from frappe.model.document import Document
+from erpnext.accounts.doctype.sales_invoice_item.sales_invoice_item import SalesInvoiceItem
-class POSInvoiceItem(Document):
+class POSInvoiceItem(SalesInvoiceItem):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
diff --git a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js
index 73c6290..8423987 100644
--- a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js
+++ b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js
@@ -1,21 +1,21 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('POS Invoice Merge Log', {
- setup: function(frm) {
- frm.set_query("pos_invoice", "pos_invoices", doc => {
+frappe.ui.form.on("POS Invoice Merge Log", {
+ setup: function (frm) {
+ frm.set_query("pos_invoice", "pos_invoices", (doc) => {
return {
filters: {
- 'docstatus': 1,
- 'customer': doc.customer,
- 'consolidated_invoice': ''
- }
- }
+ docstatus: 1,
+ customer: doc.customer,
+ consolidated_invoice: "",
+ },
+ };
});
},
- merge_invoices_based_on: function(frm) {
- frm.set_value('customer', '');
- frm.set_value('customer_group', '');
- }
+ merge_invoices_based_on: function (frm) {
+ frm.set_value("customer", "");
+ frm.set_value("customer_group", "");
+ },
});
diff --git a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js
index d23f348..6a316d5 100644
--- a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js
+++ b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js
@@ -1,56 +1,55 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('POS Opening Entry', {
+frappe.ui.form.on("POS Opening Entry", {
setup(frm) {
if (frm.doc.docstatus == 0) {
- frm.trigger('set_posting_date_read_only');
- frm.set_value('period_start_date', frappe.datetime.now_datetime());
- frm.set_value('user', frappe.session.user);
+ frm.trigger("set_posting_date_read_only");
+ frm.set_value("period_start_date", frappe.datetime.now_datetime());
+ frm.set_value("user", frappe.session.user);
}
- frm.set_query("user", function(doc) {
+ frm.set_query("user", function (doc) {
return {
query: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_cashiers",
- filters: { 'parent': doc.pos_profile }
+ filters: { parent: doc.pos_profile },
};
});
},
refresh(frm) {
// set default posting date / time
- if(frm.doc.docstatus == 0) {
- if(!frm.doc.posting_date) {
- frm.set_value('posting_date', frappe.datetime.nowdate());
+ if (frm.doc.docstatus == 0) {
+ if (!frm.doc.posting_date) {
+ frm.set_value("posting_date", frappe.datetime.nowdate());
}
- frm.trigger('set_posting_date_read_only');
+ frm.trigger("set_posting_date_read_only");
}
},
set_posting_date_read_only(frm) {
- if(frm.doc.docstatus == 0 && frm.doc.set_posting_date) {
- frm.set_df_property('posting_date', 'read_only', 0);
+ if (frm.doc.docstatus == 0 && frm.doc.set_posting_date) {
+ frm.set_df_property("posting_date", "read_only", 0);
} else {
- frm.set_df_property('posting_date', 'read_only', 1);
+ frm.set_df_property("posting_date", "read_only", 1);
}
},
set_posting_date(frm) {
- frm.trigger('set_posting_date_read_only');
+ frm.trigger("set_posting_date_read_only");
},
pos_profile: (frm) => {
if (frm.doc.pos_profile) {
- frappe.db.get_doc("POS Profile", frm.doc.pos_profile)
- .then(({ payments }) => {
- if (payments.length) {
- frm.doc.balance_details = [];
- payments.forEach(({ mode_of_payment }) => {
- frm.add_child("balance_details", { mode_of_payment });
- })
- frm.refresh_field("balance_details");
- }
- });
+ frappe.db.get_doc("POS Profile", frm.doc.pos_profile).then(({ payments }) => {
+ if (payments.length) {
+ frm.doc.balance_details = [];
+ payments.forEach(({ mode_of_payment }) => {
+ frm.add_child("balance_details", { mode_of_payment });
+ });
+ frm.refresh_field("balance_details");
+ }
+ });
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js
index 1ad3c91..7ff9c4b 100644
--- a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js
+++ b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js
@@ -2,15 +2,14 @@
// License: GNU General Public License v3. See license.txt
// render
-frappe.listview_settings['POS Opening Entry'] = {
- get_indicator: function(doc) {
+frappe.listview_settings["POS Opening Entry"] = {
+ get_indicator: function (doc) {
var status_color = {
- "Draft": "red",
- "Open": "orange",
- "Closed": "green",
- "Cancelled": "red"
-
+ Draft: "red",
+ Open: "orange",
+ Closed: "green",
+ Cancelled: "red",
};
- return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
- }
+ return [__(doc.status), status_color[doc.status], "status,=," + doc.status];
+ },
};
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js
index ceaafaa..31f0f07 100755
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.js
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js
@@ -1,149 +1,143 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('POS Profile', {
- setup: function(frm) {
- frm.set_query("selling_price_list", function() {
+frappe.ui.form.on("POS Profile", {
+ setup: function (frm) {
+ frm.set_query("selling_price_list", function () {
return { filters: { selling: 1 } };
});
- frm.set_query("tc_name", function() {
+ frm.set_query("tc_name", function () {
return { filters: { selling: 1 } };
});
- erpnext.queries.setup_queries(frm, "Warehouse", function() {
+ erpnext.queries.setup_queries(frm, "Warehouse", function () {
return erpnext.queries.warehouse(frm.doc);
});
- frm.set_query("print_format", function() {
+ frm.set_query("print_format", function () {
return {
- filters: [
- ['Print Format', 'doc_type', '=', 'POS Invoice']
- ]
+ filters: [["Print Format", "doc_type", "=", "POS Invoice"]],
};
});
- frm.set_query("account_for_change_amount", function(doc) {
+ frm.set_query("account_for_change_amount", function (doc) {
if (!doc.company) {
- frappe.throw(__('Please set Company'));
+ frappe.throw(__("Please set Company"));
}
return {
filters: {
- account_type: ['in', ["Cash", "Bank"]],
+ account_type: ["in", ["Cash", "Bank"]],
is_group: 0,
- company: doc.company
- }
+ company: doc.company,
+ },
};
});
- frm.set_query("taxes_and_charges", function() {
+ frm.set_query("taxes_and_charges", function () {
return {
filters: [
- ['Sales Taxes and Charges Template', 'company', '=', frm.doc.company],
- ['Sales Taxes and Charges Template', 'docstatus', '!=', 2]
- ]
+ ["Sales Taxes and Charges Template", "company", "=", frm.doc.company],
+ ["Sales Taxes and Charges Template", "docstatus", "!=", 2],
+ ],
};
});
- frm.set_query('company_address', function(doc) {
+ frm.set_query("company_address", function (doc) {
if (!doc.company) {
- frappe.throw(__('Please set Company'));
+ frappe.throw(__("Please set Company"));
}
return {
- query: 'frappe.contacts.doctype.address.address.address_query',
+ query: "frappe.contacts.doctype.address.address.address_query",
filters: {
- link_doctype: 'Company',
- link_name: doc.company
- }
+ link_doctype: "Company",
+ link_name: doc.company,
+ },
};
});
- frm.set_query('income_account', function(doc) {
+ frm.set_query("income_account", function (doc) {
if (!doc.company) {
- frappe.throw(__('Please set Company'));
+ frappe.throw(__("Please set Company"));
}
return {
filters: {
- 'is_group': 0,
- 'company': doc.company,
- 'account_type': "Income Account"
- }
+ is_group: 0,
+ company: doc.company,
+ account_type: "Income Account",
+ },
};
});
- frm.set_query('cost_center', function(doc) {
+ frm.set_query("cost_center", function (doc) {
if (!doc.company) {
- frappe.throw(__('Please set Company'));
+ frappe.throw(__("Please set Company"));
}
return {
filters: {
- 'company': doc.company,
- 'is_group': 0
- }
+ company: doc.company,
+ is_group: 0,
+ },
};
});
- frm.set_query('expense_account', function(doc) {
+ frm.set_query("expense_account", function (doc) {
if (!doc.company) {
- frappe.throw(__('Please set Company'));
+ frappe.throw(__("Please set Company"));
}
return {
filters: {
- "report_type": "Profit and Loss",
- "company": doc.company,
- "is_group": 0
- }
+ report_type: "Profit and Loss",
+ company: doc.company,
+ is_group: 0,
+ },
};
});
- frm.set_query("select_print_heading", function() {
+ frm.set_query("select_print_heading", function () {
return {
- filters: [
- ['Print Heading', 'docstatus', '!=', 2]
- ]
+ filters: [["Print Heading", "docstatus", "!=", 2]],
};
});
- frm.set_query("write_off_account", function(doc) {
+ frm.set_query("write_off_account", function (doc) {
return {
filters: {
- 'report_type': 'Profit and Loss',
- 'is_group': 0,
- 'company': doc.company
- }
+ report_type: "Profit and Loss",
+ is_group: 0,
+ company: doc.company,
+ },
};
});
- frm.set_query("write_off_cost_center", function(doc) {
+ frm.set_query("write_off_cost_center", function (doc) {
return {
filters: {
- 'is_group': 0,
- 'company': doc.company
- }
+ is_group: 0,
+ company: doc.company,
+ },
};
});
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- refresh: function(frm) {
+ refresh: function (frm) {
if (frm.doc.company) {
frm.trigger("toggle_display_account_head");
}
},
- company: function(frm) {
+ company: function (frm) {
frm.trigger("toggle_display_account_head");
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
-
},
- toggle_display_account_head: function(frm) {
- frm.toggle_display('expense_account',
- erpnext.is_perpetual_inventory_enabled(frm.doc.company));
- }
-});
\ No newline at end of file
+ toggle_display_account_head: function (frm) {
+ frm.toggle_display("expense_account", erpnext.is_perpetual_inventory_enabled(frm.doc.company));
+ },
+});
diff --git a/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js b/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js
index f0884eb..6341674 100644
--- a/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js
+++ b/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js
@@ -1,6 +1,4 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('POS Profile User', {
-
-});
+frappe.ui.form.on("POS Profile User", {});
diff --git a/erpnext/accounts/doctype/pos_settings/pos_settings.js b/erpnext/accounts/doctype/pos_settings/pos_settings.js
index 7d8f356..a2e5a57 100644
--- a/erpnext/accounts/doctype/pos_settings/pos_settings.js
+++ b/erpnext/accounts/doctype/pos_settings/pos_settings.js
@@ -1,57 +1,91 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-let search_fields_datatypes = ['Data', 'Link', 'Dynamic Link', 'Long Text', 'Select', 'Small Text', 'Text', 'Text Editor'];
-let do_not_include_fields = ["naming_series", "item_code", "item_name", "stock_uom", "asset_naming_series",
- "default_material_request_type", "valuation_method", "warranty_period", "weight_uom", "batch_number_series",
- "serial_no_series", "purchase_uom", "customs_tariff_number", "sales_uom", "deferred_revenue_account",
- "deferred_expense_account", "quality_inspection_template", "route", "slideshow", "website_image_alt", "thumbnail",
- "web_long_description"]
+let search_fields_datatypes = [
+ "Data",
+ "Link",
+ "Dynamic Link",
+ "Long Text",
+ "Select",
+ "Small Text",
+ "Text",
+ "Text Editor",
+];
+let do_not_include_fields = [
+ "naming_series",
+ "item_code",
+ "item_name",
+ "stock_uom",
+ "asset_naming_series",
+ "default_material_request_type",
+ "valuation_method",
+ "warranty_period",
+ "weight_uom",
+ "batch_number_series",
+ "serial_no_series",
+ "purchase_uom",
+ "customs_tariff_number",
+ "sales_uom",
+ "deferred_revenue_account",
+ "deferred_expense_account",
+ "quality_inspection_template",
+ "route",
+ "slideshow",
+ "website_image_alt",
+ "thumbnail",
+ "web_long_description",
+];
-frappe.ui.form.on('POS Settings', {
- onload: function(frm) {
+frappe.ui.form.on("POS Settings", {
+ onload: function (frm) {
frm.trigger("get_invoice_fields");
frm.trigger("add_search_options");
},
- get_invoice_fields: function(frm) {
+ get_invoice_fields: function (frm) {
frappe.model.with_doctype("POS Invoice", () => {
- var fields = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function(d) {
- if (frappe.model.no_value_type.indexOf(d.fieldtype) === -1 || ['Button'].includes(d.fieldtype)) {
- return { label: d.label + ' (' + d.fieldtype + ')', value: d.fieldname };
+ var fields = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function (d) {
+ if (
+ frappe.model.no_value_type.indexOf(d.fieldtype) === -1 ||
+ ["Button"].includes(d.fieldtype)
+ ) {
+ return { label: d.label + " (" + d.fieldtype + ")", value: d.fieldname };
} else {
return null;
}
});
frm.fields_dict.invoice_fields.grid.update_docfield_property(
- 'fieldname', 'options', [""].concat(fields)
+ "fieldname",
+ "options",
+ [""].concat(fields)
);
});
-
},
- add_search_options: function(frm) {
+ add_search_options: function (frm) {
frappe.model.with_doctype("Item", () => {
- var fields = $.map(frappe.get_doc("DocType", "Item").fields, function(d) {
- if (search_fields_datatypes.includes(d.fieldtype) && !(do_not_include_fields.includes(d.fieldname))) {
+ var fields = $.map(frappe.get_doc("DocType", "Item").fields, function (d) {
+ if (
+ search_fields_datatypes.includes(d.fieldtype) &&
+ !do_not_include_fields.includes(d.fieldname)
+ ) {
return [d.label];
} else {
return null;
}
});
- fields.unshift('');
- frm.fields_dict.pos_search_fields.grid.update_docfield_property('field', 'options', fields);
+ fields.unshift("");
+ frm.fields_dict.pos_search_fields.grid.update_docfield_property("field", "options", fields);
});
-
- }
+ },
});
frappe.ui.form.on("POS Search Fields", {
- field: function(frm, doctype, name) {
+ field: function (frm, doctype, name) {
var doc = frappe.get_doc(doctype, name);
- var df = $.map(frappe.get_doc("DocType", "Item").fields, function(d) {
+ var df = $.map(frappe.get_doc("DocType", "Item").fields, function (d) {
if (doc.field == d.label && search_fields_datatypes.includes(d.fieldtype)) {
return d;
} else {
@@ -61,13 +95,13 @@
doc.fieldname = df.fieldname;
frm.refresh_field("fields");
- }
+ },
});
frappe.ui.form.on("POS Field", {
- fieldname: function(frm, doctype, name) {
+ fieldname: function (frm, doctype, name) {
var doc = frappe.get_doc(doctype, name);
- var df = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function(d) {
+ var df = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function (d) {
return doc.fieldname == d.fieldname ? d : null;
})[0];
@@ -77,5 +111,5 @@
doc.fieldtype = df.fieldtype;
doc.default_value = df.default;
frm.refresh_field("fields");
- }
+ },
});
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
index 8267582..cd5b00e 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
@@ -1,44 +1,43 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('Pricing Rule', {
- setup: function(frm) {
- frm.fields_dict["for_price_list"].get_query = function(doc){
+frappe.ui.form.on("Pricing Rule", {
+ setup: function (frm) {
+ frm.fields_dict["for_price_list"].get_query = function (doc) {
return {
filters: {
- 'selling': doc.selling,
- 'buying': doc.buying,
- 'currency': doc.currency
- }
+ selling: doc.selling,
+ buying: doc.buying,
+ currency: doc.currency,
+ },
};
};
- ['items', 'item_groups', 'brands'].forEach(d => {
- frm.fields_dict[d].grid.get_field('uom').get_query = function(doc, cdt, cdn){
+ ["items", "item_groups", "brands"].forEach((d) => {
+ frm.fields_dict[d].grid.get_field("uom").get_query = function (doc, cdt, cdn) {
var row = locals[cdt][cdn];
return {
- query:"erpnext.accounts.doctype.pricing_rule.pricing_rule.get_item_uoms",
- filters: {'value': row[frappe.scrub(doc.apply_on)], apply_on: doc.apply_on}
- }
+ query: "erpnext.accounts.doctype.pricing_rule.pricing_rule.get_item_uoms",
+ filters: { value: row[frappe.scrub(doc.apply_on)], apply_on: doc.apply_on },
+ };
};
- })
+ });
},
- onload: function(frm) {
- if(frm.doc.__islocal && !frm.doc.applicable_for && (frm.doc.customer || frm.doc.supplier)) {
- if(frm.doc.customer) {
+ onload: function (frm) {
+ if (frm.doc.__islocal && !frm.doc.applicable_for && (frm.doc.customer || frm.doc.supplier)) {
+ if (frm.doc.customer) {
frm.doc.applicable_for = "Customer";
- frm.doc.selling = 1
+ frm.doc.selling = 1;
} else {
frm.doc.applicable_for = "Supplier";
- frm.doc.buying = 1
+ frm.doc.buying = 1;
}
}
},
- refresh: function(frm) {
- var help_content =
- `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
+ refresh: function (frm) {
+ var help_content = `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
<tr><td>
<h4>
<i class="fa fa-hand-right"></i>
@@ -97,61 +96,70 @@
</td></tr>
</table>`;
- frm.set_df_property('pricing_rule_help', 'options', help_content);
+ frm.set_df_property("pricing_rule_help", "options", help_content);
frm.events.set_options_for_applicable_for(frm);
frm.trigger("toggle_reqd_apply_on");
},
- apply_on: function(frm) {
+ apply_on: function (frm) {
frm.trigger("toggle_reqd_apply_on");
},
- toggle_reqd_apply_on: function(frm) {
+ toggle_reqd_apply_on: function (frm) {
const fields = {
- 'Item Code': 'items',
- 'Item Group': 'item_groups',
- 'Brand': 'brands'
- }
+ "Item Code": "items",
+ "Item Group": "item_groups",
+ Brand: "brands",
+ };
for (var key in fields) {
- frm.toggle_reqd(fields[key],
- frm.doc.apply_on === key ? 1 : 0);
+ frm.toggle_reqd(fields[key], frm.doc.apply_on === key ? 1 : 0);
}
},
- rate_or_discount: function(frm) {
- if(frm.doc.rate_or_discount == 'Rate') {
- frm.set_value('for_price_list', "");
+ rate_or_discount: function (frm) {
+ if (frm.doc.rate_or_discount == "Rate") {
+ frm.set_value("for_price_list", "");
}
},
- selling: function(frm) {
+ selling: function (frm) {
frm.events.set_options_for_applicable_for(frm);
},
- buying: function(frm) {
+ buying: function (frm) {
frm.events.set_options_for_applicable_for(frm);
},
//Dynamically change the description based on type of margin
- margin_type: function(frm){
- frm.set_df_property('margin_rate_or_amount', 'description', frm.doc.margin_type=='Percentage'?'In Percentage %':'In Amount');
+ margin_type: function (frm) {
+ frm.set_df_property(
+ "margin_rate_or_amount",
+ "description",
+ frm.doc.margin_type == "Percentage" ? "In Percentage %" : "In Amount"
+ );
},
- set_options_for_applicable_for: function(frm) {
+ set_options_for_applicable_for: function (frm) {
var options = [""];
var applicable_for = frm.doc.applicable_for;
- if(frm.doc.selling) {
- options = $.merge(options, ["Customer", "Customer Group", "Territory", "Sales Partner", "Campaign"]);
+ if (frm.doc.selling) {
+ options = $.merge(options, [
+ "Customer",
+ "Customer Group",
+ "Territory",
+ "Sales Partner",
+ "Campaign",
+ ]);
}
- if(frm.doc.buying) {
+ if (frm.doc.buying) {
$.merge(options, ["Supplier", "Supplier Group"]);
}
set_field_options("applicable_for", options.join("\n"));
- if(!in_list(options, applicable_for)) applicable_for = null;
+ if (!in_list(options, applicable_for)) applicable_for = null;
frm.set_value("applicable_for", applicable_for);
- }
+ },
});
diff --git a/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js b/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js
index 1ec6805..92a6c62 100644
--- a/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js
+++ b/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js
@@ -1,53 +1,58 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Process Deferred Accounting', {
- setup: function(frm) {
- frm.set_query("document_type", function() {
+frappe.ui.form.on("Process Deferred Accounting", {
+ setup: function (frm) {
+ frm.set_query("document_type", function () {
return {
filters: {
- 'name': ['in', ['Sales Invoice', 'Purchase Invoice']]
- }
+ name: ["in", ["Sales Invoice", "Purchase Invoice"]],
+ },
};
});
},
- type: function(frm) {
+ type: function (frm) {
if (frm.doc.company && frm.doc.type) {
- frm.set_query("account", function() {
+ frm.set_query("account", function () {
return {
filters: {
- 'company': frm.doc.company,
- 'root_type': frm.doc.type === 'Income' ? 'Liability' : 'Asset',
- 'is_group': 0
- }
+ company: frm.doc.company,
+ root_type: frm.doc.type === "Income" ? "Liability" : "Asset",
+ is_group: 0,
+ },
};
});
}
},
- validate: function() {
+ validate: function () {
return new Promise((resolve) => {
- return frappe.db.get_single_value('Accounts Settings', 'automatically_process_deferred_accounting_entry')
- .then(value => {
- if(value) {
- frappe.throw(__('Manual entry cannot be created! Disable automatic entry for deferred accounting in accounts settings and try again'));
+ return frappe.db
+ .get_single_value("Accounts Settings", "automatically_process_deferred_accounting_entry")
+ .then((value) => {
+ if (value) {
+ frappe.throw(
+ __(
+ "Manual entry cannot be created! Disable automatic entry for deferred accounting in accounts settings and try again"
+ )
+ );
}
resolve(value);
});
});
},
- end_date: function(frm) {
+ end_date: function (frm) {
if (frm.doc.end_date && frm.doc.end_date < frm.doc.start_date) {
frappe.throw(__("End date cannot be before start date"));
}
},
- onload: function(frm) {
+ onload: function (frm) {
if (frm.doc.posting_date && frm.doc.docstatus === 0) {
- frm.set_value('start_date', frappe.datetime.add_months(frm.doc.posting_date, -1));
- frm.set_value('end_date', frm.doc.posting_date);
+ frm.set_value("start_date", frappe.datetime.add_months(frm.doc.posting_date, -1));
+ frm.set_value("end_date", frm.doc.posting_date);
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js
index dd601bf..0f52a4d 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js
@@ -2,129 +2,128 @@
// For license information, please see license.txt
frappe.ui.form.on("Process Payment Reconciliation", {
- onload: function(frm) {
+ onload: function (frm) {
// set queries
- frm.set_query("party_type", function() {
- return {
- "filters": {
- "name": ["in", Object.keys(frappe.boot.party_account_types)],
- }
- }
- });
- frm.set_query('receivable_payable_account', function(doc) {
+ frm.set_query("party_type", function () {
return {
filters: {
- "company": doc.company,
- "is_group": 0,
- "account_type": frappe.boot.party_account_types[doc.party_type]
- }
+ name: ["in", Object.keys(frappe.boot.party_account_types)],
+ },
};
});
- frm.set_query('cost_center', function(doc) {
+ frm.set_query("receivable_payable_account", function (doc) {
return {
filters: {
- "company": doc.company,
- "is_group": 0,
- }
+ company: doc.company,
+ is_group: 0,
+ account_type: frappe.boot.party_account_types[doc.party_type],
+ },
};
});
- frm.set_query('bank_cash_account', function(doc) {
+ frm.set_query("cost_center", function (doc) {
return {
- filters:[
- ['Account', 'company', '=', doc.company],
- ['Account', 'is_group', '=', 0],
- ['Account', 'account_type', 'in', ['Bank', 'Cash']]
- ]
+ filters: {
+ company: doc.company,
+ is_group: 0,
+ },
};
});
-
+ frm.set_query("bank_cash_account", function (doc) {
+ return {
+ filters: [
+ ["Account", "company", "=", doc.company],
+ ["Account", "is_group", "=", 0],
+ ["Account", "account_type", "in", ["Bank", "Cash"]],
+ ],
+ };
+ });
},
- refresh: function(frm) {
- if (frm.doc.docstatus==1 && ['Queued', 'Paused'].find(x => x == frm.doc.status)) {
- let execute_btn = __("Start / Resume")
+ refresh: function (frm) {
+ if (frm.doc.docstatus == 1 && ["Queued", "Paused"].find((x) => x == frm.doc.status)) {
+ let execute_btn = __("Start / Resume");
frm.add_custom_button(execute_btn, () => {
frm.call({
- method: 'erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_job_for_doc',
+ method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_job_for_doc",
args: {
- docname: frm.doc.name
- }
- }).then(r => {
- if(!r.exc) {
+ docname: frm.doc.name,
+ },
+ }).then((r) => {
+ if (!r.exc) {
frappe.show_alert(__("Job Started"));
frm.reload_doc();
}
});
});
}
- if (frm.doc.docstatus==1 && ['Completed', 'Running', 'Paused', 'Partially Reconciled'].find(x => x == frm.doc.status)) {
+ if (
+ frm.doc.docstatus == 1 &&
+ ["Completed", "Running", "Paused", "Partially Reconciled"].find((x) => x == frm.doc.status)
+ ) {
frm.call({
- 'method': "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.get_reconciled_count",
+ method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.get_reconciled_count",
args: {
- "docname": frm.docname,
- }
- }).then(r => {
+ docname: frm.docname,
+ },
+ }).then((r) => {
if (r.message) {
let progress = 0;
let description = "";
if (r.message.processed) {
- progress = (r.message.processed/r.message.total) * 100;
- description = r.message.processed + "/" + r.message.total + " processed";
+ progress = (r.message.processed / r.message.total) * 100;
+ description = r.message.processed + "/" + r.message.total + " processed";
} else if (r.message.total == 0 && frm.doc.status == "Completed") {
progress = 100;
}
-
- frm.dashboard.add_progress('Reconciliation Progress', progress, description);
+ frm.dashboard.add_progress("Reconciliation Progress", progress, description);
}
- })
+ });
}
- if (frm.doc.docstatus==1 && frm.doc.status == 'Running') {
- let execute_btn = __("Pause")
+ if (frm.doc.docstatus == 1 && frm.doc.status == "Running") {
+ let execute_btn = __("Pause");
frm.add_custom_button(execute_btn, () => {
frm.call({
- 'method': "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.pause_job_for_doc",
+ method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.pause_job_for_doc",
args: {
- "docname": frm.docname,
- }
- }).then(r => {
+ docname: frm.docname,
+ },
+ }).then((r) => {
if (!r.exc) {
frappe.show_alert(__("Job Paused"));
- frm.reload_doc()
+ frm.reload_doc();
}
});
-
});
}
},
company(frm) {
- frm.set_value('party', '');
- frm.set_value('receivable_payable_account', '');
+ frm.set_value("party", "");
+ frm.set_value("receivable_payable_account", "");
},
party_type(frm) {
- frm.set_value('party', '');
+ frm.set_value("party", "");
},
party(frm) {
- frm.set_value('receivable_payable_account', '');
+ frm.set_value("receivable_payable_account", "");
if (!frm.doc.receivable_payable_account && frm.doc.party_type && frm.doc.party) {
return frappe.call({
method: "erpnext.accounts.party.get_party_account",
args: {
company: frm.doc.company,
party_type: frm.doc.party_type,
- party: frm.doc.party
+ party: frm.doc.party,
},
callback: (r) => {
if (!r.exc && r.message) {
frm.set_value("receivable_payable_account", r.message);
}
frm.refresh();
-
- }
+ },
});
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js
index 8012d6e..ed182ad 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js
@@ -1,15 +1,15 @@
-frappe.listview_settings['Process Payment Reconciliation'] = {
+frappe.listview_settings["Process Payment Reconciliation"] = {
add_fields: ["status"],
- get_indicator: function(doc) {
+ get_indicator: function (doc) {
let colors = {
- 'Queued': 'orange',
- 'Paused': 'orange',
- 'Completed': 'green',
- 'Partially Reconciled': 'orange',
- 'Running': 'blue',
- 'Failed': 'red',
+ Queued: "orange",
+ Paused: "orange",
+ Completed: "green",
+ "Partially Reconciled": "orange",
+ Running: "blue",
+ Failed: "red",
};
let status = doc.status;
- return [__(status), colors[status], 'status,=,'+status];
+ return [__(status), colors[status], "status,=," + status];
},
};
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js
index 2468f10..f483d00 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js
@@ -3,15 +3,14 @@
frappe.ui.form.on("Process Payment Reconciliation Log", {
refresh(frm) {
- if (['Completed', 'Running', 'Paused', 'Partially Reconciled'].find(x => x == frm.doc.status)) {
+ if (["Completed", "Running", "Paused", "Partially Reconciled"].find((x) => x == frm.doc.status)) {
let progress = 0;
if (frm.doc.reconciled_entries != 0) {
- progress = frm.doc.reconciled_entries / frm.doc.total_allocations * 100;
- } else if(frm.doc.total_allocations == 0 && frm.doc.status == "Completed"){
+ progress = (frm.doc.reconciled_entries / frm.doc.total_allocations) * 100;
+ } else if (frm.doc.total_allocations == 0 && frm.doc.status == "Completed") {
progress = 100;
}
- frm.dashboard.add_progress(__('Reconciliation Progress'), progress);
+ frm.dashboard.add_progress(__("Reconciliation Progress"), progress);
}
-
},
});
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js
index 5a65204..19c73b2 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js
@@ -1,15 +1,15 @@
-frappe.listview_settings['Process Payment Reconciliation Log'] = {
+frappe.listview_settings["Process Payment Reconciliation Log"] = {
add_fields: ["status"],
- get_indicator: function(doc) {
+ get_indicator: function (doc) {
var colors = {
- 'Partially Reconciled': 'orange',
- 'Paused': 'orange',
- 'Reconciled': 'green',
- 'Failed': 'red',
- 'Cancelled': 'red',
- 'Running': 'blue',
+ "Partially Reconciled": "orange",
+ Paused: "orange",
+ Reconciled: "green",
+ Failed: "red",
+ Cancelled: "red",
+ Running: "blue",
};
let status = doc.status;
- return [__(status), colors[status], "status,=,"+status];
+ return [__(status), colors[status], "status,=," + status];
},
};
diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js
index cec48c1..25274f1 100644
--- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js
+++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js
@@ -1,155 +1,150 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Process Statement Of Accounts', {
- view_properties: function(frm) {
- frappe.route_options = {doc_type: 'Customer'};
+frappe.ui.form.on("Process Statement Of Accounts", {
+ view_properties: function (frm) {
+ frappe.route_options = { doc_type: "Customer" };
frappe.set_route("Form", "Customize Form");
},
- refresh: function(frm){
- if(!frm.doc.__islocal) {
- frm.add_custom_button(__('Send Emails'), function(){
- if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."))
+ refresh: function (frm) {
+ if (!frm.doc.__islocal) {
+ frm.add_custom_button(__("Send Emails"), function () {
+ if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."));
frappe.call({
method: "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_emails",
args: {
- "document_name": frm.doc.name,
+ document_name: frm.doc.name,
},
- callback: function(r) {
- if(r && r.message) {
- frappe.show_alert({message: __('Emails Queued'), indicator: 'blue'});
+ callback: function (r) {
+ if (r && r.message) {
+ frappe.show_alert({ message: __("Emails Queued"), indicator: "blue" });
+ } else {
+ frappe.msgprint(__("No Records for these settings."));
}
- else{
- frappe.msgprint(__('No Records for these settings.'))
- }
- }
+ },
});
});
- frm.add_custom_button(__('Download'), function(){
- if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."))
+ frm.add_custom_button(__("Download"), function () {
+ if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."));
let url = frappe.urllib.get_full_url(
- '/api/method/erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.download_statements?'
- + 'document_name='+encodeURIComponent(frm.doc.name))
+ "/api/method/erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.download_statements?" +
+ "document_name=" +
+ encodeURIComponent(frm.doc.name)
+ );
$.ajax({
url: url,
- type: 'GET',
- success: function(result) {
- if(jQuery.isEmptyObject(result)){
- frappe.msgprint(__('No Records for these settings.'));
- }
- else{
+ type: "GET",
+ success: function (result) {
+ if (jQuery.isEmptyObject(result)) {
+ frappe.msgprint(__("No Records for these settings."));
+ } else {
window.location = url;
}
- }
+ },
});
});
}
},
- onload: function(frm) {
- frm.set_query('currency', function(){
+ onload: function (frm) {
+ frm.set_query("currency", function () {
return {
filters: {
- 'enabled': 1
- }
- }
- });
- frm.set_query("account", function() {
- return {
- filters: {
- 'company': frm.doc.company
- }
+ enabled: 1,
+ },
};
});
- if(frm.doc.__islocal){
- frm.set_value('from_date', frappe.datetime.add_months(frappe.datetime.get_today(), -1));
- frm.set_value('to_date', frappe.datetime.get_today());
+ frm.set_query("account", function () {
+ return {
+ filters: {
+ company: frm.doc.company,
+ },
+ };
+ });
+ if (frm.doc.__islocal) {
+ frm.set_value("from_date", frappe.datetime.add_months(frappe.datetime.get_today(), -1));
+ frm.set_value("to_date", frappe.datetime.get_today());
}
},
- report: function(frm){
+ report: function (frm) {
let filters = {
- 'company': frm.doc.company,
+ company: frm.doc.company,
+ };
+ if (frm.doc.report == "Accounts Receivable") {
+ filters["account_type"] = "Receivable";
}
- if(frm.doc.report == 'Accounts Receivable'){
- filters['account_type'] = 'Receivable';
- }
- frm.set_query("account", function() {
+ frm.set_query("account", function () {
return {
- filters: filters
+ filters: filters,
};
});
-
},
- customer_collection: function(frm){
- frm.set_value('collection_name', '');
- if(frm.doc.customer_collection){
- frm.get_field('collection_name').set_label(frm.doc.customer_collection);
+ customer_collection: function (frm) {
+ frm.set_value("collection_name", "");
+ if (frm.doc.customer_collection) {
+ frm.get_field("collection_name").set_label(frm.doc.customer_collection);
}
},
- frequency: function(frm){
- if(frm.doc.frequency != ''){
- frm.set_value('start_date', frappe.datetime.get_today());
- }
- else{
- frm.set_value('start_date', '');
+ frequency: function (frm) {
+ if (frm.doc.frequency != "") {
+ frm.set_value("start_date", frappe.datetime.get_today());
+ } else {
+ frm.set_value("start_date", "");
}
},
- fetch_customers: function(frm){
- if(frm.doc.collection_name){
+ fetch_customers: function (frm) {
+ if (frm.doc.collection_name) {
frappe.call({
method: "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.fetch_customers",
args: {
- 'customer_collection': frm.doc.customer_collection,
- 'collection_name': frm.doc.collection_name,
- 'primary_mandatory': frm.doc.primary_mandatory
+ customer_collection: frm.doc.customer_collection,
+ collection_name: frm.doc.collection_name,
+ primary_mandatory: frm.doc.primary_mandatory,
},
- callback: function(r) {
- if(!r.exc) {
- if(r.message.length){
- frm.clear_table('customers');
- for (const customer of r.message){
- var row = frm.add_child('customers');
+ callback: function (r) {
+ if (!r.exc) {
+ if (r.message.length) {
+ frm.clear_table("customers");
+ for (const customer of r.message) {
+ var row = frm.add_child("customers");
row.customer = customer.name;
row.primary_email = customer.primary_email;
row.billing_email = customer.billing_email;
}
- frm.refresh_field('customers');
- }
- else{
- frappe.throw(__('No Customers found with selected options.'));
+ frm.refresh_field("customers");
+ } else {
+ frappe.throw(__("No Customers found with selected options."));
}
}
- }
+ },
});
+ } else {
+ frappe.throw("Enter " + frm.doc.customer_collection + " name.");
}
- else {
- frappe.throw('Enter ' + frm.doc.customer_collection + ' name.');
- }
- }
+ },
});
-frappe.ui.form.on('Process Statement Of Accounts Customer', {
- customer: function(frm, cdt, cdn){
+frappe.ui.form.on("Process Statement Of Accounts Customer", {
+ customer: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
- if (!row.customer){
+ if (!row.customer) {
return;
}
frappe.call({
- method: 'erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.get_customer_emails',
+ method: "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.get_customer_emails",
args: {
- 'customer_name': row.customer,
- 'primary_mandatory': frm.doc.primary_mandatory
+ customer_name: row.customer,
+ primary_mandatory: frm.doc.primary_mandatory,
},
- callback: function(r){
- if(!r.exe){
- if(r.message.length){
- frappe.model.set_value(cdt, cdn, "primary_email", r.message[0])
- frappe.model.set_value(cdt, cdn, "billing_email", r.message[1])
- }
- else {
- return
+ callback: function (r) {
+ if (!r.exe) {
+ if (r.message.length) {
+ frappe.model.set_value(cdt, cdn, "primary_email", r.message[0]);
+ frappe.model.set_value(cdt, cdn, "billing_email", r.message[1]);
+ } else {
+ return;
}
}
- }
- })
- }
+ },
+ });
+ },
});
diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py
index 083c8fc..f9d6136 100644
--- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py
+++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py
@@ -455,11 +455,16 @@
subject = frappe.render_template(doc.subject, context)
message = frappe.render_template(doc.body, context)
+ if doc.sender:
+ sender_email = frappe.db.get_value("Email Account", doc.sender, "email_id")
+ else:
+ sender_email = frappe.session.user
+
frappe.enqueue(
queue="short",
method=frappe.sendmail,
recipients=recipients,
- sender=doc.sender or frappe.session.user,
+ sender=sender_email,
cc=cc,
subject=subject,
message=message,
diff --git a/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js b/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js
index e840c79..7a26c07 100644
--- a/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js
+++ b/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js
@@ -1,51 +1,56 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Promotional Scheme', {
- refresh: function(frm) {
+frappe.ui.form.on("Promotional Scheme", {
+ refresh: function (frm) {
frm.trigger("set_options_for_applicable_for");
frm.trigger("toggle_reqd_apply_on");
},
- selling: function(frm) {
+ selling: function (frm) {
frm.trigger("set_options_for_applicable_for");
},
- buying: function(frm) {
+ buying: function (frm) {
frm.trigger("set_options_for_applicable_for");
},
- set_options_for_applicable_for: function(frm) {
+ set_options_for_applicable_for: function (frm) {
var options = [""];
var applicable_for = frm.doc.applicable_for;
- if(frm.doc.selling) {
- options = $.merge(options, ["Customer", "Customer Group", "Territory", "Sales Partner", "Campaign"]);
+ if (frm.doc.selling) {
+ options = $.merge(options, [
+ "Customer",
+ "Customer Group",
+ "Territory",
+ "Sales Partner",
+ "Campaign",
+ ]);
}
- if(frm.doc.buying) {
+ if (frm.doc.buying) {
$.merge(options, ["Supplier", "Supplier Group"]);
}
set_field_options("applicable_for", options.join("\n"));
- if(!in_list(options, applicable_for)) applicable_for = null;
+ if (!in_list(options, applicable_for)) applicable_for = null;
frm.set_value("applicable_for", applicable_for);
},
- apply_on: function(frm) {
+ apply_on: function (frm) {
frm.trigger("toggle_reqd_apply_on");
},
- toggle_reqd_apply_on: function(frm) {
+ toggle_reqd_apply_on: function (frm) {
const fields = {
- 'Item Code': 'items',
- 'Item Group': 'item_groups',
- 'Brand': 'brands'
+ "Item Code": "items",
+ "Item Group": "item_groups",
+ Brand: "brands",
};
for (var key in fields) {
- frm.toggle_reqd(fields[key],
- frm.doc.apply_on === key ? 1 : 0);
+ frm.toggle_reqd(fields[key], frm.doc.apply_on === key ? 1 : 0);
}
- }
+ },
});
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index 8f0df3e..d6455b2 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -14,19 +14,19 @@
super.setup(doc);
// formatter for purchase invoice item
- if(this.frm.doc.update_stock) {
- this.frm.set_indicator_formatter('item_code', function(doc) {
- return (doc.qty<=doc.received_qty) ? "green" : "orange";
+ if (this.frm.doc.update_stock) {
+ this.frm.set_indicator_formatter("item_code", function (doc) {
+ return doc.qty <= doc.received_qty ? "green" : "orange";
});
}
- this.frm.set_query("unrealized_profit_loss_account", function() {
+ this.frm.set_query("unrealized_profit_loss_account", function () {
return {
filters: {
company: doc.company,
is_group: 0,
root_type: "Liability",
- }
+ },
};
});
}
@@ -35,11 +35,21 @@
super.onload();
// Ignore linked advances
- this.frm.ignore_doctypes_on_cancel_all = ['Journal Entry', 'Payment Entry', 'Purchase Invoice', "Repost Payment Ledger", "Repost Accounting Ledger", "Unreconcile Payment", "Unreconcile Payment Entries", "Serial and Batch Bundle", "Bank Transaction"];
+ this.frm.ignore_doctypes_on_cancel_all = [
+ "Journal Entry",
+ "Payment Entry",
+ "Purchase Invoice",
+ "Repost Payment Ledger",
+ "Repost Accounting Ledger",
+ "Unreconcile Payment",
+ "Unreconcile Payment Entries",
+ "Serial and Batch Bundle",
+ "Bank Transaction",
+ ];
- if(!this.frm.doc.__islocal) {
+ if (!this.frm.doc.__islocal) {
// show credit_to in print format
- if(!this.frm.doc.supplier && this.frm.doc.credit_to) {
+ if (!this.frm.doc.supplier && this.frm.doc.credit_to) {
this.frm.set_df_property("credit_to", "print_hide", 0);
}
}
@@ -47,7 +57,7 @@
// Trigger supplier event on load if supplier is available
// The reason for this is PI can be created from PR or PO and supplier is pre populated
if (this.frm.doc.supplier && this.frm.doc.__islocal) {
- this.frm.trigger('supplier');
+ this.frm.trigger("supplier");
}
}
@@ -60,116 +70,137 @@
this.show_general_ledger();
erpnext.accounts.ledger_preview.show_accounting_ledger_preview(this.frm);
- if(doc.update_stock==1) {
+ if (doc.update_stock == 1) {
this.show_stock_ledger();
erpnext.accounts.ledger_preview.show_stock_ledger_preview(this.frm);
}
- if (this.frm.doc.repost_required && this.frm.doc.docstatus===1) {
- this.frm.set_intro(__("Accounting entries for this invoice need to be reposted. Please click on 'Repost' button to update."));
- this.frm.add_custom_button(__('Repost Accounting Entries'),
- () => {
+ if (this.frm.doc.repost_required && this.frm.doc.docstatus === 1) {
+ this.frm.set_intro(
+ __(
+ "Accounting entries for this invoice need to be reposted. Please click on 'Repost' button to update."
+ )
+ );
+ this.frm
+ .add_custom_button(__("Repost Accounting Entries"), () => {
this.frm.call({
doc: this.frm.doc,
- method: 'repost_accounting_entries',
+ method: "repost_accounting_entries",
freeze: true,
- freeze_message: __('Reposting...'),
+ freeze_message: __("Reposting..."),
callback: (r) => {
if (!r.exc) {
- frappe.msgprint(__('Accounting Entries are reposted.'));
+ frappe.msgprint(__("Accounting Entries are reposted."));
me.frm.refresh();
}
- }
+ },
});
- }).removeClass('btn-default').addClass('btn-warning');
+ })
+ .removeClass("btn-default")
+ .addClass("btn-warning");
}
- if(!doc.is_return && doc.docstatus == 1 && doc.outstanding_amount != 0){
- if(doc.on_hold) {
+ if (!doc.is_return && doc.docstatus == 1 && doc.outstanding_amount != 0) {
+ if (doc.on_hold) {
this.frm.add_custom_button(
- __('Change Release Date'),
- function() {me.change_release_date()},
- __('Hold Invoice')
+ __("Change Release Date"),
+ function () {
+ me.change_release_date();
+ },
+ __("Hold Invoice")
);
this.frm.add_custom_button(
- __('Unblock Invoice'),
- function() {me.unblock_invoice()},
- __('Create')
+ __("Unblock Invoice"),
+ function () {
+ me.unblock_invoice();
+ },
+ __("Create")
);
} else if (!doc.on_hold) {
this.frm.add_custom_button(
- __('Block Invoice'),
- function() {me.block_invoice()},
- __('Create')
+ __("Block Invoice"),
+ function () {
+ me.block_invoice();
+ },
+ __("Create")
);
}
}
- if(doc.docstatus == 1 && doc.outstanding_amount != 0 && !doc.on_hold) {
- this.frm.add_custom_button(
- __('Payment'),
- () => this.make_payment_entry(),
- __('Create')
- );
- cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+ if (doc.docstatus == 1 && doc.outstanding_amount != 0 && !doc.on_hold) {
+ this.frm.add_custom_button(__("Payment"), () => this.make_payment_entry(), __("Create"));
+ cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
}
- if(!doc.is_return && doc.docstatus==1) {
- if(doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
- cur_frm.add_custom_button(__('Return / Debit Note'),
- this.make_debit_note, __('Create'));
+ if (!doc.is_return && doc.docstatus == 1) {
+ if (doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
+ cur_frm.add_custom_button(__("Return / Debit Note"), this.make_debit_note, __("Create"));
}
}
if (doc.outstanding_amount > 0 && !cint(doc.is_return) && !doc.on_hold) {
- cur_frm.add_custom_button(__('Payment Request'), function() {
- me.make_payment_request()
- }, __('Create'));
+ cur_frm.add_custom_button(
+ __("Payment Request"),
+ function () {
+ me.make_payment_request();
+ },
+ __("Create")
+ );
}
- if(doc.docstatus===0) {
- this.frm.add_custom_button(__('Purchase Order'), function() {
- erpnext.utils.map_current_doc({
- method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
- source_doctype: "Purchase Order",
- target: me.frm,
- setters: {
- supplier: me.frm.doc.supplier || undefined,
- schedule_date: undefined
- },
- get_query_filters: {
- docstatus: 1,
- status: ["not in", ["Closed", "On Hold"]],
- per_billed: ["<", 99.99],
- company: me.frm.doc.company
- }
- })
- }, __("Get Items From"));
+ if (doc.docstatus === 0) {
+ this.frm.add_custom_button(
+ __("Purchase Order"),
+ function () {
+ erpnext.utils.map_current_doc({
+ method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
+ source_doctype: "Purchase Order",
+ target: me.frm,
+ setters: {
+ supplier: me.frm.doc.supplier || undefined,
+ schedule_date: undefined,
+ },
+ get_query_filters: {
+ docstatus: 1,
+ status: ["not in", ["Closed", "On Hold"]],
+ per_billed: ["<", 99.99],
+ company: me.frm.doc.company,
+ },
+ });
+ },
+ __("Get Items From")
+ );
- this.frm.add_custom_button(__('Purchase Receipt'), function() {
- erpnext.utils.map_current_doc({
- method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
- source_doctype: "Purchase Receipt",
- target: me.frm,
- setters: {
- supplier: me.frm.doc.supplier || undefined,
- posting_date: undefined
- },
- get_query_filters: {
- docstatus: 1,
- status: ["not in", ["Closed", "Completed", "Return Issued"]],
- company: me.frm.doc.company,
- is_return: 0
- }
- })
- }, __("Get Items From"));
+ this.frm.add_custom_button(
+ __("Purchase Receipt"),
+ function () {
+ erpnext.utils.map_current_doc({
+ method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
+ source_doctype: "Purchase Receipt",
+ target: me.frm,
+ setters: {
+ supplier: me.frm.doc.supplier || undefined,
+ posting_date: undefined,
+ },
+ get_query_filters: {
+ docstatus: 1,
+ status: ["not in", ["Closed", "Completed", "Return Issued"]],
+ company: me.frm.doc.company,
+ is_return: 0,
+ },
+ });
+ },
+ __("Get Items From")
+ );
if (!this.frm.doc.is_return) {
frappe.db.get_single_value("Buying Settings", "maintain_same_rate").then((value) => {
if (value) {
this.frm.doc.items.forEach((item) => {
this.frm.fields_dict.items.grid.update_docfield_property(
- "rate", "read_only", (item.purchase_receipt && item.pr_detail)
+ "rate",
+ "read_only",
+ item.purchase_receipt && item.pr_detail
);
});
}
@@ -179,14 +210,18 @@
this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_subcontracted);
if (doc.docstatus == 1 && !doc.inter_company_invoice_reference) {
- frappe.model.with_doc("Supplier", me.frm.doc.supplier, function() {
+ frappe.model.with_doc("Supplier", me.frm.doc.supplier, function () {
var supplier = frappe.model.get_doc("Supplier", me.frm.doc.supplier);
var internal = supplier.is_internal_supplier;
var disabled = supplier.disabled;
if (internal == 1 && disabled == 0) {
- me.frm.add_custom_button("Inter Company Invoice", function() {
- me.make_inter_company_invoice(me.frm);
- }, __('Create'));
+ me.frm.add_custom_button(
+ "Inter Company Invoice",
+ function () {
+ me.make_inter_company_invoice(me.frm);
+ },
+ __("Create")
+ );
}
});
}
@@ -198,9 +233,9 @@
unblock_invoice() {
const me = this;
frappe.call({
- 'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.unblock_invoice',
- 'args': {'name': me.frm.doc.name},
- 'callback': (r) => me.frm.reload_doc()
+ method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.unblock_invoice",
+ args: { name: me.frm.doc.name },
+ callback: (r) => me.frm.reload_doc(),
});
}
@@ -215,50 +250,50 @@
can_change_release_date(date) {
const diff = frappe.datetime.get_diff(date, frappe.datetime.nowdate());
if (diff < 0) {
- frappe.throw(__('New release date should be in the future'));
+ frappe.throw(__("New release date should be in the future"));
return false;
} else {
return true;
}
}
- make_comment_dialog_and_block_invoice(){
+ make_comment_dialog_and_block_invoice() {
const me = this;
- const title = __('Block Invoice');
+ const title = __("Block Invoice");
const fields = [
{
- fieldname: 'release_date',
+ fieldname: "release_date",
read_only: 0,
- fieldtype:'Date',
- label: __('Release Date'),
+ fieldtype: "Date",
+ label: __("Release Date"),
default: me.frm.doc.release_date,
- reqd: 1
+ reqd: 1,
},
{
- fieldname: 'hold_comment',
+ fieldname: "hold_comment",
read_only: 0,
- fieldtype:'Small Text',
- label: __('Reason For Putting On Hold'),
- default: ""
+ fieldtype: "Small Text",
+ label: __("Reason For Putting On Hold"),
+ default: "",
},
];
this.dialog = new frappe.ui.Dialog({
title: title,
- fields: fields
+ fields: fields,
});
- this.dialog.set_primary_action(__('Save'), function() {
+ this.dialog.set_primary_action(__("Save"), function () {
const dialog_data = me.dialog.get_values();
frappe.call({
- 'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.block_invoice',
- 'args': {
- 'name': me.frm.doc.name,
- 'hold_comment': dialog_data.hold_comment,
- 'release_date': dialog_data.release_date
+ method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.block_invoice",
+ args: {
+ name: me.frm.doc.name,
+ hold_comment: dialog_data.hold_comment,
+ release_date: dialog_data.release_date,
},
- 'callback': (r) => me.frm.reload_doc()
+ callback: (r) => me.frm.reload_doc(),
});
me.dialog.hide();
});
@@ -269,25 +304,25 @@
make_dialog_and_set_release_date() {
const me = this;
- const title = __('Set New Release Date');
+ const title = __("Set New Release Date");
const fields = [
{
- fieldname: 'release_date',
+ fieldname: "release_date",
read_only: 0,
- fieldtype:'Date',
- label: __('Release Date'),
- default: me.frm.doc.release_date
+ fieldtype: "Date",
+ label: __("Release Date"),
+ default: me.frm.doc.release_date,
},
];
this.dialog = new frappe.ui.Dialog({
title: title,
- fields: fields
+ fields: fields,
});
- this.dialog.set_primary_action(__('Save'), function() {
+ this.dialog.set_primary_action(__("Save"), function () {
me.dialog_data = me.dialog.get_values();
- if(me.can_change_release_date(me.dialog_data.release_date)) {
+ if (me.can_change_release_date(me.dialog_data.release_date)) {
me.dialog_data.name = me.frm.doc.name;
me.set_release_date(me.dialog_data);
me.dialog.hide();
@@ -299,9 +334,9 @@
set_release_date(data) {
return frappe.call({
- 'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.change_release_date',
- 'args': data,
- 'callback': (r) => this.frm.reload_doc()
+ method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.change_release_date",
+ args: data,
+ callback: (r) => this.frm.reload_doc(),
});
}
@@ -309,12 +344,13 @@
var me = this;
// Do not update if inter company reference is there as the details will already be updated
- if(this.frm.updating_party_details || this.frm.doc.inter_company_invoice_reference)
- return;
+ if (this.frm.updating_party_details || this.frm.doc.inter_company_invoice_reference) return;
if (this.frm.doc.__onload && this.frm.doc.__onload.load_after_mapping) return;
- erpnext.utils.get_party_details(this.frm, "erpnext.accounts.party.get_party_details",
+ erpnext.utils.get_party_details(
+ this.frm,
+ "erpnext.accounts.party.get_party_details",
{
posting_date: this.frm.doc.posting_date,
bill_date: this.frm.doc.bill_date,
@@ -322,21 +358,23 @@
party_type: "Supplier",
account: this.frm.doc.credit_to,
price_list: this.frm.doc.buying_price_list,
- fetch_payment_terms_template: cint(!this.frm.doc.ignore_default_payment_terms_template)
- }, function() {
+ fetch_payment_terms_template: cint(!this.frm.doc.ignore_default_payment_terms_template),
+ },
+ function () {
me.apply_pricing_rule();
me.frm.doc.apply_tds = me.frm.supplier_tds ? 1 : 0;
me.frm.doc.tax_withholding_category = me.frm.supplier_tds;
me.frm.set_df_property("apply_tds", "read_only", me.frm.supplier_tds ? 0 : 1);
me.frm.set_df_property("tax_withholding_category", "hidden", me.frm.supplier_tds ? 0 : 1);
- })
+ }
+ );
}
apply_tds(frm) {
var me = this;
me.frm.set_value("tax_withheld_vouchers", []);
if (!me.frm.doc.apply_tds) {
- me.frm.set_value("tax_withholding_category", '');
+ me.frm.set_value("tax_withholding_category", "");
me.frm.set_df_property("tax_withholding_category", "hidden", 1);
} else {
me.frm.set_value("tax_withholding_category", me.frm.supplier_tds);
@@ -346,7 +384,7 @@
credit_to() {
var me = this;
- if(this.frm.doc.credit_to) {
+ if (this.frm.doc.credit_to) {
me.frm.call({
method: "frappe.client.get_value",
args: {
@@ -354,12 +392,12 @@
fieldname: "account_currency",
filters: { name: me.frm.doc.credit_to },
},
- callback: function(r, rt) {
- if(r.message) {
+ callback: function (r, rt) {
+ if (r.message) {
me.frm.set_value("party_account_currency", r.message.account_currency);
me.set_dynamic_labels();
}
- }
+ },
});
}
}
@@ -367,16 +405,16 @@
make_inter_company_invoice(frm) {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_inter_company_sales_invoice",
- frm: frm
+ frm: frm,
});
}
is_paid() {
hide_fields(this.frm.doc);
- if(cint(this.frm.doc.is_paid)) {
+ if (cint(this.frm.doc.is_paid)) {
this.frm.set_value("allocate_advances_automatically", 0);
- if(!this.frm.doc.company) {
- this.frm.set_value("is_paid", 0)
+ if (!this.frm.doc.company) {
+ this.frm.set_value("is_paid", 0);
frappe.msgprint(__("Please specify Company to proceed"));
}
}
@@ -403,23 +441,27 @@
items_add(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
- this.frm.script_manager.copy_from_first_row("items", row,
- ["expense_account", "discount_account", "cost_center", "project"]);
+ this.frm.script_manager.copy_from_first_row("items", row, [
+ "expense_account",
+ "discount_account",
+ "cost_center",
+ "project",
+ ]);
}
on_submit() {
super.on_submit();
- $.each(this.frm.doc["items"] || [], function(i, row) {
- if(row.purchase_receipt) frappe.model.clear_doc("Purchase Receipt", row.purchase_receipt)
- })
+ $.each(this.frm.doc["items"] || [], function (i, row) {
+ if (row.purchase_receipt) frappe.model.clear_doc("Purchase Receipt", row.purchase_receipt);
+ });
}
make_debit_note() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_debit_note",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
};
@@ -428,172 +470,170 @@
// Hide Fields
// ------------
function hide_fields(doc) {
- var parent_fields = ['due_date', 'is_opening', 'advances_section', 'from_date', 'to_date'];
+ var parent_fields = ["due_date", "is_opening", "advances_section", "from_date", "to_date"];
- if(cint(doc.is_paid) == 1) {
+ if (cint(doc.is_paid) == 1) {
hide_field(parent_fields);
} else {
for (var i in parent_fields) {
var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
- if(!docfield.hidden) unhide_field(parent_fields[i]);
+ if (!docfield.hidden) unhide_field(parent_fields[i]);
}
-
}
- var item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty'];
+ var item_fields_stock = ["warehouse_section", "received_qty", "rejected_qty"];
- cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
- (cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
+ cur_frm.fields_dict["items"].grid.set_column_disp(
+ item_fields_stock,
+ cint(doc.update_stock) == 1 || cint(doc.is_return) == 1 ? true : false
+ );
cur_frm.refresh_fields();
}
-cur_frm.fields_dict.cash_bank_account.get_query = function(doc) {
+cur_frm.fields_dict.cash_bank_account.get_query = function (doc) {
return {
filters: [
["Account", "account_type", "in", ["Cash", "Bank"]],
- ["Account", "is_group", "=",0],
+ ["Account", "is_group", "=", 0],
["Account", "company", "=", doc.company],
- ["Account", "report_type", "=", "Balance Sheet"]
- ]
- }
-}
+ ["Account", "report_type", "=", "Balance Sheet"],
+ ],
+ };
+};
-cur_frm.fields_dict['items'].grid.get_field("item_code").get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict["items"].grid.get_field("item_code").get_query = function (doc, cdt, cdn) {
return {
query: "erpnext.controllers.queries.item_query",
- filters: {'is_purchase_item': 1}
- }
-}
+ filters: { is_purchase_item: 1 },
+ };
+};
-cur_frm.fields_dict['credit_to'].get_query = function(doc) {
+cur_frm.fields_dict["credit_to"].get_query = function (doc) {
// filter on Account
return {
filters: {
- 'account_type': 'Payable',
- 'is_group': 0,
- 'company': doc.company
- }
- }
-}
+ account_type: "Payable",
+ is_group: 0,
+ company: doc.company,
+ },
+ };
+};
// Get Print Heading
-cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict["select_print_heading"].get_query = function (doc, cdt, cdn) {
return {
- filters:[
- ['Print Heading', 'docstatus', '!=', 2]
- ]
- }
-}
+ filters: [["Print Heading", "docstatus", "!=", 2]],
+ };
+};
-cur_frm.set_query("expense_account", "items", function(doc) {
+cur_frm.set_query("expense_account", "items", function (doc) {
return {
query: "erpnext.controllers.queries.get_expense_account",
- filters: {'company': doc.company }
- }
+ filters: { company: doc.company },
+ };
});
-cur_frm.set_query("wip_composite_asset", "items", function() {
+cur_frm.set_query("wip_composite_asset", "items", function () {
return {
- filters: {'is_composite_asset': 1, 'docstatus': 0 }
- }
+ filters: { is_composite_asset: 1, docstatus: 0 },
+ };
});
-cur_frm.cscript.expense_account = function(doc, cdt, cdn){
+cur_frm.cscript.expense_account = function (doc, cdt, cdn) {
var d = locals[cdt][cdn];
- if(d.idx == 1 && d.expense_account){
+ if (d.idx == 1 && d.expense_account) {
var cl = doc.items || [];
- for(var i = 0; i < cl.length; i++){
- if(!cl[i].expense_account) cl[i].expense_account = d.expense_account;
+ for (var i = 0; i < cl.length; i++) {
+ if (!cl[i].expense_account) cl[i].expense_account = d.expense_account;
}
}
- refresh_field('items');
-}
+ refresh_field("items");
+};
-cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function(doc) {
+cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function (doc) {
return {
filters: {
- 'company': doc.company,
- 'is_group': 0
- }
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+};
- }
-}
-
-cur_frm.cscript.cost_center = function(doc, cdt, cdn){
+cur_frm.cscript.cost_center = function (doc, cdt, cdn) {
var d = locals[cdt][cdn];
- if(d.cost_center){
+ if (d.cost_center) {
var cl = doc.items || [];
- for(var i = 0; i < cl.length; i++){
- if(!cl[i].cost_center) cl[i].cost_center = d.cost_center;
+ for (var i = 0; i < cl.length; i++) {
+ if (!cl[i].cost_center) cl[i].cost_center = d.cost_center;
}
}
- refresh_field('items');
-}
+ refresh_field("items");
+};
-cur_frm.fields_dict['items'].grid.get_field('project').get_query = function(doc, cdt, cdn) {
- return{
- filters:[
- ['Project', 'status', 'not in', 'Completed, Cancelled']
- ]
- }
-}
+cur_frm.fields_dict["items"].grid.get_field("project").get_query = function (doc, cdt, cdn) {
+ return {
+ filters: [["Project", "status", "not in", "Completed, Cancelled"]],
+ };
+};
frappe.ui.form.on("Purchase Invoice", {
- setup: function(frm) {
+ setup: function (frm) {
frm.custom_make_buttons = {
- 'Purchase Invoice': 'Return / Debit Note',
- 'Payment Entry': 'Payment',
- 'Landed Cost Voucher': function () { frm.trigger('create_landed_cost_voucher') },
- }
+ "Purchase Invoice": "Return / Debit Note",
+ "Payment Entry": "Payment",
+ "Landed Cost Voucher": function () {
+ frm.trigger("create_landed_cost_voucher");
+ },
+ };
- frm.set_query("additional_discount_account", function() {
+ frm.set_query("additional_discount_account", function () {
return {
filters: {
company: frm.doc.company,
is_group: 0,
report_type: "Profit and Loss",
- }
+ },
};
});
- frm.fields_dict['items'].grid.get_field('deferred_expense_account').get_query = function(doc) {
+ frm.fields_dict["items"].grid.get_field("deferred_expense_account").get_query = function (doc) {
return {
filters: {
- 'root_type': 'Asset',
- 'company': doc.company,
- "is_group": 0
- }
- }
- }
+ root_type: "Asset",
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+ };
- frm.fields_dict['items'].grid.get_field('discount_account').get_query = function(doc) {
+ frm.fields_dict["items"].grid.get_field("discount_account").get_query = function (doc) {
return {
filters: {
- 'report_type': 'Profit and Loss',
- 'company': doc.company,
- "is_group": 0
- }
- }
- }
+ report_type: "Profit and Loss",
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+ };
},
- refresh: function(frm) {
+ refresh: function (frm) {
frm.events.add_custom_buttons(frm);
},
- mode_of_payment: function(frm) {
- erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function(account) {
+ mode_of_payment: function (frm) {
+ erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function (account) {
frm.set_value("cash_bank_account", account);
- })
+ });
},
create_landed_cost_voucher: function (frm) {
- let lcv = frappe.model.get_new_doc('Landed Cost Voucher');
+ let lcv = frappe.model.get_new_doc("Landed Cost Voucher");
lcv.company = frm.doc.company;
- let lcv_receipt = frappe.model.get_new_doc('Landed Cost Purchase Invoice');
- lcv_receipt.receipt_document_type = 'Purchase Invoice';
+ let lcv_receipt = frappe.model.get_new_doc("Landed Cost Purchase Invoice");
+ lcv_receipt.receipt_document_type = "Purchase Invoice";
lcv_receipt.receipt_document = frm.doc.name;
lcv_receipt.supplier = frm.doc.supplier;
lcv_receipt.grand_total = frm.doc.grand_total;
@@ -602,35 +642,43 @@
frappe.set_route("Form", lcv.doctype, lcv.name);
},
- add_custom_buttons: function(frm) {
+ add_custom_buttons: function (frm) {
if (frm.doc.docstatus == 1 && frm.doc.per_received < 100) {
- frm.add_custom_button(__('Purchase Receipt'), () => {
- frm.events.make_purchase_receipt(frm);
- }, __('Create'));
+ frm.add_custom_button(
+ __("Purchase Receipt"),
+ () => {
+ frm.events.make_purchase_receipt(frm);
+ },
+ __("Create")
+ );
}
if (frm.doc.docstatus == 1 && frm.doc.per_received > 0) {
- frm.add_custom_button(__('Purchase Receipt'), () => {
- frappe.route_options = {
- 'purchase_invoice': frm.doc.name
- }
+ frm.add_custom_button(
+ __("Purchase Receipt"),
+ () => {
+ frappe.route_options = {
+ purchase_invoice: frm.doc.name,
+ };
- frappe.set_route("List", "Purchase Receipt", "List")
- }, __('View'));
+ frappe.set_route("List", "Purchase Receipt", "List");
+ },
+ __("View")
+ );
}
},
- onload: function(frm) {
- if(frm.doc.__onload && frm.is_new()) {
- if(frm.doc.supplier) {
+ onload: function (frm) {
+ if (frm.doc.__onload && frm.is_new()) {
+ if (frm.doc.supplier) {
frm.doc.apply_tds = frm.doc.__onload.supplier_tds ? 1 : 0;
}
- if(!frm.doc.__onload.supplier_tds) {
+ if (!frm.doc.__onload.supplier_tds) {
frm.set_df_property("apply_tds", "read_only", 1);
}
}
- erpnext.queries.setup_queries(frm, "Warehouse", function() {
+ erpnext.queries.setup_queries(frm, "Warehouse", function () {
return erpnext.queries.warehouse(frm.doc);
});
@@ -639,7 +687,7 @@
}
},
- is_subcontracted: function(frm) {
+ is_subcontracted: function (frm) {
if (frm.doc.is_old_subcontracting_flow) {
erpnext.buying.get_default_bom(frm);
}
@@ -647,30 +695,29 @@
frm.toggle_reqd("supplier_warehouse", frm.doc.is_subcontracted);
},
- update_stock: function(frm) {
+ update_stock: function (frm) {
hide_fields(frm.doc);
- frm.fields_dict.items.grid.toggle_reqd("item_code", frm.doc.update_stock? true: false);
+ frm.fields_dict.items.grid.toggle_reqd("item_code", frm.doc.update_stock ? true : false);
},
- make_purchase_receipt: function(frm) {
+ make_purchase_receipt: function (frm) {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_purchase_receipt",
frm: frm,
- freeze_message: __("Creating Purchase Receipt ...")
- })
+ freeze_message: __("Creating Purchase Receipt ..."),
+ });
},
- company: function(frm) {
+ company: function (frm) {
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
if (frm.doc.company) {
frappe.call({
- method:
- "erpnext.accounts.party.get_party_account",
+ method: "erpnext.accounts.party.get_party_account",
args: {
- party_type: 'Supplier',
+ party_type: "Supplier",
party: frm.doc.supplier,
- company: frm.doc.company
+ company: frm.doc.company,
},
callback: (response) => {
if (response) frm.set_value("credit_to", response.message);
@@ -678,4 +725,4 @@
});
}
},
-})
+});
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
index fa30c37..031b234 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
@@ -22,48 +22,35 @@
return [__(doc.status), "gray", "status,=," + doc.status];
}
- if (
- flt(doc.outstanding_amount) > 0 &&
- doc.docstatus == 1 &&
- cint(doc.on_hold)
- ) {
+ if (flt(doc.outstanding_amount) > 0 && doc.docstatus == 1 && cint(doc.on_hold)) {
if (!doc.release_date) {
return [__("On Hold"), "darkgrey"];
- } else if (
- frappe.datetime.get_diff(
- doc.release_date,
- frappe.datetime.nowdate()
- ) > 0
- ) {
+ } else if (frappe.datetime.get_diff(doc.release_date, frappe.datetime.nowdate()) > 0) {
return [__("Temporarily on Hold"), "darkgrey"];
}
}
const status_colors = {
- "Unpaid": "orange",
- "Paid": "green",
- "Return": "gray",
- "Overdue": "red",
+ Unpaid: "orange",
+ Paid: "green",
+ Return: "gray",
+ Overdue: "red",
"Partly Paid": "yellow",
"Internal Transfer": "darkgrey",
};
if (status_colors[doc.status]) {
- return [
- __(doc.status),
- status_colors[doc.status],
- "status,=," + doc.status,
- ];
+ return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
}
},
- onload: function(listview) {
- listview.page.add_action_item(__("Purchase Receipt"), ()=>{
+ onload: function (listview) {
+ listview.page.add_action_item(__("Purchase Receipt"), () => {
erpnext.bulk_transaction_processing.create(listview, "Purchase Invoice", "Purchase Receipt");
});
- listview.page.add_action_item(__("Payment"), ()=>{
+ listview.page.add_action_item(__("Payment"), () => {
erpnext.bulk_transaction_processing.create(listview, "Purchase Invoice", "Payment Entry");
});
- }
+ },
};
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 72c50ed..2ef0275 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -2108,6 +2108,92 @@
return_pi.submit()
self.assertEqual(return_pi.docstatus, 1)
+ def test_purchase_invoice_with_use_serial_batch_field_for_rejected_qty(self):
+ from erpnext.stock.doctype.item.test_item import make_item
+ from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
+
+ batch_item = make_item(
+ "_Test Purchase Invoice Batch Item For Rejected Qty",
+ properties={"has_batch_no": 1, "create_new_batch": 1, "is_stock_item": 1},
+ ).name
+
+ serial_item = make_item(
+ "_Test Purchase Invoice Serial Item for Rejected Qty",
+ properties={"has_serial_no": 1, "is_stock_item": 1},
+ ).name
+
+ rej_warehouse = create_warehouse("_Test Purchase INV Warehouse For Rejected Qty")
+
+ batch_no = "BATCH-PI-BNU-TPRBI-0001"
+ serial_nos = ["SNU-PI-TPRSI-0001", "SNU-PI-TPRSI-0002", "SNU-PI-TPRSI-0003"]
+
+ if not frappe.db.exists("Batch", batch_no):
+ frappe.get_doc(
+ {
+ "doctype": "Batch",
+ "batch_id": batch_no,
+ "item": batch_item,
+ }
+ ).insert()
+
+ for serial_no in serial_nos:
+ if not frappe.db.exists("Serial No", serial_no):
+ frappe.get_doc(
+ {
+ "doctype": "Serial No",
+ "item_code": serial_item,
+ "serial_no": serial_no,
+ }
+ ).insert()
+
+ pi = make_purchase_invoice(
+ item_code=batch_item,
+ received_qty=10,
+ qty=8,
+ rejected_qty=2,
+ update_stock=1,
+ rejected_warehouse=rej_warehouse,
+ use_serial_batch_fields=1,
+ batch_no=batch_no,
+ rate=100,
+ do_not_submit=1,
+ )
+
+ pi.append(
+ "items",
+ {
+ "item_code": serial_item,
+ "qty": 2,
+ "rate": 100,
+ "base_rate": 100,
+ "item_name": serial_item,
+ "uom": "Nos",
+ "stock_uom": "Nos",
+ "conversion_factor": 1,
+ "rejected_qty": 1,
+ "warehouse": pi.items[0].warehouse,
+ "rejected_warehouse": rej_warehouse,
+ "use_serial_batch_fields": 1,
+ "serial_no": "\n".join(serial_nos[:2]),
+ "rejected_serial_no": serial_nos[2],
+ },
+ )
+
+ pi.save()
+ pi.submit()
+
+ pi.reload()
+
+ for row in pi.items:
+ self.assertTrue(row.serial_and_batch_bundle)
+ self.assertTrue(row.rejected_serial_and_batch_bundle)
+
+ if row.item_code == batch_item:
+ self.assertEqual(row.batch_no, batch_no)
+ else:
+ self.assertEqual(row.serial_no, "\n".join(serial_nos[:2]))
+ self.assertEqual(row.rejected_serial_no, serial_nos[2])
+
def set_advance_flag(company, flag, default_account):
frappe.db.set_value(
@@ -2215,7 +2301,7 @@
pi.cost_center = args.parent_cost_center
bundle_id = None
- if args.get("batch_no") or args.get("serial_no"):
+ if not args.use_serial_batch_fields and ((args.get("batch_no") or args.get("serial_no"))):
batches = {}
qty = args.qty if args.qty is not None else 5
item_code = args.item or args.item_code or "_Test Item"
@@ -2262,6 +2348,9 @@
"rejected_warehouse": args.rejected_warehouse or "",
"asset_location": args.location or "",
"allow_zero_valuation_rate": args.get("allow_zero_valuation_rate") or 0,
+ "use_serial_batch_fields": args.get("use_serial_batch_fields") or 0,
+ "batch_no": args.get("batch_no") if args.get("use_serial_batch_fields") else "",
+ "serial_no": args.get("serial_no") if args.get("use_serial_batch_fields") else "",
},
)
diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
index 78dc4be..66a9cbe 100644
--- a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
+++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
@@ -8,24 +8,23 @@
add_deduct_tax(doc, cdt, cdn) {
let d = locals[cdt][cdn];
- if(!d.category && d.add_deduct_tax) {
+ if (!d.category && d.add_deduct_tax) {
frappe.msgprint(__("Please select Category first"));
- d.add_deduct_tax = '';
- }
- else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
+ d.add_deduct_tax = "";
+ } else if (d.category != "Total" && d.add_deduct_tax == "Deduct") {
frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
- d.add_deduct_tax = '';
+ d.add_deduct_tax = "";
}
- refresh_field('add_deduct_tax', d.name, 'taxes');
+ refresh_field("add_deduct_tax", d.name, "taxes");
},
category(doc, cdt, cdn) {
let d = locals[cdt][cdn];
- if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
+ if (d.category != "Total" && d.add_deduct_tax == "Deduct") {
frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
- d.add_deduct_tax = '';
+ d.add_deduct_tax = "";
}
- refresh_field('add_deduct_tax', d.name, 'taxes');
- }
+ refresh_field("add_deduct_tax", d.name, "taxes");
+ },
});
diff --git a/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js b/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js
index c7b7a14..c304c7f 100644
--- a/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js
+++ b/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js
@@ -2,47 +2,47 @@
// For license information, please see license.txt
frappe.ui.form.on("Repost Accounting Ledger", {
- setup: function(frm) {
- frm.fields_dict['vouchers'].grid.get_field('voucher_type').get_query = function(doc) {
+ setup: function (frm) {
+ frm.fields_dict["vouchers"].grid.get_field("voucher_type").get_query = function (doc) {
return {
- query: "erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger.get_repost_allowed_types"
- }
- }
+ query: "erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger.get_repost_allowed_types",
+ };
+ };
- frm.fields_dict['vouchers'].grid.get_field('voucher_no').get_query = function(doc) {
+ frm.fields_dict["vouchers"].grid.get_field("voucher_no").get_query = function (doc) {
if (doc.company) {
return {
filters: {
company: doc.company,
- docstatus: 1
- }
- }
+ docstatus: 1,
+ },
+ };
}
- }
+ };
},
- refresh: function(frm) {
- frm.add_custom_button(__('Show Preview'), () => {
+ refresh: function (frm) {
+ frm.add_custom_button(__("Show Preview"), () => {
frm.call({
- method: 'generate_preview',
+ method: "generate_preview",
doc: frm.doc,
freeze: true,
- freeze_message: __('Generating Preview'),
- callback: function(r) {
+ freeze_message: __("Generating Preview"),
+ callback: function (r) {
if (r && r.message) {
let content = r.message;
let opts = {
title: "Preview",
subtitle: "preview",
content: content,
- print_settings: {orientation: "landscape"},
+ print_settings: { orientation: "landscape" },
columns: [],
data: [],
- }
+ };
frappe.render_grid(opts);
}
- }
+ },
});
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js
index 6801408..b9621c0 100644
--- a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js
+++ b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js
@@ -1,53 +1,53 @@
// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Repost Payment Ledger', {
- setup: function(frm) {
+frappe.ui.form.on("Repost Payment Ledger", {
+ setup: function (frm) {
frm.set_query("voucher_type", () => {
return {
filters: {
- name: ['in', ['Purchase Invoice', 'Sales Invoice', 'Payment Entry', 'Journal Entry']]
- }
+ name: ["in", ["Purchase Invoice", "Sales Invoice", "Payment Entry", "Journal Entry"]],
+ },
};
});
- frm.fields_dict['repost_vouchers'].grid.get_field('voucher_type').get_query = function(doc) {
+ frm.fields_dict["repost_vouchers"].grid.get_field("voucher_type").get_query = function (doc) {
return {
filters: {
- name: ['in', ['Purchase Invoice', 'Sales Invoice', 'Payment Entry', 'Journal Entry']]
- }
- }
- }
+ name: ["in", ["Purchase Invoice", "Sales Invoice", "Payment Entry", "Journal Entry"]],
+ },
+ };
+ };
- frm.fields_dict['repost_vouchers'].grid.get_field('voucher_no').get_query = function(doc) {
+ frm.fields_dict["repost_vouchers"].grid.get_field("voucher_no").get_query = function (doc) {
if (doc.company) {
return {
filters: {
company: doc.company,
- docstatus: 1
- }
- }
+ docstatus: 1,
+ },
+ };
}
- }
-
+ };
},
- refresh: function(frm) {
-
- if (frm.doc.docstatus==1 && ['Queued', 'Failed'].find(x => x == frm.doc.repost_status)) {
- frm.set_intro(__("Use 'Repost in background' button to trigger background job. Job can only be triggered when document is in Queued or Failed status."));
- var btn_label = __("Repost in background")
+ refresh: function (frm) {
+ if (frm.doc.docstatus == 1 && ["Queued", "Failed"].find((x) => x == frm.doc.repost_status)) {
+ frm.set_intro(
+ __(
+ "Use 'Repost in background' button to trigger background job. Job can only be triggered when document is in Queued or Failed status."
+ )
+ );
+ var btn_label = __("Repost in background");
frm.add_custom_button(btn_label, () => {
frappe.call({
- method: 'erpnext.accounts.doctype.repost_payment_ledger.repost_payment_ledger.execute_repost_payment_ledger',
+ method: "erpnext.accounts.doctype.repost_payment_ledger.repost_payment_ledger.execute_repost_payment_ledger",
args: {
docname: frm.doc.name,
- }
+ },
});
- frappe.msgprint(__('Reposting in the background.'));
+ frappe.msgprint(__("Reposting in the background."));
});
}
-
- }
+ },
});
-
diff --git a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js
index e045184..76d17fc 100644
--- a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js
+++ b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js
@@ -1,12 +1,12 @@
frappe.listview_settings["Repost Payment Ledger"] = {
add_fields: ["repost_status"],
- get_indicator: function(doc) {
+ get_indicator: function (doc) {
var colors = {
- 'Queued': 'orange',
- 'Completed': 'green',
- 'Failed': 'red',
+ Queued: "orange",
+ Completed: "green",
+ Failed: "red",
};
let status = doc.repost_status;
- return [__(status), colors[status], 'status,=,'+status];
+ return [__(status), colors[status], "status,=," + status];
},
};
diff --git a/erpnext/accounts/doctype/sales_invoice/regional/italy.js b/erpnext/accounts/doctype/sales_invoice/regional/italy.js
index 2f305b9..a403b444 100644
--- a/erpnext/accounts/doctype/sales_invoice/regional/italy.js
+++ b/erpnext/accounts/doctype/sales_invoice/regional/italy.js
@@ -1,23 +1,23 @@
frappe.ui.form.on("Sales Invoice", {
- refresh: (frm) => {
- if(frm.doc.docstatus == 1) {
- frm.add_custom_button(__('Generate E-Invoice'), () => {
- frm.call({
- method: "erpnext.regional.italy.utils.generate_single_invoice",
- args: {
- docname: frm.doc.name
- },
- callback: function(r) {
- frm.reload_doc();
- if(r.message) {
- open_url_post(frappe.request.url, {
- cmd: 'frappe.core.doctype.file.file.download_file',
- file_url: r.message
- });
- }
- }
- });
- });
- }
- }
-});
\ No newline at end of file
+ refresh: (frm) => {
+ if (frm.doc.docstatus == 1) {
+ frm.add_custom_button(__("Generate E-Invoice"), () => {
+ frm.call({
+ method: "erpnext.regional.italy.utils.generate_single_invoice",
+ args: {
+ docname: frm.doc.name,
+ },
+ callback: function (r) {
+ frm.reload_doc();
+ if (r.message) {
+ open_url_post(frappe.request.url, {
+ cmd: "frappe.core.doctype.file.file.download_file",
+ file_url: r.message,
+ });
+ }
+ },
+ });
+ });
+ }
+ },
+});
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index ef1f6bd..17101cd 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -8,7 +8,9 @@
erpnext.accounts.pos.setup("Sales Invoice");
erpnext.accounts.taxes.setup_tax_filters("Sales Taxes and Charges");
erpnext.sales_common.setup_selling_controller();
-erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends erpnext.selling.SellingController {
+erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends (
+ erpnext.selling.SellingController
+) {
setup(doc) {
this.setup_posting_date_time_check();
super.setup(doc);
@@ -21,20 +23,31 @@
var me = this;
super.onload();
- this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice', 'Timesheet', 'POS Invoice Merge Log',
- 'POS Closing Entry', 'Journal Entry', 'Payment Entry', "Repost Payment Ledger", "Repost Accounting Ledger", "Unreconcile Payment", "Unreconcile Payment Entries", "Serial and Batch Bundle", "Bank Transaction",
+ this.frm.ignore_doctypes_on_cancel_all = [
+ "POS Invoice",
+ "Timesheet",
+ "POS Invoice Merge Log",
+ "POS Closing Entry",
+ "Journal Entry",
+ "Payment Entry",
+ "Repost Payment Ledger",
+ "Repost Accounting Ledger",
+ "Unreconcile Payment",
+ "Unreconcile Payment Entries",
+ "Serial and Batch Bundle",
+ "Bank Transaction",
];
- if(!this.frm.doc.__islocal && !this.frm.doc.customer && this.frm.doc.debit_to) {
+ if (!this.frm.doc.__islocal && !this.frm.doc.customer && this.frm.doc.debit_to) {
// show debit_to in print format
this.frm.set_df_property("debit_to", "print_hide", 0);
}
- erpnext.queries.setup_queries(this.frm, "Warehouse", function() {
+ erpnext.queries.setup_queries(this.frm, "Warehouse", function () {
return erpnext.queries.warehouse(me.frm.doc);
});
- if(this.frm.doc.__islocal && this.frm.doc.is_pos) {
+ if (this.frm.doc.__islocal && this.frm.doc.is_pos) {
//Load pos profile data on the invoice if the default value of Is POS is 1
me.frm.script_manager.trigger("is_pos");
@@ -46,30 +59,36 @@
refresh(doc, dt, dn) {
const me = this;
super.refresh();
- if(cur_frm.msgbox && cur_frm.msgbox.$wrapper.is(":visible")) {
+ if (cur_frm.msgbox && cur_frm.msgbox.$wrapper.is(":visible")) {
// hide new msgbox
cur_frm.msgbox.hide();
}
this.frm.toggle_reqd("due_date", !this.frm.doc.is_return);
- if (this.frm.doc.repost_required && this.frm.doc.docstatus===1) {
- this.frm.set_intro(__("Accounting entries for this invoice needs to be reposted. Please click on 'Repost' button to update."));
- this.frm.add_custom_button(__('Repost Accounting Entries'),
- () => {
+ if (this.frm.doc.repost_required && this.frm.doc.docstatus === 1) {
+ this.frm.set_intro(
+ __(
+ "Accounting entries for this invoice needs to be reposted. Please click on 'Repost' button to update."
+ )
+ );
+ this.frm
+ .add_custom_button(__("Repost Accounting Entries"), () => {
this.frm.call({
doc: this.frm.doc,
- method: 'repost_accounting_entries',
+ method: "repost_accounting_entries",
freeze: true,
- freeze_message: __('Reposting...'),
+ freeze_message: __("Reposting..."),
callback: (r) => {
if (!r.exc) {
- frappe.msgprint(__('Accounting Entries are reposted'));
+ frappe.msgprint(__("Accounting Entries are reposted"));
me.frm.refresh();
}
- }
+ },
});
- }).removeClass('btn-default').addClass('btn-warning');
+ })
+ .removeClass("btn-default")
+ .addClass("btn-warning");
}
if (this.frm.doc.is_return) {
@@ -79,79 +98,89 @@
this.show_general_ledger();
erpnext.accounts.ledger_preview.show_accounting_ledger_preview(this.frm);
- if(doc.update_stock){
+ if (doc.update_stock) {
this.show_stock_ledger();
erpnext.accounts.ledger_preview.show_stock_ledger_preview(this.frm);
}
- if (doc.docstatus == 1 && doc.outstanding_amount!=0) {
- this.frm.add_custom_button(
- __('Payment'),
- () => this.make_payment_entry(),
- __('Create')
- );
- this.frm.page.set_inner_btn_group_as_primary(__('Create'));
+ if (doc.docstatus == 1 && doc.outstanding_amount != 0) {
+ this.frm.add_custom_button(__("Payment"), () => this.make_payment_entry(), __("Create"));
+ this.frm.page.set_inner_btn_group_as_primary(__("Create"));
}
- if(doc.docstatus==1 && !doc.is_return) {
-
+ if (doc.docstatus == 1 && !doc.is_return) {
var is_delivered_by_supplier = false;
- is_delivered_by_supplier = cur_frm.doc.items.some(function(item){
+ is_delivered_by_supplier = cur_frm.doc.items.some(function (item) {
return item.is_delivered_by_supplier ? true : false;
- })
+ });
- if(doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
- cur_frm.add_custom_button(__('Return / Credit Note'),
- this.make_sales_return, __('Create'));
- cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+ if (doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
+ cur_frm.add_custom_button(__("Return / Credit Note"), this.make_sales_return, __("Create"));
+ cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
}
- if(cint(doc.update_stock)!=1) {
+ if (cint(doc.update_stock) != 1) {
// show Make Delivery Note button only if Sales Invoice is not created from Delivery Note
var from_delivery_note = false;
- from_delivery_note = cur_frm.doc.items
- .some(function(item) {
- return item.delivery_note ? true : false;
- });
+ from_delivery_note = cur_frm.doc.items.some(function (item) {
+ return item.delivery_note ? true : false;
+ });
- if(!from_delivery_note && !is_delivered_by_supplier) {
- cur_frm.add_custom_button(__('Delivery'),
- cur_frm.cscript['Make Delivery Note'], __('Create'));
+ if (!from_delivery_note && !is_delivered_by_supplier) {
+ cur_frm.add_custom_button(
+ __("Delivery"),
+ cur_frm.cscript["Make Delivery Note"],
+ __("Create")
+ );
}
}
- 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'));
-
- const payment_is_overdue = doc.payment_schedule.map(
- row => Date.parse(row.due_date) < Date.now()
- ).reduce(
- (prev, current) => prev || current
+ 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")
+ );
+
+ const payment_is_overdue = doc.payment_schedule
+ .map((row) => Date.parse(row.due_date) < Date.now())
+ .reduce((prev, current) => prev || current);
+
if (payment_is_overdue) {
- this.frm.add_custom_button(__('Dunning'), () => {
- this.frm.events.create_dunning(this.frm);
- }, __('Create'));
+ this.frm.add_custom_button(
+ __("Dunning"),
+ () => {
+ this.frm.events.create_dunning(this.frm);
+ },
+ __("Create")
+ );
}
}
if (doc.docstatus === 1) {
- cur_frm.add_custom_button(__('Maintenance Schedule'), function () {
- cur_frm.cscript.make_maintenance_schedule();
- }, __('Create'));
+ cur_frm.add_custom_button(
+ __("Maintenance Schedule"),
+ function () {
+ cur_frm.cscript.make_maintenance_schedule();
+ },
+ __("Create")
+ );
}
}
// Show buttons only when pos view is active
- if (cint(doc.docstatus==0) && cur_frm.page.current_view_name!=="pos" && !doc.is_return) {
+ if (cint(doc.docstatus == 0) && cur_frm.page.current_view_name !== "pos" && !doc.is_return) {
this.frm.cscript.sales_order_btn();
this.frm.cscript.delivery_note_btn();
this.frm.cscript.quotation_btn();
@@ -161,12 +190,18 @@
if (doc.docstatus == 1 && !doc.inter_company_invoice_reference) {
let internal = me.frm.doc.is_internal_customer;
if (internal) {
- let button_label = (me.frm.doc.company === me.frm.doc.represents_company) ? "Internal Purchase Invoice" :
- "Inter Company Purchase Invoice";
+ let button_label =
+ me.frm.doc.company === me.frm.doc.represents_company
+ ? "Internal Purchase Invoice"
+ : "Inter Company Purchase Invoice";
- me.frm.add_custom_button(button_label, function() {
- me.make_inter_company_invoice();
- }, __('Create'));
+ me.frm.add_custom_button(
+ button_label,
+ function () {
+ me.make_inter_company_invoice();
+ },
+ __("Create")
+ );
}
}
@@ -176,40 +211,45 @@
make_maintenance_schedule() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_maintenance_schedule",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
on_submit(doc, dt, dn) {
var me = this;
super.on_submit();
- if (frappe.get_route()[0] != 'Form') {
- return
+ if (frappe.get_route()[0] != "Form") {
+ return;
}
doc.items.forEach((row) => {
- if(row.delivery_note) frappe.model.clear_doc("Delivery Note", row.delivery_note)
+ if (row.delivery_note) frappe.model.clear_doc("Delivery Note", row.delivery_note);
});
}
set_default_print_format() {
// set default print format to POS type or Credit Note
- if(cur_frm.doc.is_pos) {
- if(cur_frm.pos_print_format) {
+ if (cur_frm.doc.is_pos) {
+ if (cur_frm.pos_print_format) {
cur_frm.meta._default_print_format = cur_frm.meta.default_print_format;
cur_frm.meta.default_print_format = cur_frm.pos_print_format;
}
- } else if(cur_frm.doc.is_return && !cur_frm.meta.default_print_format) {
- if(cur_frm.return_print_format) {
+ } else if (cur_frm.doc.is_return && !cur_frm.meta.default_print_format) {
+ if (cur_frm.return_print_format) {
cur_frm.meta._default_print_format = cur_frm.meta.default_print_format;
cur_frm.meta.default_print_format = cur_frm.return_print_format;
}
} else {
- if(cur_frm.meta._default_print_format) {
+ if (cur_frm.meta._default_print_format) {
cur_frm.meta.default_print_format = cur_frm.meta._default_print_format;
cur_frm.meta._default_print_format = null;
- } else if(in_list([cur_frm.pos_print_format, cur_frm.return_print_format], cur_frm.meta.default_print_format)) {
+ } else if (
+ in_list(
+ [cur_frm.pos_print_format, cur_frm.return_print_format],
+ cur_frm.meta.default_print_format
+ )
+ ) {
cur_frm.meta.default_print_format = null;
cur_frm.meta._default_print_format = null;
}
@@ -218,8 +258,9 @@
sales_order_btn() {
var me = this;
- this.$sales_order_btn = this.frm.add_custom_button(__('Sales Order'),
- function() {
+ this.$sales_order_btn = this.frm.add_custom_button(
+ __("Sales Order"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
source_doctype: "Sales Order",
@@ -231,99 +272,113 @@
docstatus: 1,
status: ["not in", ["Closed", "On Hold"]],
per_billed: ["<", 99.99],
- company: me.frm.doc.company
- }
- })
- }, __("Get Items From"));
+ company: me.frm.doc.company,
+ },
+ });
+ },
+ __("Get Items From")
+ );
}
quotation_btn() {
var me = this;
- this.$quotation_btn = this.frm.add_custom_button(__('Quotation'),
- function() {
+ this.$quotation_btn = this.frm.add_custom_button(
+ __("Quotation"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.selling.doctype.quotation.quotation.make_sales_invoice",
source_doctype: "Quotation",
target: me.frm,
- setters: [{
- fieldtype: 'Link',
- label: __('Customer'),
- options: 'Customer',
- fieldname: 'party_name',
- default: me.frm.doc.customer,
- }],
+ setters: [
+ {
+ fieldtype: "Link",
+ label: __("Customer"),
+ options: "Customer",
+ fieldname: "party_name",
+ default: me.frm.doc.customer,
+ },
+ ],
get_query_filters: {
docstatus: 1,
status: ["!=", "Lost"],
- company: me.frm.doc.company
- }
- })
- }, __("Get Items From"));
+ company: me.frm.doc.company,
+ },
+ });
+ },
+ __("Get Items From")
+ );
}
delivery_note_btn() {
var me = this;
- this.$delivery_note_btn = this.frm.add_custom_button(__('Delivery Note'),
- function() {
+ this.$delivery_note_btn = this.frm.add_custom_button(
+ __("Delivery Note"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
source_doctype: "Delivery Note",
target: me.frm,
date_field: "posting_date",
setters: {
- customer: me.frm.doc.customer || undefined
+ customer: me.frm.doc.customer || undefined,
},
- get_query: function() {
+ get_query: function () {
var filters = {
docstatus: 1,
company: me.frm.doc.company,
- is_return: 0
+ is_return: 0,
};
- if(me.frm.doc.customer) filters["customer"] = me.frm.doc.customer;
+ if (me.frm.doc.customer) filters["customer"] = me.frm.doc.customer;
return {
query: "erpnext.controllers.queries.get_delivery_notes_to_be_billed",
- filters: filters
+ filters: filters,
};
- }
+ },
});
- }, __("Get Items From"));
+ },
+ __("Get Items From")
+ );
}
tc_name() {
this.get_terms();
}
customer() {
- if (this.frm.doc.is_pos){
+ if (this.frm.doc.is_pos) {
var pos_profile = this.frm.doc.pos_profile;
}
var me = this;
- if(this.frm.updating_party_details) return;
+ if (this.frm.updating_party_details) return;
if (this.frm.doc.__onload && this.frm.doc.__onload.load_after_mapping) return;
- erpnext.utils.get_party_details(this.frm,
- "erpnext.accounts.party.get_party_details", {
+ erpnext.utils.get_party_details(
+ this.frm,
+ "erpnext.accounts.party.get_party_details",
+ {
posting_date: this.frm.doc.posting_date,
party: this.frm.doc.customer,
party_type: "Customer",
account: this.frm.doc.debit_to,
price_list: this.frm.doc.selling_price_list,
- pos_profile: pos_profile
- }, function() {
+ pos_profile: pos_profile,
+ },
+ function () {
me.apply_pricing_rule();
- });
+ }
+ );
- if(this.frm.doc.customer) {
+ if (this.frm.doc.customer) {
frappe.call({
- "method": "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_loyalty_programs",
- "args": {
- "customer": this.frm.doc.customer
+ method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_loyalty_programs",
+ args: {
+ customer: this.frm.doc.customer,
},
- callback: function(r) {
- if(r.message && r.message.length > 1) {
+ callback: function (r) {
+ if (r.message && r.message.length > 1) {
select_loyalty_program(me.frm, r.message);
}
- }
+ },
});
}
}
@@ -332,13 +387,13 @@
let me = this;
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_inter_company_purchase_invoice",
- frm: me.frm
+ frm: me.frm,
});
}
debit_to() {
var me = this;
- if(this.frm.doc.debit_to) {
+ if (this.frm.doc.debit_to) {
me.frm.call({
method: "frappe.client.get_value",
args: {
@@ -346,12 +401,12 @@
fieldname: "account_currency",
filters: { name: me.frm.doc.debit_to },
},
- callback: function(r, rt) {
- if(r.message) {
+ callback: function (r, rt) {
+ if (r.message) {
me.frm.set_value("party_account_currency", r.message.account_currency);
me.set_dynamic_labels();
}
- }
+ },
});
}
}
@@ -365,8 +420,12 @@
if (cint(this.frm.doc.write_off_outstanding_amount_automatically)) {
frappe.model.round_floats_in(this.frm.doc, ["grand_total", "paid_amount"]);
// this will make outstanding amount 0
- this.frm.set_value("write_off_amount",
- flt(this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance, precision("write_off_amount"))
+ this.frm.set_value(
+ "write_off_amount",
+ flt(
+ this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance,
+ precision("write_off_amount")
+ )
);
}
@@ -381,12 +440,16 @@
items_add(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
- this.frm.script_manager.copy_from_first_row("items", row, ["income_account", "discount_account", "cost_center"]);
+ this.frm.script_manager.copy_from_first_row("items", row, [
+ "income_account",
+ "discount_account",
+ "cost_center",
+ ]);
}
set_dynamic_labels() {
super.set_dynamic_labels();
- this.frm.events.hide_fields(this.frm)
+ this.frm.events.hide_fields(this.frm);
}
items_on_form_rendered() {
@@ -400,39 +463,39 @@
make_sales_return() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_sales_return",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
asset(frm, cdt, cdn) {
var row = locals[cdt][cdn];
- if(row.asset) {
+ if (row.asset) {
frappe.call({
method: erpnext.assets.doctype.asset.depreciation.get_disposal_account_and_cost_center,
args: {
- "company": frm.doc.company
+ company: frm.doc.company,
},
- callback: function(r, rt) {
+ callback: function (r, rt) {
frappe.model.set_value(cdt, cdn, "income_account", r.message[0]);
frappe.model.set_value(cdt, cdn, "cost_center", r.message[1]);
- }
- })
+ },
+ });
}
}
- is_pos(frm){
+ is_pos(frm) {
this.set_pos_data();
}
pos_profile() {
- this.frm.doc.taxes = []
+ this.frm.doc.taxes = [];
this.set_pos_data();
}
set_pos_data() {
- if(this.frm.doc.is_pos) {
+ if (this.frm.doc.is_pos) {
this.frm.set_value("allocate_advances_automatically", 0);
- if(!this.frm.doc.company) {
+ if (!this.frm.doc.company) {
this.frm.set_value("is_pos", 0);
frappe.msgprint(__("Please specify Company to proceed"));
} else {
@@ -440,13 +503,13 @@
return this.frm.call({
doc: me.frm.doc,
method: "set_missing_values",
- callback: function(r) {
- if(!r.exc) {
- if(r.message && r.message.print_format) {
+ callback: function (r) {
+ if (!r.exc) {
+ if (r.message && r.message.print_format) {
me.frm.pos_print_format = r.message.print_format;
}
me.frm.trigger("update_stock");
- if(me.frm.doc.taxes_and_charges) {
+ if (me.frm.doc.taxes_and_charges) {
me.frm.script_manager.trigger("taxes_and_charges");
}
@@ -454,21 +517,20 @@
me.set_dynamic_labels();
me.calculate_taxes_and_totals();
}
- }
+ },
});
}
- }
- else this.frm.trigger("refresh");
+ } else this.frm.trigger("refresh");
}
- amount(){
- this.write_off_outstanding_amount_automatically()
+ amount() {
+ this.write_off_outstanding_amount_automatically();
}
- change_amount(){
- if(this.frm.doc.paid_amount > this.frm.doc.grand_total){
+ change_amount() {
+ if (this.frm.doc.paid_amount > this.frm.doc.grand_total) {
this.calculate_write_off_amount();
- }else {
+ } else {
this.frm.set_value("change_amount", 0.0);
this.frm.set_value("base_change_amount", 0.0);
}
@@ -476,7 +538,7 @@
this.frm.refresh_fields();
}
- loyalty_amount(){
+ loyalty_amount() {
this.calculate_outstanding_amount();
this.frm.refresh_field("outstanding_amount");
this.frm.refresh_field("paid_amount");
@@ -488,16 +550,24 @@
super.currency();
if (this.frm.doc.timesheets) {
this.frm.doc.timesheets.forEach((d) => {
- let row = frappe.get_doc(d.doctype, d.name)
- set_timesheet_detail_rate(row.doctype, row.name, me.frm.doc.currency, row.timesheet_detail)
+ let row = frappe.get_doc(d.doctype, d.name);
+ set_timesheet_detail_rate(row.doctype, row.name, me.frm.doc.currency, row.timesheet_detail);
});
this.frm.trigger("calculate_timesheet_totals");
}
}
is_cash_or_non_trade_discount() {
- this.frm.set_df_property("additional_discount_account", "hidden", 1 - this.frm.doc.is_cash_or_non_trade_discount);
- this.frm.set_df_property("additional_discount_account", "reqd", this.frm.doc.is_cash_or_non_trade_discount);
+ this.frm.set_df_property(
+ "additional_discount_account",
+ "hidden",
+ 1 - this.frm.doc.is_cash_or_non_trade_discount
+ );
+ this.frm.set_df_property(
+ "additional_discount_account",
+ "reqd",
+ this.frm.doc.is_cash_or_non_trade_discount
+ );
if (!this.frm.doc.is_cash_or_non_trade_discount) {
this.frm.set_value("additional_discount_account", "");
@@ -508,337 +578,349 @@
};
// for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({ frm: cur_frm }));
-cur_frm.cscript['Make Delivery Note'] = function() {
+cur_frm.cscript["Make Delivery Note"] = function () {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_delivery_note",
- frm: cur_frm
- })
-}
+ frm: cur_frm,
+ });
+};
-cur_frm.fields_dict.cash_bank_account.get_query = function(doc) {
+cur_frm.fields_dict.cash_bank_account.get_query = function (doc) {
return {
filters: [
["Account", "account_type", "in", ["Cash", "Bank"]],
["Account", "root_type", "=", "Asset"],
- ["Account", "is_group", "=",0],
- ["Account", "company", "=", doc.company]
- ]
- }
-}
+ ["Account", "is_group", "=", 0],
+ ["Account", "company", "=", doc.company],
+ ],
+ };
+};
-cur_frm.fields_dict.write_off_account.get_query = function(doc) {
- return{
- filters:{
- 'report_type': 'Profit and Loss',
- 'is_group': 0,
- 'company': doc.company
- }
- }
-}
+cur_frm.fields_dict.write_off_account.get_query = function (doc) {
+ return {
+ filters: {
+ report_type: "Profit and Loss",
+ is_group: 0,
+ company: doc.company,
+ },
+ };
+};
// Write off cost center
//-----------------------
-cur_frm.fields_dict.write_off_cost_center.get_query = function(doc) {
- return{
- filters:{
- 'is_group': 0,
- 'company': doc.company
- }
- }
-}
+cur_frm.fields_dict.write_off_cost_center.get_query = function (doc) {
+ return {
+ filters: {
+ is_group: 0,
+ company: doc.company,
+ },
+ };
+};
// Cost Center in Details Table
// -----------------------------
-cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function(doc) {
+cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function (doc) {
return {
filters: {
- 'company': doc.company,
- "is_group": 0
- }
- }
-}
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+};
-cur_frm.cscript.income_account = function(doc, cdt, cdn) {
+cur_frm.cscript.income_account = function (doc, cdt, cdn) {
erpnext.utils.copy_value_in_all_rows(doc, cdt, cdn, "items", "income_account");
-}
+};
-cur_frm.cscript.expense_account = function(doc, cdt, cdn) {
+cur_frm.cscript.expense_account = function (doc, cdt, cdn) {
erpnext.utils.copy_value_in_all_rows(doc, cdt, cdn, "items", "expense_account");
-}
+};
-cur_frm.cscript.cost_center = function(doc, cdt, cdn) {
+cur_frm.cscript.cost_center = function (doc, cdt, cdn) {
erpnext.utils.copy_value_in_all_rows(doc, cdt, cdn, "items", "cost_center");
-}
+};
-cur_frm.set_query("debit_to", function(doc) {
+cur_frm.set_query("debit_to", function (doc) {
return {
filters: {
- 'account_type': 'Receivable',
- 'is_group': 0,
- 'company': doc.company
- }
- }
+ account_type: "Receivable",
+ is_group: 0,
+ company: doc.company,
+ },
+ };
});
-cur_frm.set_query("asset", "items", function(doc, cdt, cdn) {
+cur_frm.set_query("asset", "items", function (doc, cdt, cdn) {
var d = locals[cdt][cdn];
return {
filters: [
["Asset", "item_code", "=", d.item_code],
["Asset", "docstatus", "=", 1],
["Asset", "status", "in", ["Submitted", "Partially Depreciated", "Fully Depreciated"]],
- ["Asset", "company", "=", doc.company]
- ]
- }
+ ["Asset", "company", "=", doc.company],
+ ],
+ };
});
-frappe.ui.form.on('Sales Invoice', {
- setup: function(frm){
- frm.add_fetch('customer', 'tax_id', 'tax_id');
- frm.add_fetch('payment_term', 'invoice_portion', 'invoice_portion');
- frm.add_fetch('payment_term', 'description', 'description');
+frappe.ui.form.on("Sales Invoice", {
+ setup: function (frm) {
+ frm.add_fetch("customer", "tax_id", "tax_id");
+ frm.add_fetch("payment_term", "invoice_portion", "invoice_portion");
+ frm.add_fetch("payment_term", "description", "description");
- frm.set_df_property('packed_items', 'cannot_add_rows', true);
- frm.set_df_property('packed_items', 'cannot_delete_rows', true);
+ frm.set_df_property("packed_items", "cannot_add_rows", true);
+ frm.set_df_property("packed_items", "cannot_delete_rows", true);
- frm.set_query("account_for_change_amount", function() {
+ frm.set_query("account_for_change_amount", function () {
return {
filters: {
- account_type: ['in', ["Cash", "Bank"]],
+ account_type: ["in", ["Cash", "Bank"]],
company: frm.doc.company,
- is_group: 0
- }
+ is_group: 0,
+ },
};
});
- frm.set_query("unrealized_profit_loss_account", function() {
+ frm.set_query("unrealized_profit_loss_account", function () {
return {
filters: {
company: frm.doc.company,
is_group: 0,
root_type: "Liability",
- }
+ },
};
});
- frm.set_query("adjustment_against", function() {
+ frm.set_query("adjustment_against", function () {
return {
filters: {
company: frm.doc.company,
customer: frm.doc.customer,
- docstatus: 1
- }
+ docstatus: 1,
+ },
};
});
- frm.set_query("additional_discount_account", function() {
+ frm.set_query("additional_discount_account", function () {
return {
filters: {
company: frm.doc.company,
is_group: 0,
report_type: "Profit and Loss",
- }
+ },
};
});
- frm.set_query("income_account", "items", function() {
- return{
+ frm.set_query("income_account", "items", function () {
+ return {
query: "erpnext.controllers.queries.get_income_account",
filters: {
- 'company': frm.doc.company,
- "disabled": 0
- }
- }
- });
-
- frm.custom_make_buttons = {
- 'Delivery Note': 'Delivery',
- 'Sales Invoice': 'Return / Credit Note',
- 'Payment Request': 'Payment Request',
- 'Payment Entry': 'Payment'
- },
- frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function(doc, cdt, cdn){
- return{
- query: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet",
- filters: {'project': doc.project}
- }
- }
-
- // discount account
- frm.fields_dict['items'].grid.get_field('discount_account').get_query = function(doc) {
- return {
- filters: {
- 'report_type': 'Profit and Loss',
- 'company': doc.company,
- "is_group": 0
- }
- }
- }
-
- frm.fields_dict['items'].grid.get_field('deferred_revenue_account').get_query = function(doc) {
- return {
- filters: {
- 'root_type': 'Liability',
- 'company': doc.company,
- "is_group": 0
- }
- }
- }
-
- frm.set_query('company_address', function(doc) {
- if(!doc.company) {
- frappe.throw(__('Please set Company'));
- }
-
- return {
- query: 'frappe.contacts.doctype.address.address.address_query',
- filters: {
- link_doctype: 'Company',
- link_name: doc.company
- }
+ company: frm.doc.company,
+ disabled: 0,
+ },
};
});
- frm.set_query('pos_profile', function(doc) {
- if(!doc.company) {
- frappe.throw(__('Please set Company'));
+ (frm.custom_make_buttons = {
+ "Delivery Note": "Delivery",
+ "Sales Invoice": "Return / Credit Note",
+ "Payment Request": "Payment Request",
+ "Payment Entry": "Payment",
+ }),
+ (frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function (doc, cdt, cdn) {
+ return {
+ query: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet",
+ filters: { project: doc.project },
+ };
+ });
+
+ // discount account
+ frm.fields_dict["items"].grid.get_field("discount_account").get_query = function (doc) {
+ return {
+ filters: {
+ report_type: "Profit and Loss",
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+ };
+
+ frm.fields_dict["items"].grid.get_field("deferred_revenue_account").get_query = function (doc) {
+ return {
+ filters: {
+ root_type: "Liability",
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+ };
+
+ frm.set_query("company_address", function (doc) {
+ if (!doc.company) {
+ frappe.throw(__("Please set Company"));
}
return {
- query: 'erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query',
+ query: "frappe.contacts.doctype.address.address.address_query",
filters: {
- company: doc.company
- }
+ link_doctype: "Company",
+ link_name: doc.company,
+ },
+ };
+ });
+
+ frm.set_query("pos_profile", function (doc) {
+ if (!doc.company) {
+ frappe.throw(__("Please set Company"));
+ }
+
+ return {
+ query: "erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query",
+ filters: {
+ company: doc.company,
+ },
};
});
// set get_query for loyalty redemption account
- frm.fields_dict["loyalty_redemption_account"].get_query = function() {
+ frm.fields_dict["loyalty_redemption_account"].get_query = function () {
return {
- filters:{
- "company": frm.doc.company,
- "is_group": 0
- }
- }
+ filters: {
+ company: frm.doc.company,
+ is_group: 0,
+ },
+ };
};
// set get_query for loyalty redemption cost center
- frm.fields_dict["loyalty_redemption_cost_center"].get_query = function() {
+ frm.fields_dict["loyalty_redemption_cost_center"].get_query = function () {
return {
- filters:{
- "company": frm.doc.company,
- "is_group": 0
- }
- }
+ filters: {
+ company: frm.doc.company,
+ is_group: 0,
+ },
+ };
};
},
// When multiple companies are set up. in case company name is changed set default company address
- company: function(frm){
+ company: function (frm) {
if (frm.doc.company) {
frappe.call({
method: "erpnext.setup.doctype.company.company.get_default_company_address",
- args: {name:frm.doc.company, existing_address: frm.doc.company_address || ""},
+ args: { name: frm.doc.company, existing_address: frm.doc.company_address || "" },
debounce: 2000,
- callback: function(r){
- if (r.message){
- frm.set_value("company_address",r.message)
+ callback: function (r) {
+ if (r.message) {
+ frm.set_value("company_address", r.message);
+ } else {
+ frm.set_value("company_address", "");
}
- else {
- frm.set_value("company_address","")
- }
- }
- })
+ },
+ });
}
},
- onload: function(frm) {
+ onload: function (frm) {
frm.redemption_conversion_factor = null;
},
- update_stock: function(frm, dt, dn) {
+ update_stock: function (frm, dt, dn) {
frm.events.hide_fields(frm);
- frm.trigger('reset_posting_time');
+ frm.trigger("reset_posting_time");
},
- redeem_loyalty_points: function(frm) {
+ redeem_loyalty_points: function (frm) {
frm.events.get_loyalty_details(frm);
},
- loyalty_points: function(frm) {
+ loyalty_points: function (frm) {
if (frm.redemption_conversion_factor) {
frm.events.set_loyalty_points(frm);
} else {
frappe.call({
method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_redeemption_factor",
args: {
- "loyalty_program": frm.doc.loyalty_program
+ loyalty_program: frm.doc.loyalty_program,
},
- callback: function(r) {
+ callback: function (r) {
if (r) {
frm.redemption_conversion_factor = r.message;
frm.events.set_loyalty_points(frm);
}
- }
+ },
});
}
},
- hide_fields: function(frm) {
+ hide_fields: function (frm) {
let doc = frm.doc;
- var parent_fields = ['project', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances',
- 'advances', 'from_date', 'to_date'];
+ var parent_fields = [
+ "project",
+ "due_date",
+ "is_opening",
+ "source",
+ "total_advance",
+ "get_advances",
+ "advances",
+ "from_date",
+ "to_date",
+ ];
- if(cint(doc.is_pos) == 1) {
+ if (cint(doc.is_pos) == 1) {
hide_field(parent_fields);
} else {
for (var i in parent_fields) {
var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
- if(!docfield.hidden) unhide_field(parent_fields[i]);
+ if (!docfield.hidden) unhide_field(parent_fields[i]);
}
}
frm.refresh_fields();
},
- get_loyalty_details: function(frm) {
+ get_loyalty_details: function (frm) {
if (frm.doc.customer && frm.doc.redeem_loyalty_points) {
frappe.call({
method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details",
args: {
- "customer": frm.doc.customer,
- "loyalty_program": frm.doc.loyalty_program,
- "expiry_date": frm.doc.posting_date,
- "company": frm.doc.company
+ customer: frm.doc.customer,
+ loyalty_program: frm.doc.loyalty_program,
+ expiry_date: frm.doc.posting_date,
+ company: frm.doc.company,
},
- callback: function(r) {
+ callback: function (r) {
if (r) {
frm.set_value("loyalty_redemption_account", r.message.expense_account);
frm.set_value("loyalty_redemption_cost_center", r.message.cost_center);
frm.redemption_conversion_factor = r.message.conversion_factor;
}
- }
+ },
});
}
},
- set_loyalty_points: function(frm) {
+ set_loyalty_points: function (frm) {
if (frm.redemption_conversion_factor) {
- let loyalty_amount = flt(frm.redemption_conversion_factor*flt(frm.doc.loyalty_points), precision("loyalty_amount"));
- var remaining_amount = flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
- if (frm.doc.grand_total && (remaining_amount < loyalty_amount)) {
- let redeemable_points = parseInt(remaining_amount/frm.redemption_conversion_factor);
- frappe.throw(__("You can only redeem max {0} points in this order.",[redeemable_points]));
+ let loyalty_amount = flt(
+ frm.redemption_conversion_factor * flt(frm.doc.loyalty_points),
+ precision("loyalty_amount")
+ );
+ var remaining_amount =
+ flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
+ if (frm.doc.grand_total && remaining_amount < loyalty_amount) {
+ let redeemable_points = parseInt(remaining_amount / frm.redemption_conversion_factor);
+ frappe.throw(__("You can only redeem max {0} points in this order.", [redeemable_points]));
}
frm.set_value("loyalty_amount", loyalty_amount);
}
},
- project: function(frm) {
+ project: function (frm) {
if (frm.doc.project) {
frm.events.add_timesheet_data(frm, {
- project: frm.doc.project
+ project: frm.doc.project,
});
}
},
@@ -858,26 +940,30 @@
},
async get_timesheet_data(frm, kwargs) {
- return frappe.call({
- method: "erpnext.projects.doctype.timesheet.timesheet.get_projectwise_timesheet_data",
- args: kwargs
- }).then(r => {
- if (!r.exc && r.message.length > 0) {
- return r.message
- } else {
- return []
- }
- });
+ return frappe
+ .call({
+ method: "erpnext.projects.doctype.timesheet.timesheet.get_projectwise_timesheet_data",
+ args: kwargs,
+ })
+ .then((r) => {
+ if (!r.exc && r.message.length > 0) {
+ return r.message;
+ } else {
+ return [];
+ }
+ });
},
- set_timesheet_data: function(frm, timesheets) {
- frm.clear_table("timesheets")
+ set_timesheet_data: function (frm, timesheets) {
+ frm.clear_table("timesheets");
timesheets.forEach(async (timesheet) => {
if (frm.doc.currency != timesheet.currency) {
const exchange_rate = await frm.events.get_exchange_rate(
- frm, timesheet.currency, frm.doc.currency
- )
- frm.events.append_time_log(frm, timesheet, exchange_rate)
+ frm,
+ timesheet.currency,
+ frm.doc.currency
+ );
+ frm.events.append_time_log(frm, timesheet, exchange_rate);
} else {
frm.events.append_time_log(frm, timesheet, 1.0);
}
@@ -888,9 +974,9 @@
async get_exchange_rate(frm, from_currency, to_currency) {
if (
- frm.exchange_rates
- && frm.exchange_rates[from_currency]
- && frm.exchange_rates[from_currency][to_currency]
+ frm.exchange_rates &&
+ frm.exchange_rates[from_currency] &&
+ frm.exchange_rates[from_currency][to_currency]
) {
return frm.exchange_rates[from_currency][to_currency];
}
@@ -899,20 +985,20 @@
method: "erpnext.setup.utils.get_exchange_rate",
args: {
from_currency,
- to_currency
+ to_currency,
},
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
// cache exchange rates
frm.exchange_rates = frm.exchange_rates || {};
frm.exchange_rates[from_currency] = frm.exchange_rates[from_currency] || {};
frm.exchange_rates[from_currency][to_currency] = r.message;
}
- }
+ },
});
},
- append_time_log: function(frm, time_log, exchange_rate) {
+ append_time_log: function (frm, time_log, exchange_rate) {
const row = frm.add_child("timesheets");
row.activity_type = time_log.activity_type;
row.description = time_log.description;
@@ -925,114 +1011,118 @@
row.project_name = time_log.project_name;
},
- calculate_timesheet_totals: function(frm) {
- frm.set_value("total_billing_amount",
- frm.doc.timesheets.reduce((a, b) => a + (b["billing_amount"] || 0.0), 0.0));
- frm.set_value("total_billing_hours",
- frm.doc.timesheets.reduce((a, b) => a + (b["billing_hours"] || 0.0), 0.0));
+ calculate_timesheet_totals: function (frm) {
+ frm.set_value(
+ "total_billing_amount",
+ frm.doc.timesheets.reduce((a, b) => a + (b["billing_amount"] || 0.0), 0.0)
+ );
+ frm.set_value(
+ "total_billing_hours",
+ frm.doc.timesheets.reduce((a, b) => a + (b["billing_hours"] || 0.0), 0.0)
+ );
},
- refresh: function(frm) {
- if (frm.doc.docstatus===0 && !frm.doc.is_return) {
- frm.add_custom_button(__("Fetch Timesheet"), function() {
+ refresh: function (frm) {
+ if (frm.doc.docstatus === 0 && !frm.doc.is_return) {
+ frm.add_custom_button(__("Fetch Timesheet"), function () {
let d = new frappe.ui.Dialog({
title: __("Fetch Timesheet"),
fields: [
{
- "label" : __("From"),
- "fieldname": "from_time",
- "fieldtype": "Date",
- "reqd": 1,
+ label: __("From"),
+ fieldname: "from_time",
+ fieldtype: "Date",
+ reqd: 1,
},
{
fieldtype: "Column Break",
fieldname: "col_break_1",
},
{
- "label" : __("To"),
- "fieldname": "to_time",
- "fieldtype": "Date",
- "reqd": 1,
+ label: __("To"),
+ fieldname: "to_time",
+ fieldtype: "Date",
+ reqd: 1,
},
{
- "label" : __("Project"),
- "fieldname": "project",
- "fieldtype": "Link",
- "options": "Project",
- "default": frm.doc.project
+ label: __("Project"),
+ fieldname: "project",
+ fieldtype: "Link",
+ options: "Project",
+ default: frm.doc.project,
},
],
- primary_action: function() {
+ primary_action: function () {
const data = d.get_values();
frm.events.add_timesheet_data(frm, {
from_time: data.from_time,
to_time: data.to_time,
- project: data.project
+ project: data.project,
});
d.hide();
},
- primary_action_label: __("Get Timesheets")
+ primary_action_label: __("Get Timesheets"),
});
d.show();
});
}
if (frm.doc.is_debit_note) {
- frm.set_df_property('return_against', 'label', __('Adjustment Against'));
+ frm.set_df_property("return_against", "label", __("Adjustment Against"));
}
},
- create_invoice_discounting: function(frm) {
+ create_invoice_discounting: function (frm) {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.create_invoice_discounting",
- frm: frm
+ frm: frm,
});
},
- create_dunning: function(frm) {
+ create_dunning: function (frm) {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.create_dunning",
- frm: frm
+ frm: frm,
});
- }
+ },
});
frappe.ui.form.on("Sales Invoice Timesheet", {
timesheets_remove(frm) {
frm.trigger("calculate_timesheet_totals");
- }
+ },
});
-var set_timesheet_detail_rate = function(cdt, cdn, currency, timelog) {
+var set_timesheet_detail_rate = function (cdt, cdn, currency, timelog) {
frappe.call({
method: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet_detail_rate",
args: {
timelog: timelog,
- currency: currency
+ currency: currency,
},
- callback: function(r) {
+ callback: function (r) {
if (!r.exc && r.message) {
- frappe.model.set_value(cdt, cdn, 'billing_amount', r.message);
+ frappe.model.set_value(cdt, cdn, "billing_amount", r.message);
}
- }
+ },
});
-}
+};
-var select_loyalty_program = function(frm, loyalty_programs) {
+var select_loyalty_program = function (frm, loyalty_programs) {
var dialog = new frappe.ui.Dialog({
title: __("Select Loyalty Program"),
fields: [
{
- "label": __("Loyalty Program"),
- "fieldname": "loyalty_program",
- "fieldtype": "Select",
- "options": loyalty_programs,
- "default": loyalty_programs[0]
- }
- ]
+ label: __("Loyalty Program"),
+ fieldname: "loyalty_program",
+ fieldtype: "Select",
+ options: loyalty_programs,
+ default: loyalty_programs[0],
+ },
+ ],
});
- dialog.set_primary_action(__("Set Loyalty Program"), function() {
+ dialog.set_primary_action(__("Set Loyalty Program"), function () {
dialog.hide();
return frappe.call({
method: "frappe.client.set_value",
@@ -1042,9 +1132,9 @@
fieldname: "loyalty_program",
value: dialog.get_value("loyalty_program"),
},
- callback: function(r) { }
+ callback: function (r) {},
});
});
dialog.show();
-}
+};
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index 5e2187e..88b28ad 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -785,6 +785,7 @@
"hide_days": 1,
"hide_seconds": 1,
"label": "Time Sheets",
+ "no_copy": 1,
"options": "Sales Invoice Timesheet",
"print_hide": 1
},
@@ -2182,7 +2183,7 @@
"link_fieldname": "consolidated_invoice"
}
],
- "modified": "2024-01-02 17:25:46.027523",
+ "modified": "2024-03-01 09:21:54.201289",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 3352e0d..e2cbf5e 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -8,6 +8,7 @@
from frappe.model.mapper import get_mapped_doc
from frappe.model.utils import get_fetch_values
from frappe.utils import add_days, cint, cstr, flt, formatdate, get_link_to_form, getdate, nowdate
+from frappe.utils.data import comma_and
import erpnext
from erpnext.accounts.deferred_revenue import validate_service_stop_date
@@ -27,7 +28,6 @@
from erpnext.accounts.utils import cancel_exchange_gain_loss_journal, get_account_currency
from erpnext.assets.doctype.asset.depreciation import (
depreciate_asset,
- get_disposal_account_and_cost_center,
get_gl_entries_on_asset_disposal,
get_gl_entries_on_asset_regain,
reset_depreciation_schedule,
@@ -39,7 +39,6 @@
from erpnext.projects.doctype.timesheet.timesheet import get_projectwise_timesheet_data
from erpnext.setup.doctype.company.company import update_company_current_month_sales
from erpnext.stock.doctype.delivery_note.delivery_note import update_billed_amount_based_on_so
-from erpnext.stock.doctype.serial_no.serial_no import get_delivery_note_serial_no, get_serial_nos
form_grid_templates = {"items": "templates/form_grid/item_grid.html"}
@@ -297,11 +296,13 @@
if cint(self.is_pos):
self.validate_pos()
+ self.validate_dropship_item()
+
if cint(self.update_stock):
- self.validate_dropship_item()
self.validate_warehouse()
self.update_current_stock()
- self.validate_delivery_note()
+
+ self.validate_delivery_note()
# validate service stop date to lie in between start and end date
validate_service_stop_date(self)
@@ -379,13 +380,7 @@
def validate_item_cost_centers(self):
for item in self.items:
- cost_center_company = frappe.get_cached_value("Cost Center", item.cost_center, "company")
- if cost_center_company != self.company:
- frappe.throw(
- _("Row #{0}: Cost Center {1} does not belong to company {2}").format(
- frappe.bold(item.idx), frappe.bold(item.cost_center), frappe.bold(self.company)
- )
- )
+ item.validate_cost_center(self.company)
def validate_income_account(self):
for item in self.get("items"):
@@ -601,43 +596,48 @@
self.delete_auto_created_batches()
def update_status_updater_args(self):
- if cint(self.update_stock):
- self.status_updater.append(
- {
- "source_dt": "Sales Invoice Item",
- "target_dt": "Sales Order Item",
- "target_parent_dt": "Sales Order",
- "target_parent_field": "per_delivered",
- "target_field": "delivered_qty",
- "target_ref_field": "qty",
- "source_field": "qty",
- "join_field": "so_detail",
- "percent_join_field": "sales_order",
- "status_field": "delivery_status",
- "keyword": "Delivered",
- "second_source_dt": "Delivery Note Item",
- "second_source_field": "qty",
- "second_join_field": "so_detail",
- "overflow_type": "delivery",
- "extra_cond": """ and exists(select name from `tabSales Invoice`
- where name=`tabSales Invoice Item`.parent and update_stock = 1)""",
- }
- )
- if cint(self.is_return):
- self.status_updater.append(
- {
- "source_dt": "Sales Invoice Item",
- "target_dt": "Sales Order Item",
- "join_field": "so_detail",
- "target_field": "returned_qty",
- "target_parent_dt": "Sales Order",
- "source_field": "-1 * qty",
- "second_source_dt": "Delivery Note Item",
- "second_source_field": "-1 * qty",
- "second_join_field": "so_detail",
- "extra_cond": """ and exists (select name from `tabSales Invoice` where name=`tabSales Invoice Item`.parent and update_stock=1 and is_return=1)""",
- }
- )
+ if not cint(self.update_stock):
+ return
+
+ self.status_updater.append(
+ {
+ "source_dt": "Sales Invoice Item",
+ "target_dt": "Sales Order Item",
+ "target_parent_dt": "Sales Order",
+ "target_parent_field": "per_delivered",
+ "target_field": "delivered_qty",
+ "target_ref_field": "qty",
+ "source_field": "qty",
+ "join_field": "so_detail",
+ "percent_join_field": "sales_order",
+ "status_field": "delivery_status",
+ "keyword": "Delivered",
+ "second_source_dt": "Delivery Note Item",
+ "second_source_field": "qty",
+ "second_join_field": "so_detail",
+ "overflow_type": "delivery",
+ "extra_cond": """ and exists(select name from `tabSales Invoice`
+ where name=`tabSales Invoice Item`.parent and update_stock = 1)""",
+ }
+ )
+
+ if not cint(self.is_return):
+ return
+
+ self.status_updater.append(
+ {
+ "source_dt": "Sales Invoice Item",
+ "target_dt": "Sales Order Item",
+ "join_field": "so_detail",
+ "target_field": "returned_qty",
+ "target_parent_dt": "Sales Order",
+ "source_field": "-1 * qty",
+ "second_source_dt": "Delivery Note Item",
+ "second_source_field": "-1 * qty",
+ "second_join_field": "so_detail",
+ "extra_cond": """ and exists (select name from `tabSales Invoice` where name=`tabSales Invoice Item`.parent and update_stock=1 and is_return=1)""",
+ }
+ )
def check_credit_limit(self):
from erpnext.selling.doctype.customer.customer import check_credit_limit
@@ -662,13 +662,8 @@
def unlink_sales_invoice_from_timesheets(self):
for row in self.timesheets:
timesheet = frappe.get_doc("Timesheet", row.time_sheet)
- for time_log in timesheet.time_logs:
- if time_log.sales_invoice == self.name:
- time_log.sales_invoice = None
- timesheet.calculate_total_amounts()
- timesheet.calculate_percentage_billed()
+ timesheet.unlink_sales_invoice(self.name)
timesheet.flags.ignore_validate_update_after_submit = True
- timesheet.set_status()
timesheet.db_update_all()
@frappe.whitelist()
@@ -1011,12 +1006,17 @@
frappe.throw(_("Warehouse required for stock Item {0}").format(d.item_code))
def validate_delivery_note(self):
- for d in self.get("items"):
- if d.delivery_note:
- msgprint(
- _("Stock cannot be updated against Delivery Note {0}").format(d.delivery_note),
- raise_exception=1,
- )
+ """If items are linked with a delivery note, stock cannot be updated again."""
+ if not cint(self.update_stock):
+ return
+
+ notes = [item.delivery_note for item in self.items if item.delivery_note]
+ if notes:
+ frappe.throw(
+ _("Stock cannot be updated against the following Delivery Notes: {0}").format(
+ comma_and(notes)
+ ),
+ )
def validate_write_off_account(self):
if flt(self.write_off_amount) and not self.write_off_account:
@@ -1030,29 +1030,23 @@
msgprint(_("Please enter Account for Change Amount"), raise_exception=1)
def validate_dropship_item(self):
- for item in self.items:
- if item.sales_order:
- if frappe.db.get_value("Sales Order Item", item.so_detail, "delivered_by_supplier"):
- frappe.throw(_("Could not update stock, invoice contains drop shipping item."))
+ """If items are drop shipped, stock cannot be updated."""
+ if not cint(self.update_stock):
+ return
+
+ if any(item.delivered_by_supplier for item in self.items):
+ frappe.throw(
+ _(
+ "Stock cannot be updated because the invoice contains a drop shipping item. Please disable 'Update Stock' or remove the drop shipping item."
+ ),
+ )
def update_current_stock(self):
- for d in self.get("items"):
- if d.item_code and d.warehouse:
- bin = frappe.db.sql(
- "select actual_qty from `tabBin` where item_code = %s and warehouse = %s",
- (d.item_code, d.warehouse),
- as_dict=1,
- )
- d.actual_qty = bin and flt(bin[0]["actual_qty"]) or 0
+ for item in self.items:
+ item.set_actual_qty()
- for d in self.get("packed_items"):
- bin = frappe.db.sql(
- "select actual_qty, projected_qty from `tabBin` where item_code = %s and warehouse = %s",
- (d.item_code, d.warehouse),
- as_dict=1,
- )
- d.actual_qty = bin and flt(bin[0]["actual_qty"]) or 0
- d.projected_qty = bin and flt(bin[0]["projected_qty"]) or 0
+ for packed_item in self.packed_items:
+ packed_item.set_actual_and_projected_qty()
def update_packing_list(self):
if cint(self.update_stock) == 1:
@@ -1127,17 +1121,8 @@
return warehouse
def set_income_account_for_fixed_assets(self):
- disposal_account = depreciation_cost_center = None
- for d in self.get("items"):
- if d.is_fixed_asset:
- if not disposal_account:
- disposal_account, depreciation_cost_center = get_disposal_account_and_cost_center(
- self.company
- )
-
- d.income_account = disposal_account
- if not d.cost_center:
- d.cost_center = depreciation_cost_center
+ for item in self.items:
+ item.set_income_account_for_fixed_asset(self.company)
def check_prev_docstatus(self):
for d in self.get("items"):
@@ -1510,47 +1495,46 @@
)
if not skip_change_gl_entries:
- self.make_gle_for_change_amount(gl_entries)
+ gl_entries.extend(self.get_gle_for_change_amount())
- def make_gle_for_change_amount(self, gl_entries):
- if self.change_amount:
- if self.account_for_change_amount:
- gl_entries.append(
- self.get_gl_dict(
- {
- "account": self.debit_to,
- "party_type": "Customer",
- "party": self.customer,
- "against": self.account_for_change_amount,
- "debit": flt(self.base_change_amount),
- "debit_in_account_currency": flt(self.base_change_amount)
- if self.party_account_currency == self.company_currency
- else flt(self.change_amount),
- "against_voucher": self.return_against
- if cint(self.is_return) and self.return_against
- else self.name,
- "against_voucher_type": self.doctype,
- "cost_center": self.cost_center,
- "project": self.project,
- },
- self.party_account_currency,
- item=self,
- )
- )
+ def get_gle_for_change_amount(self) -> list[dict]:
+ if not self.change_amount:
+ return []
- gl_entries.append(
- self.get_gl_dict(
- {
- "account": self.account_for_change_amount,
- "against": self.customer,
- "credit": self.base_change_amount,
- "cost_center": self.cost_center,
- },
- item=self,
- )
- )
- else:
- frappe.throw(_("Select change amount account"), title=_("Mandatory Field"))
+ if not self.account_for_change_amount:
+ frappe.throw(_("Please set Account for Change Amount"), title=_("Mandatory Field"))
+
+ return [
+ self.get_gl_dict(
+ {
+ "account": self.debit_to,
+ "party_type": "Customer",
+ "party": self.customer,
+ "against": self.account_for_change_amount,
+ "debit": flt(self.base_change_amount),
+ "debit_in_account_currency": flt(self.base_change_amount)
+ if self.party_account_currency == self.company_currency
+ else flt(self.change_amount),
+ "against_voucher": self.return_against
+ if cint(self.is_return) and self.return_against
+ else self.name,
+ "against_voucher_type": self.doctype,
+ "cost_center": self.cost_center,
+ "project": self.project,
+ },
+ self.party_account_currency,
+ item=self,
+ ),
+ self.get_gl_dict(
+ {
+ "account": self.account_for_change_amount,
+ "against": self.customer,
+ "credit": self.base_change_amount,
+ "cost_center": self.cost_center,
+ },
+ item=self,
+ ),
+ ]
def make_write_off_gl_entry(self, gl_entries):
# write off entries, applicable if only pos
@@ -1659,48 +1643,9 @@
"""
validate serial number agains Delivery Note and Sales Invoice
"""
- self.set_serial_no_against_delivery_note()
- self.validate_serial_against_delivery_note()
-
- def set_serial_no_against_delivery_note(self):
for item in self.items:
- if item.serial_no and item.delivery_note and item.qty != len(get_serial_nos(item.serial_no)):
- item.serial_no = get_delivery_note_serial_no(item.item_code, item.qty, item.delivery_note)
-
- def validate_serial_against_delivery_note(self):
- """
- validate if the serial numbers in Sales Invoice Items are same as in
- Delivery Note Item
- """
-
- for item in self.items:
- if not item.delivery_note or not item.dn_detail:
- continue
-
- serial_nos = frappe.db.get_value("Delivery Note Item", item.dn_detail, "serial_no") or ""
- dn_serial_nos = set(get_serial_nos(serial_nos))
-
- serial_nos = item.serial_no or ""
- si_serial_nos = set(get_serial_nos(serial_nos))
- serial_no_diff = si_serial_nos - dn_serial_nos
-
- if serial_no_diff:
- dn_link = frappe.utils.get_link_to_form("Delivery Note", item.delivery_note)
- serial_no_msg = ", ".join(frappe.bold(d) for d in serial_no_diff)
-
- msg = _("Row #{0}: The following Serial Nos are not present in Delivery Note {1}:").format(
- item.idx, dn_link
- )
- msg += " " + serial_no_msg
-
- frappe.throw(msg=msg, title=_("Serial Nos Mismatch"))
-
- if item.serial_no and cint(item.qty) != len(si_serial_nos):
- frappe.throw(
- _("Row #{0}: {1} Serial numbers required for Item {2}. You have provided {3}.").format(
- item.idx, item.qty, item.item_code, len(si_serial_nos)
- )
- )
+ item.set_serial_no_against_delivery_note()
+ item.validate_serial_against_delivery_note()
def update_project(self):
if self.project:
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
index 1605b15..f971f68 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
@@ -2,34 +2,42 @@
// License: GNU General Public License v3. See license.txt
// render
-frappe.listview_settings['Sales Invoice'] = {
- add_fields: ["customer", "customer_name", "base_grand_total", "outstanding_amount", "due_date", "company",
- "currency", "is_return"],
- get_indicator: function(doc) {
+frappe.listview_settings["Sales Invoice"] = {
+ add_fields: [
+ "customer",
+ "customer_name",
+ "base_grand_total",
+ "outstanding_amount",
+ "due_date",
+ "company",
+ "currency",
+ "is_return",
+ ],
+ get_indicator: function (doc) {
const status_colors = {
- "Draft": "grey",
- "Unpaid": "orange",
- "Paid": "green",
- "Return": "gray",
+ Draft: "grey",
+ Unpaid: "orange",
+ Paid: "green",
+ Return: "gray",
"Credit Note Issued": "gray",
"Unpaid and Discounted": "orange",
"Partly Paid and Discounted": "yellow",
"Overdue and Discounted": "red",
- "Overdue": "red",
+ Overdue: "red",
"Partly Paid": "yellow",
- "Internal Transfer": "darkgrey"
+ "Internal Transfer": "darkgrey",
};
- return [__(doc.status), status_colors[doc.status], "status,=,"+doc.status];
+ return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
},
right_column: "grand_total",
- onload: function(listview) {
- listview.page.add_action_item(__("Delivery Note"), ()=>{
+ onload: function (listview) {
+ listview.page.add_action_item(__("Delivery Note"), () => {
erpnext.bulk_transaction_processing.create(listview, "Sales Invoice", "Delivery Note");
});
- listview.page.add_action_item(__("Payment"), ()=>{
+ listview.page.add_action_item(__("Payment"), () => {
erpnext.bulk_transaction_processing.create(listview, "Sales Invoice", "Payment Entry");
});
- }
+ },
};
diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py
index 9be1b42..f92a7a8 100644
--- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py
+++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.py
@@ -2,7 +2,13 @@
# License: GNU General Public License v3. See license.txt
+import frappe
+from frappe import _
from frappe.model.document import Document
+from frappe.utils.data import cint
+
+from erpnext.assets.doctype.asset.depreciation import get_disposal_account_and_cost_center
+from erpnext.stock.doctype.serial_no.serial_no import get_delivery_note_serial_no, get_serial_nos
class SalesInvoiceItem(Document):
@@ -92,4 +98,67 @@
weight_uom: DF.Link | None
# end: auto-generated types
- pass
+ def validate_cost_center(self, company: str):
+ cost_center_company = frappe.get_cached_value("Cost Center", self.cost_center, "company")
+ if cost_center_company != company:
+ frappe.throw(
+ _("Row #{0}: Cost Center {1} does not belong to company {2}").format(
+ frappe.bold(self.idx), frappe.bold(self.cost_center), frappe.bold(company)
+ )
+ )
+
+ def set_actual_qty(self):
+ if self.item_code and self.warehouse:
+ self.actual_qty = (
+ frappe.db.get_value(
+ "Bin", {"item_code": self.item_code, "warehouse": self.warehouse}, "actual_qty"
+ )
+ or 0
+ )
+
+ def set_income_account_for_fixed_asset(self, company: str):
+ """Set income account for fixed asset item based on company's disposal account and cost center."""
+ if not self.is_fixed_asset:
+ return
+
+ disposal_account, depreciation_cost_center = get_disposal_account_and_cost_center(company)
+
+ self.income_account = disposal_account
+ if not self.cost_center:
+ self.cost_center = depreciation_cost_center
+
+ def set_serial_no_against_delivery_note(self):
+ """Set serial no based on delivery note."""
+ if self.serial_no and self.delivery_note and self.qty != len(get_serial_nos(self.serial_no)):
+ self.serial_no = get_delivery_note_serial_no(self.item_code, self.qty, self.delivery_note)
+
+ def validate_serial_against_delivery_note(self):
+ """Ensure the serial numbers in this Sales Invoice Item are same as in the linked Delivery Note."""
+ if not self.delivery_note or not self.dn_detail:
+ return
+
+ serial_nos = frappe.db.get_value("Delivery Note Item", self.dn_detail, "serial_no") or ""
+ dn_serial_nos = set(get_serial_nos(serial_nos))
+
+ serial_nos = self.serial_no or ""
+ si_serial_nos = set(get_serial_nos(serial_nos))
+ serial_no_diff = si_serial_nos - dn_serial_nos
+
+ if serial_no_diff:
+ dn_link = frappe.utils.get_link_to_form("Delivery Note", self.delivery_note)
+ msg = (
+ _("Row #{0}: The following serial numbers are not present in Delivery Note {1}:").format(
+ self.idx, dn_link
+ )
+ + " "
+ + ", ".join(frappe.bold(d) for d in serial_no_diff)
+ )
+
+ frappe.throw(msg=msg, title=_("Serial Nos Mismatch"))
+
+ if self.serial_no and cint(self.qty) != len(si_serial_nos):
+ frappe.throw(
+ _(
+ "Row #{0}: {1} serial numbers are required for Item {2}. You have provided {3} serial numbers."
+ ).format(self.idx, self.qty, self.item_code, len(si_serial_nos))
+ )
diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js
index 00e8b62..91d4d04 100644
--- a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js
+++ b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js
@@ -2,4 +2,4 @@
// License: GNU General Public License v3. See license.txt
erpnext.accounts.taxes.setup_tax_validations("Sales Taxes and Charges Template");
-erpnext.accounts.taxes.setup_tax_filters("Sales Taxes and Charges");
\ No newline at end of file
+erpnext.accounts.taxes.setup_tax_filters("Sales Taxes and Charges");
diff --git a/erpnext/accounts/doctype/share_transfer/share_transfer.js b/erpnext/accounts/doctype/share_transfer/share_transfer.js
index 6317c9c..dd9d962 100644
--- a/erpnext/accounts/doctype/share_transfer/share_transfer.js
+++ b/erpnext/accounts/doctype/share_transfer/share_transfer.js
@@ -3,21 +3,19 @@
frappe.provide("erpnext.share_transfer");
-frappe.ui.form.on('Share Transfer', {
- refresh: function(frm) {
+frappe.ui.form.on("Share Transfer", {
+ refresh: function (frm) {
// Don't show Parties which are a Company
- let shareholders = ['from_shareholder', 'to_shareholder'];
+ let shareholders = ["from_shareholder", "to_shareholder"];
shareholders.forEach((shareholder) => {
- frm.fields_dict[shareholder].get_query = function() {
+ frm.fields_dict[shareholder].get_query = function () {
return {
- filters: [
- ["Shareholder", "is_company", "=", 0]
- ]
+ filters: [["Shareholder", "is_company", "=", 0]],
};
};
});
if (frm.doc.docstatus == 1 && frm.doc.equity_or_liability_account && frm.doc.asset_account) {
- frm.add_custom_button(__('Create Journal Entry'), function () {
+ frm.add_custom_button(__("Create Journal Entry"), function () {
erpnext.share_transfer.make_jv(frm);
});
}
@@ -25,54 +23,59 @@
frm.toggle_reqd("asset_account", frm.doc.transfer_type != "Transfer");
},
no_of_shares: (frm) => {
- if (frm.doc.rate != undefined || frm.doc.rate != null){
+ if (frm.doc.rate != undefined || frm.doc.rate != null) {
erpnext.share_transfer.update_amount(frm);
}
},
rate: (frm) => {
- if (frm.doc.no_of_shares != undefined || frm.doc.no_of_shares != null){
+ if (frm.doc.no_of_shares != undefined || frm.doc.no_of_shares != null) {
erpnext.share_transfer.update_amount(frm);
}
},
- company: async function(frm) {
+ company: async function (frm) {
if (frm.doc.company) {
- let currency = (await frappe.db.get_value("Company", frm.doc.company, "default_currency")).message.default_currency;
- frm.set_query("equity_or_liability_account", function() {
+ let currency = (await frappe.db.get_value("Company", frm.doc.company, "default_currency")).message
+ .default_currency;
+ frm.set_query("equity_or_liability_account", function () {
return {
filters: {
- "is_group":0,
- "root_type": ["in",["Equity","Liability"]],
- "company": frm.doc.company,
- "account_currency": currency
- }
+ is_group: 0,
+ root_type: ["in", ["Equity", "Liability"]],
+ company: frm.doc.company,
+ account_currency: currency,
+ },
};
});
- frm.set_query("asset_account", function() {
+ frm.set_query("asset_account", function () {
return {
filters: {
- "is_group":0,
- "root_type":"Asset",
- "company": frm.doc.company,
- "account_currency": currency
- }
+ is_group: 0,
+ root_type: "Asset",
+ company: frm.doc.company,
+ account_currency: currency,
+ },
};
});
}
},
- transfer_type: function(frm) {
+ transfer_type: function (frm) {
frm.toggle_reqd("asset_account", frm.doc.transfer_type != "Transfer");
- }
+ },
});
-erpnext.share_transfer.update_amount = function(frm) {
+erpnext.share_transfer.update_amount = function (frm) {
frm.doc.amount = frm.doc.no_of_shares * frm.doc.rate;
frm.refresh_field("amount");
};
erpnext.share_transfer.make_jv = function (frm) {
- var account, payment_account, credit_applicant_type, credit_applicant,
- debit_applicant_type, debit_applicant;
+ var account,
+ payment_account,
+ credit_applicant_type,
+ credit_applicant,
+ debit_applicant_type,
+ debit_applicant;
if (frm.doc.transfer_type == "Transfer") {
account = frm.doc.equity_or_liability_account;
@@ -81,16 +84,14 @@
credit_applicant = frm.doc.to_shareholder;
debit_applicant_type = "Shareholder";
debit_applicant = frm.doc.from_shareholder;
- }
- else if (frm.doc.transfer_type == "Issue") {
+ } else if (frm.doc.transfer_type == "Issue") {
account = frm.doc.asset_account;
payment_account = frm.doc.equity_or_liability_account;
credit_applicant_type = "Shareholder";
credit_applicant = frm.doc.to_shareholder;
debit_applicant_type = "";
debit_applicant = "";
- }
- else {
+ } else {
account = frm.doc.equity_or_liability_account;
payment_account = frm.doc.asset_account;
credit_applicant_type = "";
@@ -100,19 +101,19 @@
}
frappe.call({
args: {
- "company": frm.doc.company,
- "account": account,
- "amount": frm.doc.amount,
- "payment_account": payment_account,
- "credit_applicant_type": credit_applicant_type,
- "credit_applicant": credit_applicant,
- "debit_applicant_type": debit_applicant_type,
- "debit_applicant": debit_applicant
+ company: frm.doc.company,
+ account: account,
+ amount: frm.doc.amount,
+ payment_account: payment_account,
+ credit_applicant_type: credit_applicant_type,
+ credit_applicant: credit_applicant,
+ debit_applicant_type: debit_applicant_type,
+ debit_applicant: debit_applicant,
},
method: "erpnext.accounts.doctype.share_transfer.share_transfer.make_jv_entry",
callback: function (r) {
var doc = frappe.model.sync(r.message)[0];
frappe.set_route("Form", doc.doctype, doc.name);
- }
+ },
});
};
diff --git a/erpnext/accounts/doctype/share_type/share_type.js b/erpnext/accounts/doctype/share_type/share_type.js
index 1ae85e3..5dfb760 100644
--- a/erpnext/accounts/doctype/share_type/share_type.js
+++ b/erpnext/accounts/doctype/share_type/share_type.js
@@ -1,8 +1,6 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Share Type', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Share Type", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/accounts/doctype/shareholder/shareholder.js b/erpnext/accounts/doctype/shareholder/shareholder.js
index 544d417..baf0920 100644
--- a/erpnext/accounts/doctype/shareholder/shareholder.js
+++ b/erpnext/accounts/doctype/shareholder/shareholder.js
@@ -1,37 +1,36 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Shareholder', {
- refresh: function(frm) {
- frm.toggle_display(['contact_html'], !frm.doc.__islocal);
+frappe.ui.form.on("Shareholder", {
+ refresh: function (frm) {
+ frm.toggle_display(["contact_html"], !frm.doc.__islocal);
if (frm.doc.__islocal) {
- hide_field(['contact_html']);
+ hide_field(["contact_html"]);
frappe.contacts.clear_address_and_contact(frm);
- }
- else {
- if (frm.doc.is_company){
- hide_field(['company']);
+ } else {
+ if (frm.doc.is_company) {
+ hide_field(["company"]);
} else {
- unhide_field(['contact_html']);
+ unhide_field(["contact_html"]);
frappe.contacts.render_address_and_contact(frm);
}
}
- if (frm.doc.folio_no != undefined){
- frm.add_custom_button(__("Share Balance"), function(){
+ if (frm.doc.folio_no != undefined) {
+ frm.add_custom_button(__("Share Balance"), function () {
frappe.route_options = {
- "shareholder": frm.doc.name,
+ shareholder: frm.doc.name,
};
frappe.set_route("query-report", "Share Balance");
});
- frm.add_custom_button(__("Share Ledger"), function(){
+ frm.add_custom_button(__("Share Ledger"), function () {
frappe.route_options = {
- "shareholder": frm.doc.name,
+ shareholder: frm.doc.name,
};
frappe.set_route("query-report", "Share Ledger");
});
- let fields = ['title', 'folio_no', 'company'];
+ let fields = ["title", "folio_no", "company"];
fields.forEach((fieldname) => {
frm.fields_dict[fieldname].df.read_only = 1;
frm.refresh_fields(fieldname);
@@ -42,11 +41,11 @@
},
validate: (frm) => {
let contact_list = {
- contacts: []
+ contacts: [],
};
- $('div[data-fieldname=contact_html] > .address-box').each( (index, ele) => {
- contact_list.contacts.push(ele.innerText.replace(' Edit', ''));
+ $("div[data-fieldname=contact_html] > .address-box").each((index, ele) => {
+ contact_list.contacts.push(ele.innerText.replace(" Edit", ""));
});
frm.doc.contact_list = JSON.stringify(contact_list);
- }
+ },
});
diff --git a/erpnext/accounts/doctype/shipping_rule/shipping_rule.js b/erpnext/accounts/doctype/shipping_rule/shipping_rule.js
index 8e4b806..1ece3e6 100644
--- a/erpnext/accounts/doctype/shipping_rule/shipping_rule.js
+++ b/erpnext/accounts/doctype/shipping_rule/shipping_rule.js
@@ -1,33 +1,33 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.provide('erpnext.accounts.dimensions');
+frappe.provide("erpnext.accounts.dimensions");
-frappe.ui.form.on('Shipping Rule', {
- onload: function(frm) {
+frappe.ui.form.on("Shipping Rule", {
+ onload: function (frm) {
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- company: function(frm) {
+ company: function (frm) {
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
- refresh: function(frm) {
- frm.set_query("account", function() {
+ refresh: function (frm) {
+ frm.set_query("account", function () {
return {
filters: {
- company: frm.doc.company
- }
- }
- })
+ company: frm.doc.company,
+ },
+ };
+ });
- frm.trigger('toggle_reqd');
+ frm.trigger("toggle_reqd");
},
- calculate_based_on: function(frm) {
- frm.trigger('toggle_reqd');
+ calculate_based_on: function (frm) {
+ frm.trigger("toggle_reqd");
},
- toggle_reqd: function(frm) {
- frm.toggle_reqd("shipping_amount", frm.doc.calculate_based_on === 'Fixed');
- frm.toggle_reqd("conditions", frm.doc.calculate_based_on !== 'Fixed');
- }
+ toggle_reqd: function (frm) {
+ frm.toggle_reqd("shipping_amount", frm.doc.calculate_based_on === "Fixed");
+ frm.toggle_reqd("conditions", frm.doc.calculate_based_on !== "Fixed");
+ },
});
diff --git a/erpnext/accounts/doctype/subscription/subscription.js b/erpnext/accounts/doctype/subscription/subscription.js
index 92f8a3a..b3e21ab 100644
--- a/erpnext/accounts/doctype/subscription/subscription.js
+++ b/erpnext/accounts/doctype/subscription/subscription.js
@@ -1,29 +1,29 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Subscription', {
+frappe.ui.form.on("Subscription", {
setup: function (frm) {
- frm.set_query('party_type', function () {
+ frm.set_query("party_type", function () {
return {
filters: {
- name: ['in', ['Customer', 'Supplier']]
- }
- }
- });
-
- frm.set_query('cost_center', function () {
- return {
- filters: {
- company: frm.doc.company
- }
+ name: ["in", ["Customer", "Supplier"]],
+ },
};
});
- frm.set_query('sales_tax_template', function () {
+ frm.set_query("cost_center", function () {
return {
filters: {
- company: frm.doc.company
- }
+ company: frm.doc.company,
+ },
+ };
+ });
+
+ frm.set_query("sales_tax_template", function () {
+ return {
+ filters: {
+ company: frm.doc.company,
+ },
};
});
},
@@ -31,32 +31,32 @@
refresh: function (frm) {
if (frm.is_new()) return;
- if (frm.doc.status !== 'Cancelled') {
+ if (frm.doc.status !== "Cancelled") {
frm.add_custom_button(
- __('Fetch Subscription Updates'),
- () => frm.trigger('get_subscription_updates'),
- __('Actions')
+ __("Fetch Subscription Updates"),
+ () => frm.trigger("get_subscription_updates"),
+ __("Actions")
);
frm.add_custom_button(
- __('Cancel Subscription'),
- () => frm.trigger('cancel_this_subscription'),
- __('Actions')
+ __("Cancel Subscription"),
+ () => frm.trigger("cancel_this_subscription"),
+ __("Actions")
);
- } else if (frm.doc.status === 'Cancelled') {
+ } else if (frm.doc.status === "Cancelled") {
frm.add_custom_button(
- __('Restart Subscription'),
- () => frm.trigger('renew_this_subscription'),
- __('Actions')
+ __("Restart Subscription"),
+ () => frm.trigger("renew_this_subscription"),
+ __("Actions")
);
}
},
cancel_this_subscription: function (frm) {
frappe.confirm(
- __('This action will stop future billing. Are you sure you want to cancel this subscription?'),
+ __("This action will stop future billing. Are you sure you want to cancel this subscription?"),
() => {
- frm.call('cancel_subscription').then(r => {
+ frm.call("cancel_subscription").then((r) => {
if (!r.exec) {
frm.reload_doc();
}
@@ -66,23 +66,20 @@
},
renew_this_subscription: function (frm) {
- frappe.confirm(
- __('Are you sure you want to restart this subscription?'),
- () => {
- frm.call('restart_subscription').then(r => {
- if (!r.exec) {
- frm.reload_doc();
- }
- });
- }
- );
+ frappe.confirm(__("Are you sure you want to restart this subscription?"), () => {
+ frm.call("restart_subscription").then((r) => {
+ if (!r.exec) {
+ frm.reload_doc();
+ }
+ });
+ });
},
get_subscription_updates: function (frm) {
- frm.call('process').then(r => {
+ frm.call("process").then((r) => {
if (!r.exec) {
frm.reload_doc();
}
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/subscription/subscription_list.js b/erpnext/accounts/doctype/subscription/subscription_list.js
index ea48b53..bc831d3 100644
--- a/erpnext/accounts/doctype/subscription/subscription_list.js
+++ b/erpnext/accounts/doctype/subscription/subscription_list.js
@@ -1,17 +1,17 @@
-frappe.listview_settings['Subscription'] = {
- get_indicator: function(doc) {
- if(doc.status === 'Trialing') {
+frappe.listview_settings["Subscription"] = {
+ get_indicator: function (doc) {
+ if (doc.status === "Trialing") {
return [__("Trialing"), "green"];
- } else if(doc.status === 'Active') {
+ } else if (doc.status === "Active") {
return [__("Active"), "green"];
- } else if(doc.status === 'Completed') {
- return [__("Completed"), "green"];
- } else if(doc.status === 'Past Due Date') {
+ } else if (doc.status === "Completed") {
+ return [__("Completed"), "green"];
+ } else if (doc.status === "Past Due Date") {
return [__("Past Due Date"), "orange"];
- } else if(doc.status === 'Unpaid') {
+ } else if (doc.status === "Unpaid") {
return [__("Unpaid"), "red"];
- } else if(doc.status === 'Cancelled') {
+ } else if (doc.status === "Cancelled") {
return [__("Cancelled"), "gray"];
}
- }
+ },
};
diff --git a/erpnext/accounts/doctype/subscription_plan/subscription_plan.js b/erpnext/accounts/doctype/subscription_plan/subscription_plan.js
index 00727f1..125dc7d 100644
--- a/erpnext/accounts/doctype/subscription_plan/subscription_plan.js
+++ b/erpnext/accounts/doctype/subscription_plan/subscription_plan.js
@@ -1,10 +1,10 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Subscription Plan', {
- price_determination: function(frm) {
- frm.toggle_reqd("cost", frm.doc.price_determination === 'Fixed rate');
- frm.toggle_reqd("price_list", frm.doc.price_determination === 'Based on price list');
+frappe.ui.form.on("Subscription Plan", {
+ price_determination: function (frm) {
+ frm.toggle_reqd("cost", frm.doc.price_determination === "Fixed rate");
+ frm.toggle_reqd("price_list", frm.doc.price_determination === "Based on price list");
},
subscription_plan: function (frm) {
diff --git a/erpnext/accounts/doctype/tax_category/tax_category.js b/erpnext/accounts/doctype/tax_category/tax_category.js
index 4b63edb..fe60e03 100644
--- a/erpnext/accounts/doctype/tax_category/tax_category.js
+++ b/erpnext/accounts/doctype/tax_category/tax_category.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Tax Category', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Tax Category", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.js b/erpnext/accounts/doctype/tax_rule/tax_rule.js
index bc49716..b8c68e8 100644
--- a/erpnext/accounts/doctype/tax_rule/tax_rule.js
+++ b/erpnext/accounts/doctype/tax_rule/tax_rule.js
@@ -1,40 +1,40 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.ui.form.on("Tax Rule", "customer", function(frm) {
- if(frm.doc.customer) {
+frappe.ui.form.on("Tax Rule", "customer", function (frm) {
+ if (frm.doc.customer) {
frappe.call({
- method:"erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
+ method: "erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
args: {
- "party": frm.doc.customer,
- "party_type": "customer"
+ party: frm.doc.customer,
+ party_type: "customer",
},
- callback: function(r) {
- if(!r.exc) {
- $.each(r.message, function(k, v) {
+ callback: function (r) {
+ if (!r.exc) {
+ $.each(r.message, function (k, v) {
frm.set_value(k, v);
});
}
- }
+ },
});
}
});
-frappe.ui.form.on("Tax Rule", "supplier", function(frm) {
- if(frm.doc.supplier) {
+frappe.ui.form.on("Tax Rule", "supplier", function (frm) {
+ if (frm.doc.supplier) {
frappe.call({
- method:"erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
+ method: "erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
args: {
- "party": frm.doc.supplier,
- "party_type": "supplier"
+ party: frm.doc.supplier,
+ party_type: "supplier",
},
- callback: function(r) {
- if(!r.exc) {
- $.each(r.message, function(k, v) {
+ callback: function (r) {
+ if (!r.exc) {
+ $.each(r.message, function (k, v) {
frm.set_value(k, v);
});
}
- }
+ },
});
}
});
diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.json b/erpnext/accounts/doctype/tax_rule/tax_rule.json
index 2746748..5a6911c 100644
--- a/erpnext/accounts/doctype/tax_rule/tax_rule.json
+++ b/erpnext/accounts/doctype/tax_rule/tax_rule.json
@@ -1,6 +1,7 @@
{
"actions": [],
"allow_import": 1,
+ "allow_rename": 1,
"autoname": "ACC-TAX-RULE-.YYYY.-.#####",
"creation": "2015-08-07 02:33:52.670866",
"doctype": "DocType",
@@ -225,7 +226,7 @@
}
],
"links": [],
- "modified": "2021-06-04 23:14:27.186879",
+ "modified": "2024-03-09 08:08:27.186879",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Tax Rule",
@@ -247,4 +248,4 @@
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_order": "DESC"
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js
index 7b47974..4f4f32c 100644
--- a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js
+++ b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js
@@ -1,18 +1,18 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Tax Withholding Category', {
- setup: function(frm) {
- frm.set_query("account", "accounts", function(doc, cdt, cdn) {
+frappe.ui.form.on("Tax Withholding Category", {
+ setup: function (frm) {
+ frm.set_query("account", "accounts", function (doc, cdt, cdn) {
var child = locals[cdt][cdn];
if (child.company) {
return {
filters: {
- 'company': child.company,
- 'root_type': ['in', ['Asset', 'Liability']]
- }
+ company: child.company,
+ root_type: ["in", ["Asset", "Liability"]],
+ },
};
}
});
- }
+ },
});
diff --git a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
index c39a9db..405f587 100644
--- a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
+++ b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
@@ -546,6 +546,7 @@
"GL Entry",
{
"is_cancelled": 0,
+ "party_type": "Customer",
"party": ["in", parties],
"company": inv.company,
"voucher_no": ["in", vouchers],
@@ -560,6 +561,7 @@
conditions = []
conditions.append(ple.amount.lt(0))
conditions.append(ple.delinked == 0)
+ conditions.append(ple.party_type == "Customer")
conditions.append(ple.party.isin(parties))
conditions.append(ple.voucher_no == ple.against_voucher_no)
conditions.append(ple.company == inv.company)
@@ -579,6 +581,7 @@
{
"is_cancelled": 0,
"credit": [">", 0],
+ "party_type": "Customer",
"party": ["in", parties],
"posting_date": ["between", (tax_details.from_date, tax_details.to_date)],
"company": inv.company,
diff --git a/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js b/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js
index 70cefb1..63ae30d 100644
--- a/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js
+++ b/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js
@@ -3,39 +3,36 @@
frappe.ui.form.on("Unreconcile Payment", {
refresh(frm) {
- frm.set_query("voucher_type", function() {
+ frm.set_query("voucher_type", function () {
return {
filters: {
- name: ["in", ["Payment Entry", "Journal Entry"]]
- }
- }
+ name: ["in", ["Payment Entry", "Journal Entry"]],
+ },
+ };
});
-
- frm.set_query("voucher_no", function(doc) {
+ frm.set_query("voucher_no", function (doc) {
return {
filters: {
company: doc.company,
- docstatus: 1
- }
- }
+ docstatus: 1,
+ },
+ };
});
-
},
- get_allocations: function(frm) {
+ get_allocations: function (frm) {
frm.clear_table("allocations");
frappe.call({
method: "get_allocations_from_payment",
doc: frm.doc,
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
- r.message.forEach(x => {
- frm.add_child("allocations", x)
- })
+ r.message.forEach((x) => {
+ frm.add_child("allocations", x);
+ });
frm.refresh_fields();
}
- }
- })
-
- }
+ },
+ });
+ },
});
diff --git a/erpnext/accounts/report/account_balance/account_balance.js b/erpnext/accounts/report/account_balance/account_balance.js
index ab5dce8..f425b25 100644
--- a/erpnext/accounts/report/account_balance/account_balance.js
+++ b/erpnext/accounts/report/account_balance/account_balance.js
@@ -1,33 +1,32 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Account Balance"] = {
- "filters": [
+ filters: [
{
- fieldname:"company",
+ fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
- default: frappe.defaults.get_user_default("Company")
+ default: frappe.defaults.get_user_default("Company"),
},
{
- fieldname:"report_date",
+ fieldname: "report_date",
label: __("Date"),
fieldtype: "Date",
default: frappe.datetime.get_today(),
- reqd: 1
+ reqd: 1,
},
{
fieldname: "root_type",
label: __("Root Type"),
fieldtype: "Select",
options: [
- { "value": "Asset", "label": __("Asset") },
- { "value": "Liability", "label": __("Liability") },
- { "value": "Income", "label": __("Income") },
- { "value": "Expense", "label": __("Expense") },
- { "value": "Equity", "label": __("Equity") }
+ { value: "Asset", label: __("Asset") },
+ { value: "Liability", label: __("Liability") },
+ { value: "Income", label: __("Income") },
+ { value: "Expense", label: __("Expense") },
+ { value: "Equity", label: __("Equity") },
],
},
{
@@ -35,30 +34,32 @@
label: __("Account Type"),
fieldtype: "Select",
options: [
- { "value": "Accumulated Depreciation", "label": __("Accumulated Depreciation") },
- { "value": "Asset Received But Not Billed", "label": __("Asset Received But Not Billed") },
- { "value": "Bank", "label": __("Bank") },
- { "value": "Cash", "label": __("Cash") },
- { "value": "Chargeable", "label": __("Chargeable") },
- { "value": "Capital Work in Progress", "label": __("Capital Work in Progress") },
- { "value": "Cost of Goods Sold", "label": __("Cost of Goods Sold") },
- { "value": "Depreciation", "label": __("Depreciation") },
- { "value": "Equity", "label": __("Equity") },
- { "value": "Expense Account", "label": __("Expense Account") },
- { "value": "Expenses Included In Asset Valuation", "label": __("Expenses Included In Asset Valuation") },
- { "value": "Expenses Included In Valuation", "label": __("Expenses Included In Valuation") },
- { "value": "Fixed Asset", "label": __("Fixed Asset") },
- { "value": "Income Account", "label": __("Income Account") },
- { "value": "Payable", "label": __("Payable") },
- { "value": "Receivable", "label": __("Receivable") },
- { "value": "Round Off", "label": __("Round Off") },
- { "value": "Stock", "label": __("Stock") },
- { "value": "Stock Adjustment", "label": __("Stock Adjustment") },
- { "value": "Stock Received But Not Billed", "label": __("Stock Received But Not Billed") },
- { "value": "Tax", "label": __("Tax") },
- { "value": "Temporary", "label": __("Temporary") },
+ { value: "Accumulated Depreciation", label: __("Accumulated Depreciation") },
+ { value: "Asset Received But Not Billed", label: __("Asset Received But Not Billed") },
+ { value: "Bank", label: __("Bank") },
+ { value: "Cash", label: __("Cash") },
+ { value: "Chargeable", label: __("Chargeable") },
+ { value: "Capital Work in Progress", label: __("Capital Work in Progress") },
+ { value: "Cost of Goods Sold", label: __("Cost of Goods Sold") },
+ { value: "Depreciation", label: __("Depreciation") },
+ { value: "Equity", label: __("Equity") },
+ { value: "Expense Account", label: __("Expense Account") },
+ {
+ value: "Expenses Included In Asset Valuation",
+ label: __("Expenses Included In Asset Valuation"),
+ },
+ { value: "Expenses Included In Valuation", label: __("Expenses Included In Valuation") },
+ { value: "Fixed Asset", label: __("Fixed Asset") },
+ { value: "Income Account", label: __("Income Account") },
+ { value: "Payable", label: __("Payable") },
+ { value: "Receivable", label: __("Receivable") },
+ { value: "Round Off", label: __("Round Off") },
+ { value: "Stock", label: __("Stock") },
+ { value: "Stock Adjustment", label: __("Stock Adjustment") },
+ { value: "Stock Received But Not Billed", label: __("Stock Received But Not Billed") },
+ { value: "Tax", label: __("Tax") },
+ { value: "Temporary", label: __("Temporary") },
],
},
-
- ]
-}
+ ],
+};
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js
index b608ebc..f540224 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.js
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js
@@ -2,193 +2,194 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Accounts Payable"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "reqd": 1,
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ reqd: 1,
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname": "report_date",
- "label": __("Posting Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today()
+ fieldname: "report_date",
+ label: __("Posting Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
},
{
- "fieldname": "finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname": "cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center",
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
get_query: () => {
- var company = frappe.query_report.get_filter_value('company');
+ var company = frappe.query_report.get_filter_value("company");
return {
filters: {
- 'company': company
- }
- }
- }
- },
- {
- "fieldname": "party_account",
- "label": __("Payable Account"),
- "fieldtype": "Link",
- "options": "Account",
- get_query: () => {
- var company = frappe.query_report.get_filter_value('company');
- return {
- filters: {
- 'company': company,
- 'account_type': 'Payable',
- 'is_group': 0
- }
+ company: company,
+ },
};
- }
+ },
},
{
- "fieldname": "ageing_based_on",
- "label": __("Ageing Based On"),
- "fieldtype": "Select",
- "options": 'Posting Date\nDue Date\nSupplier Invoice Date',
- "default": "Due Date"
+ fieldname: "party_account",
+ label: __("Payable Account"),
+ fieldtype: "Link",
+ options: "Account",
+ get_query: () => {
+ var company = frappe.query_report.get_filter_value("company");
+ return {
+ filters: {
+ company: company,
+ account_type: "Payable",
+ is_group: 0,
+ },
+ };
+ },
},
{
- "fieldname": "range1",
- "label": __("Ageing Range 1"),
- "fieldtype": "Int",
- "default": "30",
- "reqd": 1
+ fieldname: "ageing_based_on",
+ label: __("Ageing Based On"),
+ fieldtype: "Select",
+ options: "Posting Date\nDue Date\nSupplier Invoice Date",
+ default: "Due Date",
},
{
- "fieldname": "range2",
- "label": __("Ageing Range 2"),
- "fieldtype": "Int",
- "default": "60",
- "reqd": 1
+ fieldname: "range1",
+ label: __("Ageing Range 1"),
+ fieldtype: "Int",
+ default: "30",
+ reqd: 1,
},
{
- "fieldname": "range3",
- "label": __("Ageing Range 3"),
- "fieldtype": "Int",
- "default": "90",
- "reqd": 1
+ fieldname: "range2",
+ label: __("Ageing Range 2"),
+ fieldtype: "Int",
+ default: "60",
+ reqd: 1,
},
{
- "fieldname": "range4",
- "label": __("Ageing Range 4"),
- "fieldtype": "Int",
- "default": "120",
- "reqd": 1
+ fieldname: "range3",
+ label: __("Ageing Range 3"),
+ fieldtype: "Int",
+ default: "90",
+ reqd: 1,
},
{
- "fieldname": "payment_terms_template",
- "label": __("Payment Terms Template"),
- "fieldtype": "Link",
- "options": "Payment Terms Template"
+ fieldname: "range4",
+ label: __("Ageing Range 4"),
+ fieldtype: "Int",
+ default: "120",
+ reqd: 1,
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Autocomplete",
+ fieldname: "payment_terms_template",
+ label: __("Payment Terms Template"),
+ fieldtype: "Link",
+ options: "Payment Terms Template",
+ },
+ {
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Autocomplete",
options: get_party_type_options(),
- on_change: function() {
- frappe.query_report.set_filter_value('party', "");
- frappe.query_report.toggle_filter_display('supplier_group', frappe.query_report.get_filter_value('party_type') !== "Supplier");
- }
+ on_change: function () {
+ frappe.query_report.set_filter_value("party", "");
+ frappe.query_report.toggle_filter_display(
+ "supplier_group",
+ frappe.query_report.get_filter_value("party_type") !== "Supplier"
+ );
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
if (!frappe.query_report.filters) return;
- let party_type = frappe.query_report.get_filter_value('party_type');
+ let party_type = frappe.query_report.get_filter_value("party_type");
if (!party_type) return;
return frappe.db.get_link_options(party_type, txt);
},
},
{
- "fieldname": "supplier_group",
- "label": __("Supplier Group"),
- "fieldtype": "Link",
- "options": "Supplier Group",
- "hidden": 1
+ fieldname: "supplier_group",
+ label: __("Supplier Group"),
+ fieldtype: "Link",
+ options: "Supplier Group",
+ hidden: 1,
},
{
- "fieldname": "group_by_party",
- "label": __("Group By Supplier"),
- "fieldtype": "Check"
+ fieldname: "group_by_party",
+ label: __("Group By Supplier"),
+ fieldtype: "Check",
},
{
- "fieldname": "based_on_payment_terms",
- "label": __("Based On Payment Terms"),
- "fieldtype": "Check",
+ fieldname: "based_on_payment_terms",
+ label: __("Based On Payment Terms"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_remarks",
- "label": __("Show Remarks"),
- "fieldtype": "Check",
+ fieldname: "show_remarks",
+ label: __("Show Remarks"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_future_payments",
- "label": __("Show Future Payments"),
- "fieldtype": "Check",
+ fieldname: "show_future_payments",
+ label: __("Show Future Payments"),
+ fieldtype: "Check",
},
{
- "fieldname": "in_party_currency",
- "label": __("In Party Currency"),
- "fieldtype": "Check",
+ fieldname: "in_party_currency",
+ label: __("In Party Currency"),
+ fieldtype: "Check",
},
{
- "fieldname": "for_revaluation_journals",
- "label": __("Revaluation Journals"),
- "fieldtype": "Check",
+ fieldname: "for_revaluation_journals",
+ label: __("Revaluation Journals"),
+ fieldtype: "Check",
},
{
- "fieldname": "ignore_accounts",
- "label": __("Group by Voucher"),
- "fieldtype": "Check",
- }
-
+ fieldname: "ignore_accounts",
+ label: __("Group by Voucher"),
+ fieldtype: "Check",
+ },
],
- "formatter": function(value, row, column, data, default_formatter) {
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
if (data && data.bold) {
value = value.bold();
-
}
return value;
},
- onload: function(report) {
- report.page.add_inner_button(__("Accounts Payable Summary"), function() {
+ onload: function (report) {
+ report.page.add_inner_button(__("Accounts Payable Summary"), function () {
var filters = report.get_values();
- frappe.set_route('query-report', 'Accounts Payable Summary', {company: filters.company});
+ frappe.set_route("query-report", "Accounts Payable Summary", { company: filters.company });
});
- }
-}
+ },
+};
-erpnext.utils.add_dimensions('Accounts Payable', 9);
+erpnext.utils.add_dimensions("Accounts Payable", 9);
function get_party_type_options() {
let options = [];
- frappe.db.get_list(
- "Party Type", {filters:{"account_type": "Payable"}, fields:['name']}
- ).then((res) => {
- res.forEach((party_type) => {
- options.push(party_type.name);
+ frappe.db
+ .get_list("Party Type", { filters: { account_type: "Payable" }, fields: ["name"] })
+ .then((res) => {
+ res.forEach((party_type) => {
+ options.push(party_type.name);
+ });
});
- });
return options;
}
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 0f206b1..92ea9e8 100644
--- a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
+++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
@@ -2,140 +2,143 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Accounts Payable Summary"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"report_date",
- "label": __("Posting Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today()
+ fieldname: "report_date",
+ label: __("Posting Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"ageing_based_on",
- "label": __("Ageing Based On"),
- "fieldtype": "Select",
- "options": 'Posting Date\nDue Date',
- "default": "Due Date"
+ fieldname: "ageing_based_on",
+ label: __("Ageing Based On"),
+ fieldtype: "Select",
+ options: "Posting Date\nDue Date",
+ default: "Due Date",
},
{
- "fieldname":"range1",
- "label": __("Ageing Range 1"),
- "fieldtype": "Int",
- "default": "30",
- "reqd": 1
+ fieldname: "range1",
+ label: __("Ageing Range 1"),
+ fieldtype: "Int",
+ default: "30",
+ reqd: 1,
},
{
- "fieldname":"range2",
- "label": __("Ageing Range 2"),
- "fieldtype": "Int",
- "default": "60",
- "reqd": 1
+ fieldname: "range2",
+ label: __("Ageing Range 2"),
+ fieldtype: "Int",
+ default: "60",
+ reqd: 1,
},
{
- "fieldname":"range3",
- "label": __("Ageing Range 3"),
- "fieldtype": "Int",
- "default": "90",
- "reqd": 1
+ fieldname: "range3",
+ label: __("Ageing Range 3"),
+ fieldtype: "Int",
+ default: "90",
+ reqd: 1,
},
{
- "fieldname":"range4",
- "label": __("Ageing Range 4"),
- "fieldtype": "Int",
- "default": "120",
- "reqd": 1
+ fieldname: "range4",
+ label: __("Ageing Range 4"),
+ fieldtype: "Int",
+ default: "120",
+ reqd: 1,
},
{
- "fieldname":"finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname":"cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center",
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
get_query: () => {
- var company = frappe.query_report.get_filter_value('company');
+ var company = frappe.query_report.get_filter_value("company");
return {
filters: {
- 'company': company
- }
- }
- }
+ company: company,
+ },
+ };
+ },
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Autocomplete",
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Autocomplete",
options: get_party_type_options(),
- on_change: function() {
- frappe.query_report.set_filter_value('party', "");
- frappe.query_report.toggle_filter_display('supplier_group', frappe.query_report.get_filter_value('party_type') !== "Supplier");
- }
+ on_change: function () {
+ frappe.query_report.set_filter_value("party", "");
+ frappe.query_report.toggle_filter_display(
+ "supplier_group",
+ frappe.query_report.get_filter_value("party_type") !== "Supplier"
+ );
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
if (!frappe.query_report.filters) return;
- let party_type = frappe.query_report.get_filter_value('party_type');
+ let party_type = frappe.query_report.get_filter_value("party_type");
if (!party_type) return;
return frappe.db.get_link_options(party_type, txt);
},
},
{
- "fieldname":"payment_terms_template",
- "label": __("Payment Terms Template"),
- "fieldtype": "Link",
- "options": "Payment Terms Template"
+ fieldname: "payment_terms_template",
+ label: __("Payment Terms Template"),
+ fieldtype: "Link",
+ options: "Payment Terms Template",
},
{
- "fieldname":"supplier_group",
- "label": __("Supplier Group"),
- "fieldtype": "Link",
- "options": "Supplier Group"
+ fieldname: "supplier_group",
+ label: __("Supplier Group"),
+ fieldtype: "Link",
+ options: "Supplier Group",
},
{
- "fieldname":"based_on_payment_terms",
- "label": __("Based On Payment Terms"),
- "fieldtype": "Check",
+ fieldname: "based_on_payment_terms",
+ label: __("Based On Payment Terms"),
+ fieldtype: "Check",
},
{
- "fieldname": "for_revaluation_journals",
- "label": __("Revaluation Journals"),
- "fieldtype": "Check",
- }
+ fieldname: "for_revaluation_journals",
+ label: __("Revaluation Journals"),
+ fieldtype: "Check",
+ },
],
- onload: function(report) {
- report.page.add_inner_button(__("Accounts Payable"), function() {
+ onload: function (report) {
+ report.page.add_inner_button(__("Accounts Payable"), function () {
var filters = report.get_values();
- frappe.set_route('query-report', 'Accounts Payable', {company: filters.company});
+ frappe.set_route("query-report", "Accounts Payable", { company: filters.company });
});
- }
-}
+ },
+};
-erpnext.utils.add_dimensions('Accounts Payable Summary', 9);
+erpnext.utils.add_dimensions("Accounts Payable Summary", 9);
function get_party_type_options() {
let options = [];
- frappe.db.get_list(
- "Party Type", {filters:{"account_type": "Payable"}, fields:['name']}
- ).then((res) => {
- res.forEach((party_type) => {
- options.push(party_type.name);
+ frappe.db
+ .get_list("Party Type", { filters: { account_type: "Payable" }, fields: ["name"] })
+ .then((res) => {
+ res.forEach((party_type) => {
+ options.push(party_type.name);
+ });
});
- });
return options;
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
index b4bc887..0daf79e 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
@@ -4,225 +4,224 @@
frappe.provide("erpnext.utils");
frappe.query_reports["Accounts Receivable"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "reqd": 1,
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ reqd: 1,
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname": "report_date",
- "label": __("Posting Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today()
+ fieldname: "report_date",
+ label: __("Posting Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
},
{
- "fieldname": "finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname": "cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center",
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
get_query: () => {
- var company = frappe.query_report.get_filter_value('company');
+ var company = frappe.query_report.get_filter_value("company");
return {
filters: {
- 'company': company
- }
+ company: company,
+ },
};
- }
+ },
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Autocomplete",
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Autocomplete",
options: get_party_type_options(),
- on_change: function() {
- frappe.query_report.set_filter_value('party', "");
- frappe.query_report.toggle_filter_display('customer_group', frappe.query_report.get_filter_value('party_type') !== "Customer");
- }
+ on_change: function () {
+ frappe.query_report.set_filter_value("party", "");
+ frappe.query_report.toggle_filter_display(
+ "customer_group",
+ frappe.query_report.get_filter_value("party_type") !== "Customer"
+ );
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
if (!frappe.query_report.filters) return;
- let party_type = frappe.query_report.get_filter_value('party_type');
+ let party_type = frappe.query_report.get_filter_value("party_type");
if (!party_type) return;
return frappe.db.get_link_options(party_type, txt);
},
},
{
- "fieldname": "party_account",
- "label": __("Receivable Account"),
- "fieldtype": "Link",
- "options": "Account",
+ fieldname: "party_account",
+ label: __("Receivable Account"),
+ fieldtype: "Link",
+ options: "Account",
get_query: () => {
- var company = frappe.query_report.get_filter_value('company');
+ var company = frappe.query_report.get_filter_value("company");
return {
filters: {
- 'company': company,
- 'account_type': 'Receivable',
- 'is_group': 0
- }
+ company: company,
+ account_type: "Receivable",
+ is_group: 0,
+ },
};
- }
+ },
},
{
- "fieldname": "ageing_based_on",
- "label": __("Ageing Based On"),
- "fieldtype": "Select",
- "options": 'Posting Date\nDue Date',
- "default": "Due Date"
+ fieldname: "ageing_based_on",
+ label: __("Ageing Based On"),
+ fieldtype: "Select",
+ options: "Posting Date\nDue Date",
+ default: "Due Date",
},
{
- "fieldname": "range1",
- "label": __("Ageing Range 1"),
- "fieldtype": "Int",
- "default": "30",
- "reqd": 1
+ fieldname: "range1",
+ label: __("Ageing Range 1"),
+ fieldtype: "Int",
+ default: "30",
+ reqd: 1,
},
{
- "fieldname": "range2",
- "label": __("Ageing Range 2"),
- "fieldtype": "Int",
- "default": "60",
- "reqd": 1
+ fieldname: "range2",
+ label: __("Ageing Range 2"),
+ fieldtype: "Int",
+ default: "60",
+ reqd: 1,
},
{
- "fieldname": "range3",
- "label": __("Ageing Range 3"),
- "fieldtype": "Int",
- "default": "90",
- "reqd": 1
+ fieldname: "range3",
+ label: __("Ageing Range 3"),
+ fieldtype: "Int",
+ default: "90",
+ reqd: 1,
},
{
- "fieldname": "range4",
- "label": __("Ageing Range 4"),
- "fieldtype": "Int",
- "default": "120",
- "reqd": 1
+ fieldname: "range4",
+ label: __("Ageing Range 4"),
+ fieldtype: "Int",
+ default: "120",
+ reqd: 1,
},
{
- "fieldname":"customer_group",
- "label": __("Customer Group"),
- "fieldtype": "MultiSelectList",
- "options": "Customer Group",
- get_data: function(txt) {
- return frappe.db.get_link_options('Customer Group', txt);
- }
+ fieldname: "customer_group",
+ label: __("Customer Group"),
+ fieldtype: "MultiSelectList",
+ options: "Customer Group",
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Customer Group", txt);
+ },
},
{
- "fieldname": "payment_terms_template",
- "label": __("Payment Terms Template"),
- "fieldtype": "Link",
- "options": "Payment Terms Template"
+ fieldname: "payment_terms_template",
+ label: __("Payment Terms Template"),
+ fieldtype: "Link",
+ options: "Payment Terms Template",
},
{
- "fieldname": "sales_partner",
- "label": __("Sales Partner"),
- "fieldtype": "Link",
- "options": "Sales Partner"
+ fieldname: "sales_partner",
+ label: __("Sales Partner"),
+ fieldtype: "Link",
+ options: "Sales Partner",
},
{
- "fieldname": "sales_person",
- "label": __("Sales Person"),
- "fieldtype": "Link",
- "options": "Sales Person"
+ fieldname: "sales_person",
+ label: __("Sales Person"),
+ fieldtype: "Link",
+ options: "Sales Person",
},
{
- "fieldname": "territory",
- "label": __("Territory"),
- "fieldtype": "Link",
- "options": "Territory"
+ fieldname: "territory",
+ label: __("Territory"),
+ fieldtype: "Link",
+ options: "Territory",
},
{
- "fieldname": "group_by_party",
- "label": __("Group By Customer"),
- "fieldtype": "Check"
+ fieldname: "group_by_party",
+ label: __("Group By Customer"),
+ fieldtype: "Check",
},
{
- "fieldname": "based_on_payment_terms",
- "label": __("Based On Payment Terms"),
- "fieldtype": "Check",
+ fieldname: "based_on_payment_terms",
+ label: __("Based On Payment Terms"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_future_payments",
- "label": __("Show Future Payments"),
- "fieldtype": "Check",
+ fieldname: "show_future_payments",
+ label: __("Show Future Payments"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_delivery_notes",
- "label": __("Show Linked Delivery Notes"),
- "fieldtype": "Check",
+ fieldname: "show_delivery_notes",
+ label: __("Show Linked Delivery Notes"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_sales_person",
- "label": __("Show Sales Person"),
- "fieldtype": "Check",
+ fieldname: "show_sales_person",
+ label: __("Show Sales Person"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_remarks",
- "label": __("Show Remarks"),
- "fieldtype": "Check",
+ fieldname: "show_remarks",
+ label: __("Show Remarks"),
+ fieldtype: "Check",
},
{
- "fieldname": "in_party_currency",
- "label": __("In Party Currency"),
- "fieldtype": "Check",
+ fieldname: "in_party_currency",
+ label: __("In Party Currency"),
+ fieldtype: "Check",
},
{
- "fieldname": "for_revaluation_journals",
- "label": __("Revaluation Journals"),
- "fieldtype": "Check",
+ fieldname: "for_revaluation_journals",
+ label: __("Revaluation Journals"),
+ fieldtype: "Check",
},
{
- "fieldname": "ignore_accounts",
- "label": __("Group by Voucher"),
- "fieldtype": "Check",
- }
-
-
+ fieldname: "ignore_accounts",
+ label: __("Group by Voucher"),
+ fieldtype: "Check",
+ },
],
- "formatter": function(value, row, column, data, default_formatter) {
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
if (data && data.bold) {
value = value.bold();
-
}
return value;
},
- onload: function(report) {
- report.page.add_inner_button(__("Accounts Receivable Summary"), function() {
+ onload: function (report) {
+ report.page.add_inner_button(__("Accounts Receivable Summary"), function () {
var filters = report.get_values();
- frappe.set_route('query-report', 'Accounts Receivable Summary', {company: filters.company});
+ frappe.set_route("query-report", "Accounts Receivable Summary", { company: filters.company });
});
- }
-}
+ },
+};
-erpnext.utils.add_dimensions('Accounts Receivable', 9);
-
+erpnext.utils.add_dimensions("Accounts Receivable", 9);
function get_party_type_options() {
let options = [];
- frappe.db.get_list(
- "Party Type", {filters:{"account_type": "Receivable"}, fields:['name']}
- ).then((res) => {
- res.forEach((party_type) => {
- options.push(party_type.name);
+ frappe.db
+ .get_list("Party Type", { filters: { account_type: "Receivable" }, fields: ["name"] })
+ .then((res) => {
+ res.forEach((party_type) => {
+ options.push(party_type.name);
+ });
});
- });
return options;
}
diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
index 2f6d258..964abc2 100644
--- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
+++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
@@ -2,168 +2,171 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Accounts Receivable Summary"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"report_date",
- "label": __("Posting Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today()
+ fieldname: "report_date",
+ label: __("Posting Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"ageing_based_on",
- "label": __("Ageing Based On"),
- "fieldtype": "Select",
- "options": 'Posting Date\nDue Date',
- "default": "Due Date"
+ fieldname: "ageing_based_on",
+ label: __("Ageing Based On"),
+ fieldtype: "Select",
+ options: "Posting Date\nDue Date",
+ default: "Due Date",
},
{
- "fieldname":"range1",
- "label": __("Ageing Range 1"),
- "fieldtype": "Int",
- "default": "30",
- "reqd": 1
+ fieldname: "range1",
+ label: __("Ageing Range 1"),
+ fieldtype: "Int",
+ default: "30",
+ reqd: 1,
},
{
- "fieldname":"range2",
- "label": __("Ageing Range 2"),
- "fieldtype": "Int",
- "default": "60",
- "reqd": 1
+ fieldname: "range2",
+ label: __("Ageing Range 2"),
+ fieldtype: "Int",
+ default: "60",
+ reqd: 1,
},
{
- "fieldname":"range3",
- "label": __("Ageing Range 3"),
- "fieldtype": "Int",
- "default": "90",
- "reqd": 1
+ fieldname: "range3",
+ label: __("Ageing Range 3"),
+ fieldtype: "Int",
+ default: "90",
+ reqd: 1,
},
{
- "fieldname":"range4",
- "label": __("Ageing Range 4"),
- "fieldtype": "Int",
- "default": "120",
- "reqd": 1
+ fieldname: "range4",
+ label: __("Ageing Range 4"),
+ fieldtype: "Int",
+ default: "120",
+ reqd: 1,
},
{
- "fieldname":"finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname":"cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center",
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
get_query: () => {
- var company = frappe.query_report.get_filter_value('company');
+ var company = frappe.query_report.get_filter_value("company");
return {
filters: {
- 'company': company
- }
- }
- }
+ company: company,
+ },
+ };
+ },
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Autocomplete",
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Autocomplete",
options: get_party_type_options(),
- on_change: function() {
- frappe.query_report.set_filter_value('party', "");
- frappe.query_report.toggle_filter_display('customer_group', frappe.query_report.get_filter_value('party_type') !== "Customer");
- }
+ on_change: function () {
+ frappe.query_report.set_filter_value("party", "");
+ frappe.query_report.toggle_filter_display(
+ "customer_group",
+ frappe.query_report.get_filter_value("party_type") !== "Customer"
+ );
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
if (!frappe.query_report.filters) return;
- let party_type = frappe.query_report.get_filter_value('party_type');
+ let party_type = frappe.query_report.get_filter_value("party_type");
if (!party_type) return;
return frappe.db.get_link_options(party_type, txt);
},
},
{
- "fieldname":"customer_group",
- "label": __("Customer Group"),
- "fieldtype": "Link",
- "options": "Customer Group"
+ fieldname: "customer_group",
+ label: __("Customer Group"),
+ fieldtype: "Link",
+ options: "Customer Group",
},
{
- "fieldname":"payment_terms_template",
- "label": __("Payment Terms Template"),
- "fieldtype": "Link",
- "options": "Payment Terms Template"
+ fieldname: "payment_terms_template",
+ label: __("Payment Terms Template"),
+ fieldtype: "Link",
+ options: "Payment Terms Template",
},
{
- "fieldname":"territory",
- "label": __("Territory"),
- "fieldtype": "Link",
- "options": "Territory"
+ fieldname: "territory",
+ label: __("Territory"),
+ fieldtype: "Link",
+ options: "Territory",
},
{
- "fieldname":"sales_partner",
- "label": __("Sales Partner"),
- "fieldtype": "Link",
- "options": "Sales Partner"
+ fieldname: "sales_partner",
+ label: __("Sales Partner"),
+ fieldtype: "Link",
+ options: "Sales Partner",
},
{
- "fieldname":"sales_person",
- "label": __("Sales Person"),
- "fieldtype": "Link",
- "options": "Sales Person"
+ fieldname: "sales_person",
+ label: __("Sales Person"),
+ fieldtype: "Link",
+ options: "Sales Person",
},
{
- "fieldname":"based_on_payment_terms",
- "label": __("Based On Payment Terms"),
- "fieldtype": "Check",
+ fieldname: "based_on_payment_terms",
+ label: __("Based On Payment Terms"),
+ fieldtype: "Check",
},
{
- "fieldname":"show_future_payments",
- "label": __("Show Future Payments"),
- "fieldtype": "Check",
+ fieldname: "show_future_payments",
+ label: __("Show Future Payments"),
+ fieldtype: "Check",
},
{
- "fieldname":"show_gl_balance",
- "label": __("Show GL Balance"),
- "fieldtype": "Check",
+ fieldname: "show_gl_balance",
+ label: __("Show GL Balance"),
+ fieldtype: "Check",
},
{
- "fieldname": "for_revaluation_journals",
- "label": __("Revaluation Journals"),
- "fieldtype": "Check",
- }
+ fieldname: "for_revaluation_journals",
+ label: __("Revaluation Journals"),
+ fieldtype: "Check",
+ },
],
- onload: function(report) {
- report.page.add_inner_button(__("Accounts Receivable"), function() {
+ onload: function (report) {
+ report.page.add_inner_button(__("Accounts Receivable"), function () {
var filters = report.get_values();
- frappe.set_route('query-report', 'Accounts Receivable', { company: filters.company });
+ frappe.set_route("query-report", "Accounts Receivable", { company: filters.company });
});
- }
-}
+ },
+};
-erpnext.utils.add_dimensions('Accounts Receivable Summary', 9);
+erpnext.utils.add_dimensions("Accounts Receivable Summary", 9);
function get_party_type_options() {
let options = [];
- frappe.db.get_list(
- "Party Type", {filters:{"account_type": "Receivable"}, fields:['name']}
- ).then((res) => {
- res.forEach((party_type) => {
- options.push(party_type.name);
+ frappe.db
+ .get_list("Party Type", { filters: { account_type: "Receivable" }, fields: ["name"] })
+ .then((res) => {
+ res.forEach((party_type) => {
+ options.push(party_type.name);
+ });
});
- });
return options;
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js b/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js
index 12b9434..db49ccb 100644
--- a/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js
+++ b/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js
@@ -2,58 +2,58 @@
// For license information, please see license.txt
frappe.query_reports["Asset Depreciation Ledger"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname":"asset",
- "label": __("Asset"),
- "fieldtype": "Link",
- "options": "Asset"
+ fieldname: "asset",
+ label: __("Asset"),
+ fieldtype: "Link",
+ options: "Asset",
},
{
- "fieldname":"asset_category",
- "label": __("Asset Category"),
- "fieldtype": "Link",
- "options": "Asset Category"
+ fieldname: "asset_category",
+ label: __("Asset Category"),
+ fieldtype: "Link",
+ options: "Asset Category",
},
{
- "fieldname":"cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center"
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
},
{
- "fieldname":"finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname": "include_default_book_assets",
- "label": __("Include Default FB Assets"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "include_default_book_assets",
+ label: __("Include Default FB Assets"),
+ fieldtype: "Check",
+ default: 1,
},
- ]
-}
+ ],
+};
diff --git a/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js b/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js
index 06fa9f3..49771d7 100644
--- a/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js
+++ b/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js
@@ -2,49 +2,49 @@
// For license information, please see license.txt
frappe.query_reports["Asset Depreciations and Balances"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- "reqd": 1
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ reqd: 1,
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- "reqd": 1
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ reqd: 1,
},
{
- "fieldname":"group_by",
- "label": __("Group By"),
- "fieldtype": "Select",
- "options": ["Asset Category", "Asset"],
- "default": "Asset Category",
+ fieldname: "group_by",
+ label: __("Group By"),
+ fieldtype: "Select",
+ options: ["Asset Category", "Asset"],
+ default: "Asset Category",
},
{
- "fieldname":"asset_category",
- "label": __("Asset Category"),
- "fieldtype": "Link",
- "options": "Asset Category",
- "depends_on": "eval: doc.group_by == 'Asset Category'",
+ fieldname: "asset_category",
+ label: __("Asset Category"),
+ fieldtype: "Link",
+ options: "Asset Category",
+ depends_on: "eval: doc.group_by == 'Asset Category'",
},
{
- "fieldname":"asset",
- "label": __("Asset"),
- "fieldtype": "Link",
- "options": "Asset",
- "depends_on": "eval: doc.group_by == 'Asset'",
+ fieldname: "asset",
+ label: __("Asset"),
+ fieldtype: "Link",
+ options: "Asset",
+ depends_on: "eval: doc.group_by == 'Asset'",
},
- ]
-}
+ ],
+};
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.js b/erpnext/accounts/report/balance_sheet/balance_sheet.js
index 5525024..0863c68 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.js
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.js
@@ -1,26 +1,21 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.query_reports["Balance Sheet"] = $.extend(
- {},
- erpnext.financial_statements
-);
+frappe.query_reports["Balance Sheet"] = $.extend({}, erpnext.financial_statements);
erpnext.utils.add_dimensions("Balance Sheet", 10);
-frappe.query_reports["Balance Sheet"]["filters"].push(
- {
- "fieldname": "selected_view",
- "label": __("Select View"),
- "fieldtype": "Select",
- "options": [
- { "value": "Report", "label": __("Report View") },
- { "value": "Growth", "label": __("Growth View") }
- ],
- "default": "Report",
- "reqd": 1
- },
-);
+frappe.query_reports["Balance Sheet"]["filters"].push({
+ fieldname: "selected_view",
+ label: __("Select View"),
+ fieldtype: "Select",
+ options: [
+ { value: "Report", label: __("Report View") },
+ { value: "Growth", label: __("Growth View") },
+ ],
+ default: "Report",
+ reqd: 1,
+});
frappe.query_reports["Balance Sheet"]["filters"].push({
fieldname: "accumulated_values",
diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
index 8a7d071..e8ae2a1 100644
--- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
+++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
@@ -2,37 +2,38 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Bank Clearance Summary"] = {
- "filters": [
+ filters: [
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- "width": "80"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ width: "80",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"account",
- "label": __("Bank Account"),
- "fieldtype": "Link",
- "options": "Account",
- "reqd": 1,
- "default": frappe.defaults.get_user_default("Company")?
- locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "",
- "get_query": function() {
+ fieldname: "account",
+ label: __("Bank Account"),
+ fieldtype: "Link",
+ options: "Account",
+ reqd: 1,
+ default: frappe.defaults.get_user_default("Company")
+ ? locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]
+ : "",
+ get_query: function () {
return {
- "query": "erpnext.controllers.queries.get_account_list",
- "filters": [
- ['Account', 'account_type', 'in', 'Bank, Cash'],
- ['Account', 'is_group', '=', 0],
- ]
- }
- }
+ query: "erpnext.controllers.queries.get_account_list",
+ filters: [
+ ["Account", "account_type", "in", "Bank, Cash"],
+ ["Account", "is_group", "=", 0],
+ ],
+ };
+ },
},
- ]
-}
+ ],
+};
diff --git a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
index 9bb6a14..efcfa7a 100644
--- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
+++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
@@ -2,47 +2,48 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Bank Reconciliation Statement"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "reqd": 1,
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ reqd: 1,
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"account",
- "label": __("Bank Account"),
- "fieldtype": "Link",
- "options": "Account",
- "default": frappe.defaults.get_user_default("Company")?
- locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "",
- "reqd": 1,
- "get_query": function() {
- var company = frappe.query_report.get_filter_value('company')
+ fieldname: "account",
+ label: __("Bank Account"),
+ fieldtype: "Link",
+ options: "Account",
+ default: frappe.defaults.get_user_default("Company")
+ ? locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]
+ : "",
+ reqd: 1,
+ get_query: function () {
+ var company = frappe.query_report.get_filter_value("company");
return {
- "query": "erpnext.controllers.queries.get_account_list",
- "filters": [
- ['Account', 'account_type', 'in', 'Bank, Cash'],
- ['Account', 'is_group', '=', 0],
- ['Account', 'disabled', '=', 0],
- ['Account', 'company', '=', company],
- ]
- }
- }
+ query: "erpnext.controllers.queries.get_account_list",
+ filters: [
+ ["Account", "account_type", "in", "Bank, Cash"],
+ ["Account", "is_group", "=", 0],
+ ["Account", "disabled", "=", 0],
+ ["Account", "company", "=", company],
+ ],
+ };
+ },
},
{
- "fieldname":"report_date",
- "label": __("Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1
+ fieldname: "report_date",
+ label: __("Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname":"include_pos_transactions",
- "label": __("Include POS Transactions"),
- "fieldtype": "Check"
+ fieldname: "include_pos_transactions",
+ label: __("Include POS Transactions"),
+ fieldtype: "Check",
},
- ]
-}
+ ],
+};
diff --git a/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js b/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js
index 7617ed1..c8407c2 100644
--- a/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js
+++ b/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js
@@ -1,29 +1,28 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
-frappe.query_reports['Billed Items To Be Received'] = {
- 'filters': [
+frappe.query_reports["Billed Items To Be Received"] = {
+ filters: [
{
- 'label': __('Company'),
- 'fieldname': 'company',
- 'fieldtype': 'Link',
- 'options': 'Company',
- 'reqd': 1,
- 'default': frappe.defaults.get_default('Company')
+ label: __("Company"),
+ fieldname: "company",
+ fieldtype: "Link",
+ options: "Company",
+ reqd: 1,
+ default: frappe.defaults.get_default("Company"),
},
{
- 'label': __('As on Date'),
- 'fieldname': 'posting_date',
- 'fieldtype': 'Date',
- 'reqd': 1,
- 'default': frappe.datetime.get_today()
+ label: __("As on Date"),
+ fieldname: "posting_date",
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.get_today(),
},
{
- 'label': __('Purchase Invoice'),
- 'fieldname': 'purchase_invoice',
- 'fieldtype': 'Link',
- 'options': 'Purchase Invoice'
- }
- ]
+ label: __("Purchase Invoice"),
+ fieldname: "purchase_invoice",
+ fieldtype: "Link",
+ options: "Purchase Invoice",
+ },
+ ],
};
diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
index d6a4755..83bd48c 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
@@ -2,37 +2,35 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Budget Variance Report"] = {
- "filters": get_filters(),
- "formatter": function (value, row, column, data, default_formatter) {
+ filters: get_filters(),
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
if (column.fieldname.includes(__("variance"))) {
-
if (data[column.fieldname] < 0) {
value = "<span style='color:red'>" + value + "</span>";
- }
- else if (data[column.fieldname] > 0) {
+ } else if (data[column.fieldname] > 0) {
value = "<span style='color:green'>" + value + "</span>";
}
}
return value;
- }
-}
+ },
+};
function get_filters() {
function get_dimensions() {
let result = [];
frappe.call({
method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.get_dimensions",
args: {
- 'with_cost_center_and_project': true
+ with_cost_center_and_project: true,
},
async: false,
- callback: function(r) {
- if(!r.exc) {
- result = r.message[0].map(elem => elem.document_type);
+ callback: function (r) {
+ if (!r.exc) {
+ result = r.message[0].map((elem) => elem.document_type);
}
- }
+ },
});
return result;
}
@@ -46,7 +44,7 @@
fieldtype: "Link",
options: "Fiscal Year",
default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- reqd: 1
+ reqd: 1,
},
{
fieldname: "to_fiscal_year",
@@ -54,20 +52,20 @@
fieldtype: "Link",
options: "Fiscal Year",
default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- reqd: 1
+ reqd: 1,
},
{
fieldname: "period",
label: __("Period"),
fieldtype: "Select",
options: [
- { "value": "Monthly", "label": __("Monthly") },
- { "value": "Quarterly", "label": __("Quarterly") },
- { "value": "Half-Yearly", "label": __("Half-Yearly") },
- { "value": "Yearly", "label": __("Yearly") }
+ { value: "Monthly", label: __("Monthly") },
+ { value: "Quarterly", label: __("Quarterly") },
+ { value: "Half-Yearly", label: __("Half-Yearly") },
+ { value: "Yearly", label: __("Yearly") },
],
default: "Yearly",
- reqd: 1
+ reqd: 1,
},
{
fieldname: "company",
@@ -75,7 +73,7 @@
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
- reqd: 1
+ reqd: 1,
},
{
fieldname: "budget_against",
@@ -84,32 +82,31 @@
options: budget_against_options,
default: "Cost Center",
reqd: 1,
- on_change: function() {
+ on_change: function () {
frappe.query_report.set_filter_value("budget_against_filter", []);
frappe.query_report.refresh();
- }
+ },
},
{
- fieldname:"budget_against_filter",
- label: __('Dimension Filter'),
+ fieldname: "budget_against_filter",
+ label: __("Dimension Filter"),
fieldtype: "MultiSelectList",
- get_data: function(txt) {
+ get_data: function (txt) {
if (!frappe.query_report.filters) return;
- let budget_against = frappe.query_report.get_filter_value('budget_against');
+ let budget_against = frappe.query_report.get_filter_value("budget_against");
if (!budget_against) return;
return frappe.db.get_link_options(budget_against, txt);
- }
+ },
},
{
- fieldname:"show_cumulative",
+ fieldname: "show_cumulative",
label: __("Show Cumulative Amount"),
fieldtype: "Check",
default: 0,
},
- ]
+ ];
return filters;
}
-
diff --git a/erpnext/accounts/report/cash_flow/cash_flow.js b/erpnext/accounts/report/cash_flow/cash_flow.js
index ef17eb1..c824f0d 100644
--- a/erpnext/accounts/report/cash_flow/cash_flow.js
+++ b/erpnext/accounts/report/cash_flow/cash_flow.js
@@ -1,12 +1,9 @@
// Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.query_reports["Cash Flow"] = $.extend(
- {},
- erpnext.financial_statements
-);
+frappe.query_reports["Cash Flow"] = $.extend({}, erpnext.financial_statements);
-erpnext.utils.add_dimensions('Cash Flow', 10);
+erpnext.utils.add_dimensions("Cash Flow", 10);
// The last item in the array is the definition for Presentation Currency
// filter. It won't be used in cash flow for now so we pop it. Please take
@@ -14,11 +11,9 @@
frappe.query_reports["Cash Flow"]["filters"].splice(8, 1);
-frappe.query_reports["Cash Flow"]["filters"].push(
- {
- "fieldname": "include_default_book_entries",
- "label": __("Include Default FB Entries"),
- "fieldtype": "Check",
- "default": 1
- }
-);
+frappe.query_reports["Cash Flow"]["filters"].push({
+ fieldname: "include_default_book_entries",
+ label: __("Include Default FB Entries"),
+ fieldtype: "Check",
+ default: 1,
+});
diff --git a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
index 6210fd1..5cd12aa 100644
--- a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
+++ b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
@@ -1,121 +1,145 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Consolidated Financial Statement"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"filter_based_on",
- "label": __("Filter Based On"),
- "fieldtype": "Select",
- "options": ["Fiscal Year", "Date Range"],
- "default": ["Fiscal Year"],
- "reqd": 1,
- on_change: function() {
- let filter_based_on = frappe.query_report.get_filter_value('filter_based_on');
- frappe.query_report.toggle_filter_display('from_fiscal_year', filter_based_on === 'Date Range');
- frappe.query_report.toggle_filter_display('to_fiscal_year', filter_based_on === 'Date Range');
- frappe.query_report.toggle_filter_display('period_start_date', filter_based_on === 'Fiscal Year');
- frappe.query_report.toggle_filter_display('period_end_date', filter_based_on === 'Fiscal Year');
+ fieldname: "filter_based_on",
+ label: __("Filter Based On"),
+ fieldtype: "Select",
+ options: ["Fiscal Year", "Date Range"],
+ default: ["Fiscal Year"],
+ reqd: 1,
+ on_change: function () {
+ let filter_based_on = frappe.query_report.get_filter_value("filter_based_on");
+ frappe.query_report.toggle_filter_display(
+ "from_fiscal_year",
+ filter_based_on === "Date Range"
+ );
+ frappe.query_report.toggle_filter_display("to_fiscal_year", filter_based_on === "Date Range");
+ frappe.query_report.toggle_filter_display(
+ "period_start_date",
+ filter_based_on === "Fiscal Year"
+ );
+ frappe.query_report.toggle_filter_display(
+ "period_end_date",
+ filter_based_on === "Fiscal Year"
+ );
frappe.query_report.refresh();
- }
+ },
},
{
- "fieldname":"period_start_date",
- "label": __("Start Date"),
- "fieldtype": "Date",
- "hidden": 1,
- "reqd": 1
+ fieldname: "period_start_date",
+ label: __("Start Date"),
+ fieldtype: "Date",
+ hidden: 1,
+ reqd: 1,
},
{
- "fieldname":"period_end_date",
- "label": __("End Date"),
- "fieldtype": "Date",
- "hidden": 1,
- "reqd": 1
+ fieldname: "period_end_date",
+ label: __("End Date"),
+ fieldtype: "Date",
+ hidden: 1,
+ reqd: 1,
},
{
- "fieldname":"from_fiscal_year",
- "label": __("Start Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1,
+ fieldname: "from_fiscal_year",
+ label: __("Start Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
on_change: () => {
- frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), function(r) {
- let year_start_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), "year_start_date");
- frappe.query_report.set_filter_value({
- period_start_date: year_start_date
- });
- });
- }
+ frappe.model.with_doc(
+ "Fiscal Year",
+ frappe.query_report.get_filter_value("from_fiscal_year"),
+ function (r) {
+ let year_start_date = frappe.model.get_value(
+ "Fiscal Year",
+ frappe.query_report.get_filter_value("from_fiscal_year"),
+ "year_start_date"
+ );
+ frappe.query_report.set_filter_value({
+ period_start_date: year_start_date,
+ });
+ }
+ );
+ },
},
{
- "fieldname":"to_fiscal_year",
- "label": __("End Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1,
+ fieldname: "to_fiscal_year",
+ label: __("End Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
on_change: () => {
- frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), function(r) {
- let year_end_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), "year_end_date");
- frappe.query_report.set_filter_value({
- period_end_date: year_end_date
- });
- });
- }
+ frappe.model.with_doc(
+ "Fiscal Year",
+ frappe.query_report.get_filter_value("to_fiscal_year"),
+ function (r) {
+ let year_end_date = frappe.model.get_value(
+ "Fiscal Year",
+ frappe.query_report.get_filter_value("to_fiscal_year"),
+ "year_end_date"
+ );
+ frappe.query_report.set_filter_value({
+ period_end_date: year_end_date,
+ });
+ }
+ );
+ },
},
{
- "fieldname":"finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname":"report",
- "label": __("Report"),
- "fieldtype": "Select",
- "options": ["Profit and Loss Statement", "Balance Sheet", "Cash Flow"],
- "default": "Balance Sheet",
- "reqd": 1
+ fieldname: "report",
+ label: __("Report"),
+ fieldtype: "Select",
+ options: ["Profit and Loss Statement", "Balance Sheet", "Cash Flow"],
+ default: "Balance Sheet",
+ reqd: 1,
},
{
- "fieldname": "presentation_currency",
- "label": __("Currency"),
- "fieldtype": "Select",
- "options": erpnext.get_presentation_currency_list(),
- "default": frappe.defaults.get_user_default("Currency")
+ fieldname: "presentation_currency",
+ label: __("Currency"),
+ fieldtype: "Select",
+ options: erpnext.get_presentation_currency_list(),
+ default: frappe.defaults.get_user_default("Currency"),
},
{
- "fieldname":"accumulated_in_group_company",
- "label": __("Accumulated Values in Group Company"),
- "fieldtype": "Check",
- "default": 0
+ fieldname: "accumulated_in_group_company",
+ label: __("Accumulated Values in Group Company"),
+ fieldtype: "Check",
+ default: 0,
},
{
- "fieldname": "include_default_book_entries",
- "label": __("Include Default FB Entries"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "include_default_book_entries",
+ label: __("Include Default FB Entries"),
+ fieldtype: "Check",
+ default: 1,
},
{
- "fieldname": "show_zero_values",
- "label": __("Show zero values"),
- "fieldtype": "Check"
- }
+ fieldname: "show_zero_values",
+ label: __("Show zero values"),
+ fieldtype: "Check",
+ },
],
- "formatter": function(value, row, column, data, default_formatter) {
- if (data && column.fieldname=="account") {
+ formatter: function (value, row, column, data, default_formatter) {
+ if (data && column.fieldname == "account") {
value = data.account_name || value;
column.link_onclick =
@@ -137,15 +161,15 @@
}
return value;
},
- onload: function() {
+ onload: function () {
let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today());
- frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
frappe.query_report.set_filter_value({
period_start_date: fy.year_start_date,
- period_end_date: fy.year_end_date
+ period_end_date: fy.year_end_date,
});
});
- }
-}
+ },
+};
diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js
index 74d52de..3600db8 100644
--- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js
+++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js
@@ -1,97 +1,96 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Customer Ledger Summary"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
- "width": "60px"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
- "width": "60px"
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname":"party",
- "label": __("Customer"),
- "fieldtype": "Link",
- "options": "Customer",
+ fieldname: "party",
+ label: __("Customer"),
+ fieldtype: "Link",
+ options: "Customer",
on_change: () => {
- var party = frappe.query_report.get_filter_value('party');
+ var party = frappe.query_report.get_filter_value("party");
if (party) {
- frappe.db.get_value('Customer', party, ["tax_id", "customer_name"], function(value) {
- frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
- frappe.query_report.set_filter_value('customer_name', value["customer_name"]);
+ frappe.db.get_value("Customer", party, ["tax_id", "customer_name"], function (value) {
+ frappe.query_report.set_filter_value("tax_id", value["tax_id"]);
+ frappe.query_report.set_filter_value("customer_name", value["customer_name"]);
});
} else {
- frappe.query_report.set_filter_value('tax_id', "");
- frappe.query_report.set_filter_value('customer_name', "");
+ frappe.query_report.set_filter_value("tax_id", "");
+ frappe.query_report.set_filter_value("customer_name", "");
}
- }
+ },
},
{
- "fieldname":"customer_group",
- "label": __("Customer Group"),
- "fieldtype": "Link",
- "options": "Customer Group"
+ fieldname: "customer_group",
+ label: __("Customer Group"),
+ fieldtype: "Link",
+ options: "Customer Group",
},
{
- "fieldname":"payment_terms_template",
- "label": __("Payment Terms Template"),
- "fieldtype": "Link",
- "options": "Payment Terms Template"
+ fieldname: "payment_terms_template",
+ label: __("Payment Terms Template"),
+ fieldtype: "Link",
+ options: "Payment Terms Template",
},
{
- "fieldname":"territory",
- "label": __("Territory"),
- "fieldtype": "Link",
- "options": "Territory"
+ fieldname: "territory",
+ label: __("Territory"),
+ fieldtype: "Link",
+ options: "Territory",
},
{
- "fieldname":"sales_partner",
- "label": __("Sales Partner"),
- "fieldtype": "Link",
- "options": "Sales Partner"
+ fieldname: "sales_partner",
+ label: __("Sales Partner"),
+ fieldtype: "Link",
+ options: "Sales Partner",
},
{
- "fieldname":"sales_person",
- "label": __("Sales Person"),
- "fieldtype": "Link",
- "options": "Sales Person"
+ fieldname: "sales_person",
+ label: __("Sales Person"),
+ fieldtype: "Link",
+ options: "Sales Person",
},
{
- "fieldname":"tax_id",
- "label": __("Tax Id"),
- "fieldtype": "Data",
- "hidden": 1
+ fieldname: "tax_id",
+ label: __("Tax Id"),
+ fieldtype: "Data",
+ hidden: 1,
},
{
- "fieldname":"customer_name",
- "label": __("Customer Name"),
- "fieldtype": "Data",
- "hidden": 1
- }
- ]
+ fieldname: "customer_name",
+ label: __("Customer Name"),
+ fieldtype: "Data",
+ hidden: 1,
+ },
+ ],
};
diff --git a/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js b/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js
index eec904e..3540200 100644
--- a/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js
+++ b/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js
@@ -1,114 +1,121 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
function get_filters() {
let filters = [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"filter_based_on",
- "label": __("Filter Based On"),
- "fieldtype": "Select",
- "options": ["Fiscal Year", "Date Range"],
- "default": ["Fiscal Year"],
- "reqd": 1,
- on_change: function() {
- let filter_based_on = frappe.query_report.get_filter_value('filter_based_on');
- frappe.query_report.toggle_filter_display('from_fiscal_year', filter_based_on === 'Date Range');
- frappe.query_report.toggle_filter_display('to_fiscal_year', filter_based_on === 'Date Range');
- frappe.query_report.toggle_filter_display('period_start_date', filter_based_on === 'Fiscal Year');
- frappe.query_report.toggle_filter_display('period_end_date', filter_based_on === 'Fiscal Year');
+ fieldname: "filter_based_on",
+ label: __("Filter Based On"),
+ fieldtype: "Select",
+ options: ["Fiscal Year", "Date Range"],
+ default: ["Fiscal Year"],
+ reqd: 1,
+ on_change: function () {
+ let filter_based_on = frappe.query_report.get_filter_value("filter_based_on");
+ frappe.query_report.toggle_filter_display(
+ "from_fiscal_year",
+ filter_based_on === "Date Range"
+ );
+ frappe.query_report.toggle_filter_display("to_fiscal_year", filter_based_on === "Date Range");
+ frappe.query_report.toggle_filter_display(
+ "period_start_date",
+ filter_based_on === "Fiscal Year"
+ );
+ frappe.query_report.toggle_filter_display(
+ "period_end_date",
+ filter_based_on === "Fiscal Year"
+ );
frappe.query_report.refresh();
- }
+ },
},
{
- "fieldname":"period_start_date",
- "label": __("Start Date"),
- "fieldtype": "Date",
- "hidden": 1,
- "reqd": 1
+ fieldname: "period_start_date",
+ label: __("Start Date"),
+ fieldtype: "Date",
+ hidden: 1,
+ reqd: 1,
},
{
- "fieldname":"period_end_date",
- "label": __("End Date"),
- "fieldtype": "Date",
- "hidden": 1,
- "reqd": 1
+ fieldname: "period_end_date",
+ label: __("End Date"),
+ fieldtype: "Date",
+ hidden: 1,
+ reqd: 1,
},
{
- "fieldname":"from_fiscal_year",
- "label": __("Start Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1
+ fieldname: "from_fiscal_year",
+ label: __("Start Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
},
{
- "fieldname":"to_fiscal_year",
- "label": __("End Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1
+ fieldname: "to_fiscal_year",
+ label: __("End Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
},
{
- "fieldname": "periodicity",
- "label": __("Periodicity"),
- "fieldtype": "Select",
- "options": [
- { "value": "Monthly", "label": __("Monthly") },
- { "value": "Quarterly", "label": __("Quarterly") },
- { "value": "Half-Yearly", "label": __("Half-Yearly") },
- { "value": "Yearly", "label": __("Yearly") }
+ fieldname: "periodicity",
+ label: __("Periodicity"),
+ fieldtype: "Select",
+ options: [
+ { value: "Monthly", label: __("Monthly") },
+ { value: "Quarterly", label: __("Quarterly") },
+ { value: "Half-Yearly", label: __("Half-Yearly") },
+ { value: "Yearly", label: __("Yearly") },
],
- "default": "Monthly",
- "reqd": 1
+ default: "Monthly",
+ reqd: 1,
},
{
- "fieldname": "type",
- "label": __("Invoice Type"),
- "fieldtype": "Select",
- "options": [
- { "value": "Revenue", "label": __("Revenue") },
- { "value": "Expense", "label": __("Expense") }
+ fieldname: "type",
+ label: __("Invoice Type"),
+ fieldtype: "Select",
+ options: [
+ { value: "Revenue", label: __("Revenue") },
+ { value: "Expense", label: __("Expense") },
],
- "default": "Revenue",
- "reqd": 1
+ default: "Revenue",
+ reqd: 1,
},
{
- "fieldname" : "with_upcoming_postings",
- "label": __("Show with upcoming revenue/expense"),
- "fieldtype": "Check",
- "default": 1
- }
- ]
+ fieldname: "with_upcoming_postings",
+ label: __("Show with upcoming revenue/expense"),
+ fieldtype: "Check",
+ default: 1,
+ },
+ ];
return filters;
}
frappe.query_reports["Deferred Revenue and Expense"] = {
- "filters": get_filters(),
- "formatter": function(value, row, column, data, default_formatter){
+ filters: get_filters(),
+ formatter: function (value, row, column, data, default_formatter) {
return default_formatter(value, row, column, data);
},
- onload: function(report){
+ onload: function (report) {
let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today());
- frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
frappe.query_report.set_filter_value({
period_start_date: fy.year_start_date,
- period_end_date: fy.year_end_date
+ period_end_date: fy.year_end_date,
});
});
- }
+ },
};
-
diff --git a/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js b/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js
index 1454b2c..f6051d7 100644
--- a/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js
+++ b/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js
@@ -2,7 +2,5 @@
// For license information, please see license.txt
frappe.query_reports["Delivered Items To Be Billed"] = {
- "filters": [
-
- ]
-}
+ filters: [],
+};
diff --git a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
index 51fa8c8..20c34e3 100644
--- a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
+++ b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
@@ -1,82 +1,79 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Dimension-wise Accounts Balance Report"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname": "fiscal_year",
- "label": __("Fiscal Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1,
- "on_change": function(query_report) {
+ fieldname: "fiscal_year",
+ label: __("Fiscal Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
+ on_change: function (query_report) {
var fiscal_year = query_report.get_values().fiscal_year;
if (!fiscal_year) {
return;
}
- frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
frappe.query_report.set_filter_value({
from_date: fy.year_start_date,
- to_date: fy.year_end_date
+ to_date: fy.year_end_date,
});
});
- }
+ },
},
{
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- "reqd": 1
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ reqd: 1,
},
{
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- "reqd": 1
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ reqd: 1,
},
{
- "fieldname": "finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book",
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname": "dimension",
- "label": __("Select Dimension"),
- "fieldtype": "Select",
- "default": "Cost Center",
- "options": get_accounting_dimension_options(),
- "reqd": 1,
+ fieldname: "dimension",
+ label: __("Select Dimension"),
+ fieldtype: "Select",
+ default: "Cost Center",
+ options: get_accounting_dimension_options(),
+ reqd: 1,
},
],
- "formatter": erpnext.financial_statements.formatter,
- "tree": true,
- "name_field": "account",
- "parent_field": "parent_account",
- "initial_depth": 3
-}
-
+ formatter: erpnext.financial_statements.formatter,
+ tree: true,
+ name_field: "account",
+ parent_field: "parent_account",
+ initial_depth: 3,
+};
function get_accounting_dimension_options() {
- let options =["Cost Center", "Project"];
- frappe.db.get_list('Accounting Dimension',
- {fields:['document_type']}).then((res) => {
- res.forEach((dimension) => {
- options.push(dimension.document_type);
- });
- });
- return options
+ let options = ["Cost Center", "Project"];
+ frappe.db.get_list("Accounting Dimension", { fields: ["document_type"] }).then((res) => {
+ res.forEach((dimension) => {
+ options.push(dimension.document_type);
+ });
+ });
+ return options;
}
diff --git a/erpnext/accounts/report/financial_ratios/financial_ratios.js b/erpnext/accounts/report/financial_ratios/financial_ratios.js
index 643423d..c0ae31d 100644
--- a/erpnext/accounts/report/financial_ratios/financial_ratios.js
+++ b/erpnext/accounts/report/financial_ratios/financial_ratios.js
@@ -51,9 +51,8 @@
hidden: 1,
},
],
- "formatter": function(value, row, column, data, default_formatter) {
-
- let heading_ratios = ["Liquidity Ratios", "Solvency Ratios","Turnover Ratios"]
+ formatter: function (value, row, column, data, default_formatter) {
+ let heading_ratios = ["Liquidity Ratios", "Solvency Ratios", "Turnover Ratios"];
if (heading_ratios.includes(value)) {
value = $(`<span>${value}</span>`);
diff --git a/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js b/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js
index 7e6b053..4eadf34 100644
--- a/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js
+++ b/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js
@@ -4,49 +4,49 @@
function get_filters() {
let filters = [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"period_start_date",
- "label": __("Start Date"),
- "fieldtype": "Date",
- "reqd": 1,
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1)
+ fieldname: "period_start_date",
+ label: __("Start Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
},
{
- "fieldname":"period_end_date",
- "label": __("End Date"),
- "fieldtype": "Date",
- "reqd": 1,
- "default": frappe.datetime.get_today()
+ fieldname: "period_end_date",
+ label: __("End Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"account",
- "label": __("Account"),
- "fieldtype": "MultiSelectList",
- "options": "Account",
- get_data: function(txt) {
- return frappe.db.get_link_options('Account', txt, {
+ fieldname: "account",
+ label: __("Account"),
+ fieldtype: "MultiSelectList",
+ options: "Account",
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Account", txt, {
company: frappe.query_report.get_filter_value("company"),
- account_type: ['in', ["Receivable", "Payable"]]
+ account_type: ["in", ["Receivable", "Payable"]],
});
- }
+ },
},
{
- "fieldname":"voucher_no",
- "label": __("Voucher No"),
- "fieldtype": "Data",
- "width": 100,
+ fieldname: "voucher_no",
+ label: __("Voucher No"),
+ fieldtype: "Data",
+ width: 100,
},
- ]
+ ];
return filters;
}
frappe.query_reports["General and Payment Ledger Comparison"] = {
- "filters": get_filters()
+ filters: get_filters(),
};
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js
index b7b9d34..1894e95 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.js
+++ b/erpnext/accounts/report/general_ledger/general_ledger.js
@@ -2,119 +2,119 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["General Ledger"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
- "width": "60px"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
- "width": "60px"
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"account",
- "label": __("Account"),
- "fieldtype": "MultiSelectList",
- "options": "Account",
- get_data: function(txt) {
- return frappe.db.get_link_options('Account', txt, {
- company: frappe.query_report.get_filter_value("company")
+ fieldname: "account",
+ label: __("Account"),
+ fieldtype: "MultiSelectList",
+ options: "Account",
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Account", txt, {
+ company: frappe.query_report.get_filter_value("company"),
});
- }
+ },
},
{
- "fieldname":"voucher_no",
- "label": __("Voucher No"),
- "fieldtype": "Data",
- on_change: function() {
- frappe.query_report.set_filter_value('group_by', "Group by Voucher (Consolidated)");
- }
+ fieldname: "voucher_no",
+ label: __("Voucher No"),
+ fieldtype: "Data",
+ on_change: function () {
+ frappe.query_report.set_filter_value("group_by", "Group by Voucher (Consolidated)");
+ },
},
{
- "fieldname":"against_voucher_no",
- "label": __("Against Voucher No"),
- "fieldtype": "Data",
+ fieldname: "against_voucher_no",
+ label: __("Against Voucher No"),
+ fieldtype: "Data",
},
{
- "fieldtype": "Break",
+ fieldtype: "Break",
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Autocomplete",
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Autocomplete",
options: Object.keys(frappe.boot.party_account_types),
- on_change: function() {
- frappe.query_report.set_filter_value('party', "");
- }
+ on_change: function () {
+ frappe.query_report.set_filter_value("party", "");
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
if (!frappe.query_report.filters) return;
- let party_type = frappe.query_report.get_filter_value('party_type');
+ let party_type = frappe.query_report.get_filter_value("party_type");
if (!party_type) return;
return frappe.db.get_link_options(party_type, txt);
},
- on_change: function() {
- var party_type = frappe.query_report.get_filter_value('party_type');
- var parties = frappe.query_report.get_filter_value('party');
+ on_change: function () {
+ var party_type = frappe.query_report.get_filter_value("party_type");
+ var parties = frappe.query_report.get_filter_value("party");
- if(!party_type || parties.length === 0 || parties.length > 1) {
- frappe.query_report.set_filter_value('party_name', "");
- frappe.query_report.set_filter_value('tax_id', "");
+ if (!party_type || parties.length === 0 || parties.length > 1) {
+ frappe.query_report.set_filter_value("party_name", "");
+ frappe.query_report.set_filter_value("tax_id", "");
return;
} else {
var party = parties[0];
var fieldname = erpnext.utils.get_party_name(party_type) || "name";
- frappe.db.get_value(party_type, party, fieldname, function(value) {
- frappe.query_report.set_filter_value('party_name', value[fieldname]);
+ frappe.db.get_value(party_type, party, fieldname, function (value) {
+ frappe.query_report.set_filter_value("party_name", value[fieldname]);
});
if (party_type === "Customer" || party_type === "Supplier") {
- frappe.db.get_value(party_type, party, "tax_id", function(value) {
- frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
+ frappe.db.get_value(party_type, party, "tax_id", function (value) {
+ frappe.query_report.set_filter_value("tax_id", value["tax_id"]);
});
}
}
- }
+ },
},
{
- "fieldname":"party_name",
- "label": __("Party Name"),
- "fieldtype": "Data",
- "hidden": 1
+ fieldname: "party_name",
+ label: __("Party Name"),
+ fieldtype: "Data",
+ hidden: 1,
},
{
- "fieldname":"group_by",
- "label": __("Group by"),
- "fieldtype": "Select",
- "options": [
+ fieldname: "group_by",
+ label: __("Group by"),
+ fieldtype: "Select",
+ options: [
"",
{
label: __("Group by Voucher"),
@@ -133,85 +133,83 @@
value: "Group by Party",
},
],
- "default": "Group by Voucher (Consolidated)"
+ default: "Group by Voucher (Consolidated)",
},
{
- "fieldname":"tax_id",
- "label": __("Tax Id"),
- "fieldtype": "Data",
- "hidden": 1
+ fieldname: "tax_id",
+ label: __("Tax Id"),
+ fieldtype: "Data",
+ hidden: 1,
},
{
- "fieldname": "presentation_currency",
- "label": __("Currency"),
- "fieldtype": "Select",
- "options": erpnext.get_presentation_currency_list()
+ fieldname: "presentation_currency",
+ label: __("Currency"),
+ fieldtype: "Select",
+ options: erpnext.get_presentation_currency_list(),
},
{
- "fieldname":"cost_center",
- "label": __("Cost Center"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
- return frappe.db.get_link_options('Cost Center', txt, {
- company: frappe.query_report.get_filter_value("company")
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Cost Center", txt, {
+ company: frappe.query_report.get_filter_value("company"),
});
- }
+ },
},
{
- "fieldname":"project",
- "label": __("Project"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
- return frappe.db.get_link_options('Project', txt, {
- company: frappe.query_report.get_filter_value("company")
+ fieldname: "project",
+ label: __("Project"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Project", txt, {
+ company: frappe.query_report.get_filter_value("company"),
});
- }
+ },
},
{
- "fieldname": "include_dimensions",
- "label": __("Consider Accounting Dimensions"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "include_dimensions",
+ label: __("Consider Accounting Dimensions"),
+ fieldtype: "Check",
+ default: 1,
},
{
- "fieldname": "show_opening_entries",
- "label": __("Show Opening Entries"),
- "fieldtype": "Check"
+ fieldname: "show_opening_entries",
+ label: __("Show Opening Entries"),
+ fieldtype: "Check",
},
{
- "fieldname": "include_default_book_entries",
- "label": __("Include Default FB Entries"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "include_default_book_entries",
+ label: __("Include Default FB Entries"),
+ fieldtype: "Check",
+ default: 1,
},
{
- "fieldname": "show_cancelled_entries",
- "label": __("Show Cancelled Entries"),
- "fieldtype": "Check"
+ fieldname: "show_cancelled_entries",
+ label: __("Show Cancelled Entries"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_net_values_in_party_account",
- "label": __("Show Net Values in Party Account"),
- "fieldtype": "Check"
+ fieldname: "show_net_values_in_party_account",
+ label: __("Show Net Values in Party Account"),
+ fieldtype: "Check",
},
{
- "fieldname": "add_values_in_transaction_currency",
- "label": __("Add Columns in Transaction Currency"),
- "fieldtype": "Check"
+ fieldname: "add_values_in_transaction_currency",
+ label: __("Add Columns in Transaction Currency"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_remarks",
- "label": __("Show Remarks"),
- "fieldtype": "Check"
+ fieldname: "show_remarks",
+ label: __("Show Remarks"),
+ fieldtype: "Check",
},
{
- "fieldname": "ignore_err",
- "label": __("Ignore Exchange Rate Revaluation Journals"),
- "fieldtype": "Check"
- }
+ fieldname: "ignore_err",
+ label: __("Ignore Exchange Rate Revaluation Journals"),
+ fieldtype: "Check",
+ },
+ ],
+};
-
- ]
-}
-
-erpnext.utils.add_dimensions('General Ledger', 15)
+erpnext.utils.add_dimensions("General Ledger", 15);
diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
index 40d4259..2448eef 100644
--- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
+++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
@@ -1,16 +1,10 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
+frappe.query_reports["Gross and Net Profit Report"] = $.extend({}, erpnext.financial_statements);
-frappe.query_reports["Gross and Net Profit Report"] = $.extend(
- {},
- erpnext.financial_statements
-);
-
-frappe.query_reports["Gross and Net Profit Report"]["filters"].push(
- {
- "fieldname": "accumulated_values",
- "label": __("Accumulated Values"),
- "fieldtype": "Check"
- }
-);
+frappe.query_reports["Gross and Net Profit Report"]["filters"].push({
+ fieldname: "accumulated_values",
+ label: __("Accumulated Values"),
+ fieldtype: "Check",
+});
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.js b/erpnext/accounts/report/gross_profit/gross_profit.js
index 7520548..fad6586 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.js
+++ b/erpnext/accounts/report/gross_profit/gross_profit.js
@@ -2,74 +2,73 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Gross Profit"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- "reqd": 1
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ reqd: 1,
},
{
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- "reqd": 1
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ reqd: 1,
},
{
- "fieldname": "sales_invoice",
- "label": __("Sales Invoice"),
- "fieldtype": "Link",
- "options": "Sales Invoice"
+ fieldname: "sales_invoice",
+ label: __("Sales Invoice"),
+ fieldtype: "Link",
+ options: "Sales Invoice",
},
{
- "fieldname": "group_by",
- "label": __("Group By"),
- "fieldtype": "Select",
- "options": "Invoice\nItem Code\nItem Group\nBrand\nWarehouse\nCustomer\nCustomer Group\nTerritory\nSales Person\nProject\nMonthly\nPayment Term",
- "default": "Invoice"
+ fieldname: "group_by",
+ label: __("Group By"),
+ fieldtype: "Select",
+ options:
+ "Invoice\nItem Code\nItem Group\nBrand\nWarehouse\nCustomer\nCustomer Group\nTerritory\nSales Person\nProject\nMonthly\nPayment Term",
+ default: "Invoice",
},
{
- "fieldname": "item_group",
- "label": __("Item Group"),
- "fieldtype": "Link",
- "options": "Item Group"
+ fieldname: "item_group",
+ label: __("Item Group"),
+ fieldtype: "Link",
+ options: "Item Group",
},
{
- "fieldname": "sales_person",
- "label": __("Sales Person"),
- "fieldtype": "Link",
- "options": "Sales Person"
+ fieldname: "sales_person",
+ label: __("Sales Person"),
+ fieldtype: "Link",
+ options: "Sales Person",
},
{
- "fieldname": "warehouse",
- "label": __("Warehouse"),
- "fieldtype": "Link",
- "options": "Warehouse",
- "get_query": function () {
- var company = frappe.query_report.get_filter_value('company');
+ fieldname: "warehouse",
+ label: __("Warehouse"),
+ fieldtype: "Link",
+ options: "Warehouse",
+ get_query: function () {
+ var company = frappe.query_report.get_filter_value("company");
return {
- filters: [
- ["Warehouse", "company", "=", company]
- ]
+ filters: [["Warehouse", "company", "=", company]],
};
},
},
],
- "tree": true,
- "name_field": "parent",
- "parent_field": "parent_invoice",
- "initial_depth": 3,
- "formatter": function(value, row, column, data, default_formatter) {
+ tree: true,
+ name_field: "parent",
+ parent_field: "parent_invoice",
+ initial_depth: 3,
+ formatter: function (value, row, column, data, default_formatter) {
if (column.fieldname == "sales_invoice" && column.options == "Item" && data && data.indent == 0) {
column._options = "Sales Invoice";
} else {
@@ -85,4 +84,4 @@
return value;
},
-}
+};
diff --git a/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js b/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js
index bd9b543..b420d99 100644
--- a/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js
+++ b/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js
@@ -1,9 +1,8 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Inactive Sales Items"] = {
- "filters": [
+ filters: [
{
fieldname: "territory",
label: __("Territory"),
@@ -15,27 +14,27 @@
fieldname: "item",
label: __("Item"),
fieldtype: "Link",
- options: "Item"
+ options: "Item",
},
{
fieldname: "item_group",
label: __("Item Group"),
fieldtype: "Link",
- options: "Item Group"
+ options: "Item Group",
},
{
fieldname: "based_on",
label: __("Based On"),
fieldtype: "Select",
options: "Sales Order\nSales Invoice",
- default: "Sales Order"
+ default: "Sales Order",
},
{
fieldname: "days",
label: __("Days Since Last order"),
fieldtype: "Select",
options: [30, 60, 90],
- default: 30
+ default: 30,
},
- ]
+ ],
};
diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
index 423cd6a..e05591e 100644
--- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
+++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
@@ -2,65 +2,64 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Item-wise Purchase Register"] = {
- "filters": [
+ filters: [
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname": "item_code",
- "label": __("Item"),
- "fieldtype": "Link",
- "options": "Item",
+ fieldname: "item_code",
+ label: __("Item"),
+ fieldtype: "Link",
+ options: "Item",
},
{
- "fieldname": "item_group",
- "label": __("Item Group"),
- "fieldtype": "Link",
- "options": "Item Group",
+ fieldname: "item_group",
+ label: __("Item Group"),
+ fieldtype: "Link",
+ options: "Item Group",
},
{
- "fieldname":"supplier",
- "label": __("Supplier"),
- "fieldtype": "Link",
- "options": "Supplier"
+ fieldname: "supplier",
+ label: __("Supplier"),
+ fieldtype: "Link",
+ options: "Supplier",
},
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"mode_of_payment",
- "label": __("Mode of Payment"),
- "fieldtype": "Link",
- "options": "Mode of Payment"
+ fieldname: "mode_of_payment",
+ label: __("Mode of Payment"),
+ fieldtype: "Link",
+ options: "Mode of Payment",
},
{
- "label": __("Group By"),
- "fieldname": "group_by",
- "fieldtype": "Select",
- "options": ["Supplier", "Item Group", "Item", "Invoice"]
- }
+ label: __("Group By"),
+ fieldname: "group_by",
+ fieldtype: "Select",
+ options: ["Supplier", "Item Group", "Item", "Invoice"],
+ },
],
- "formatter": function(value, row, column, data, default_formatter) {
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
if (data && data.bold) {
value = value.bold();
-
}
return value;
- }
-}
+ },
+};
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
index 06f426b..193e175 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
@@ -2,85 +2,84 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Item-wise Sales Register"] = {
- "filters": [
+ filters: [
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname": "customer",
- "label": __("Customer"),
- "fieldtype": "Link",
- "options": "Customer"
+ fieldname: "customer",
+ label: __("Customer"),
+ fieldtype: "Link",
+ options: "Customer",
},
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname": "mode_of_payment",
- "label": __("Mode of Payment"),
- "fieldtype": "Link",
- "options": "Mode of Payment"
+ fieldname: "mode_of_payment",
+ label: __("Mode of Payment"),
+ fieldtype: "Link",
+ options: "Mode of Payment",
},
{
- "fieldname": "warehouse",
- "label": __("Warehouse"),
- "fieldtype": "Link",
- "options": "Warehouse"
+ fieldname: "warehouse",
+ label: __("Warehouse"),
+ fieldtype: "Link",
+ options: "Warehouse",
},
{
- "fieldname": "brand",
- "label": __("Brand"),
- "fieldtype": "Link",
- "options": "Brand"
+ fieldname: "brand",
+ label: __("Brand"),
+ fieldtype: "Link",
+ options: "Brand",
},
{
- "fieldname": "item_group",
- "label": __("Item Group"),
- "fieldtype": "Link",
- "options": "Item Group"
+ fieldname: "item_group",
+ label: __("Item Group"),
+ fieldtype: "Link",
+ options: "Item Group",
},
{
- "label": __("Group By"),
- "fieldname": "group_by",
- "fieldtype": "Select",
- "options": ["Customer Group", "Customer", "Item Group", "Item", "Territory", "Invoice"]
+ label: __("Group By"),
+ fieldname: "group_by",
+ fieldtype: "Select",
+ options: ["Customer Group", "Customer", "Item Group", "Item", "Territory", "Invoice"],
},
{
- "fieldname": "income_account",
- "label": __("Income Account"),
- "fieldtype": "Link",
- "options": "Account",
+ fieldname: "income_account",
+ label: __("Income Account"),
+ fieldtype: "Link",
+ options: "Account",
get_query: () => {
- let company = frappe.query_report.get_filter_value('company');
+ let company = frappe.query_report.get_filter_value("company");
return {
filters: {
- 'company': company,
- }
+ company: company,
+ },
};
- }
+ },
},
],
- "formatter": function(value, row, column, data, default_formatter) {
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
if (data && data.bold) {
value = value.bold();
-
}
return value;
- }
-}
+ },
+};
diff --git a/erpnext/accounts/report/payment_ledger/payment_ledger.js b/erpnext/accounts/report/payment_ledger/payment_ledger.js
index 65380cc..8d1f227 100644
--- a/erpnext/accounts/report/payment_ledger/payment_ledger.js
+++ b/erpnext/accounts/report/payment_ledger/payment_ledger.js
@@ -1,96 +1,92 @@
// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
function get_filters() {
let filters = [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"period_start_date",
- "label": __("Start Date"),
- "fieldtype": "Date",
- "reqd": 1,
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1)
+ fieldname: "period_start_date",
+ label: __("Start Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
},
{
- "fieldname":"period_end_date",
- "label": __("End Date"),
- "fieldtype": "Date",
- "reqd": 1,
- "default": frappe.datetime.get_today()
+ fieldname: "period_end_date",
+ label: __("End Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"account",
- "label": __("Account"),
- "fieldtype": "MultiSelectList",
- "options": "Account",
- get_data: function(txt) {
- return frappe.db.get_link_options('Account', txt, {
- company: frappe.query_report.get_filter_value("company")
+ fieldname: "account",
+ label: __("Account"),
+ fieldtype: "MultiSelectList",
+ options: "Account",
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Account", txt, {
+ company: frappe.query_report.get_filter_value("company"),
});
- }
+ },
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Link",
- "options": "Party Type",
- "default": "",
- on_change: function() {
- frappe.query_report.set_filter_value('party', "");
- }
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Link",
+ options: "Party Type",
+ default: "",
+ on_change: function () {
+ frappe.query_report.set_filter_value("party", "");
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "MultiSelectList",
- get_data: function(txt) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "MultiSelectList",
+ get_data: function (txt) {
if (!frappe.query_report.filters) return;
- let party_type = frappe.query_report.get_filter_value('party_type');
+ let party_type = frappe.query_report.get_filter_value("party_type");
if (!party_type) return;
return frappe.db.get_link_options(party_type, txt);
},
},
{
- "fieldname":"voucher_no",
- "label": __("Voucher No"),
- "fieldtype": "Data",
- "width": 100,
+ fieldname: "voucher_no",
+ label: __("Voucher No"),
+ fieldtype: "Data",
+ width: 100,
},
{
- "fieldname":"against_voucher_no",
- "label": __("Against Voucher No"),
- "fieldtype": "Data",
- "width": 100,
+ fieldname: "against_voucher_no",
+ label: __("Against Voucher No"),
+ fieldtype: "Data",
+ width: 100,
},
{
- "fieldname":"include_account_currency",
- "label": __("Include Account Currency"),
- "fieldtype": "Check",
- "width": 100,
+ fieldname: "include_account_currency",
+ label: __("Include Account Currency"),
+ fieldtype: "Check",
+ width: 100,
},
{
- "fieldname":"group_party",
- "label": __("Group by Party"),
- "fieldtype": "Check",
- "width": 100,
+ fieldname: "group_party",
+ label: __("Group by Party"),
+ fieldtype: "Check",
+ width: 100,
},
-
-
-
- ]
+ ];
return filters;
}
frappe.query_reports["Payment Ledger"] = {
- "filters": get_filters()
+ filters: get_filters(),
};
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
index 5ec2c98..528246c 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
@@ -2,14 +2,14 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Payment Period Based On Invoice Date"] = {
- "filters": [
+ filters: [
{
- fieldname:"company",
+ fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
reqd: 1,
- default: frappe.defaults.get_user_default("Company")
+ default: frappe.defaults.get_user_default("Company"),
},
{
fieldname: "from_date",
@@ -18,41 +18,41 @@
default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
},
{
- fieldname:"to_date",
+ fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
- default: frappe.datetime.get_today()
+ default: frappe.datetime.get_today(),
},
{
- fieldname:"payment_type",
+ fieldname: "payment_type",
label: __("Payment Type"),
fieldtype: "Select",
options: __("Incoming") + "\n" + __("Outgoing"),
- default: __("Incoming")
+ default: __("Incoming"),
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Link",
- "options": "DocType",
- "get_query": function() {
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Link",
+ options: "DocType",
+ get_query: function () {
return {
- filters: {"name": ["in", ["Customer", "Supplier"]]}
- }
- }
+ filters: { name: ["in", ["Customer", "Supplier"]] },
+ };
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "Dynamic Link",
- "get_options": function() {
- var party_type = frappe.query_report.get_filter_value('party_type');
- var party = frappe.query_report.get_filter_value('party');
- if(party && !party_type) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "Dynamic Link",
+ get_options: function () {
+ var party_type = frappe.query_report.get_filter_value("party_type");
+ var party = frappe.query_report.get_filter_value("party");
+ if (party && !party_type) {
frappe.throw(__("Please select Party Type first"));
}
return party_type;
- }
+ },
},
- ]
-}
+ ],
+};
diff --git a/erpnext/accounts/report/pos_register/pos_register.js b/erpnext/accounts/report/pos_register/pos_register.js
index 6e5491a..5d39796 100644
--- a/erpnext/accounts/report/pos_register/pos_register.js
+++ b/erpnext/accounts/report/pos_register/pos_register.js
@@ -1,76 +1,74 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["POS Register"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
- "width": "60px"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
- "width": "60px"
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"pos_profile",
- "label": __("POS Profile"),
- "fieldtype": "Link",
- "options": "POS Profile"
+ fieldname: "pos_profile",
+ label: __("POS Profile"),
+ fieldtype: "Link",
+ options: "POS Profile",
},
{
- "fieldname":"cashier",
- "label": __("Cashier"),
- "fieldtype": "Link",
- "options": "User"
+ fieldname: "cashier",
+ label: __("Cashier"),
+ fieldtype: "Link",
+ options: "User",
},
{
- "fieldname":"customer",
- "label": __("Customer"),
- "fieldtype": "Link",
- "options": "Customer"
+ fieldname: "customer",
+ label: __("Customer"),
+ fieldtype: "Link",
+ options: "Customer",
},
{
- "fieldname":"mode_of_payment",
- "label": __("Payment Method"),
- "fieldtype": "Link",
- "options": "Mode of Payment"
+ fieldname: "mode_of_payment",
+ label: __("Payment Method"),
+ fieldtype: "Link",
+ options: "Mode of Payment",
},
{
- "fieldname":"group_by",
- "label": __("Group by"),
- "fieldtype": "Select",
- "options": ["", "POS Profile", "Cashier", "Payment Method", "Customer"],
- "default": "POS Profile"
+ fieldname: "group_by",
+ label: __("Group by"),
+ fieldtype: "Select",
+ options: ["", "POS Profile", "Cashier", "Payment Method", "Customer"],
+ default: "POS Profile",
},
{
- "fieldname":"is_return",
- "label": __("Is Return"),
- "fieldtype": "Check"
+ fieldname: "is_return",
+ label: __("Is Return"),
+ fieldtype: "Check",
},
],
- "formatter": function(value, row, column, data, default_formatter) {
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
if (data && data.bold) {
value = value.bold();
-
}
return value;
- }
+ },
};
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
index a2f0fde..2ffd3b3 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
@@ -1,27 +1,22 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.query_reports["Profit and Loss Statement"] = $.extend(
- {},
- erpnext.financial_statements
-);
+frappe.query_reports["Profit and Loss Statement"] = $.extend({}, erpnext.financial_statements);
erpnext.utils.add_dimensions("Profit and Loss Statement", 10);
-frappe.query_reports["Profit and Loss Statement"]["filters"].push(
- {
- "fieldname": "selected_view",
- "label": __("Select View"),
- "fieldtype": "Select",
- "options": [
- { "value": "Report", "label": __("Report View") },
- { "value": "Growth", "label": __("Growth View") },
- { "value": "Margin", "label": __("Margin View") },
- ],
- "default": "Report",
- "reqd": 1
- },
-);
+frappe.query_reports["Profit and Loss Statement"]["filters"].push({
+ fieldname: "selected_view",
+ label: __("Select View"),
+ fieldtype: "Select",
+ options: [
+ { value: "Report", label: __("Report View") },
+ { value: "Growth", label: __("Growth View") },
+ { value: "Margin", label: __("Margin View") },
+ ],
+ default: "Report",
+ reqd: 1,
+});
frappe.query_reports["Profit and Loss Statement"]["filters"].push({
fieldname: "accumulated_values",
diff --git a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
index 5dd3617..69e1284 100644
--- a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
+++ b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
@@ -2,88 +2,90 @@
// For license information, please see license.txt
frappe.query_reports["Profitability Analysis"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname": "based_on",
- "label": __("Based On"),
- "fieldtype": "Select",
- "options": ["Cost Center", "Project", "Accounting Dimension"],
- "default": "Cost Center",
- "reqd": 1,
- "on_change": function(query_report){
+ fieldname: "based_on",
+ label: __("Based On"),
+ fieldtype: "Select",
+ options: ["Cost Center", "Project", "Accounting Dimension"],
+ default: "Cost Center",
+ reqd: 1,
+ on_change: function (query_report) {
let based_on = query_report.get_values().based_on;
- if(based_on!='Accounting Dimension'){
+ if (based_on != "Accounting Dimension") {
frappe.query_report.set_filter_value({
- accounting_dimension: ''
+ accounting_dimension: "",
});
}
- }
+ },
},
{
- "fieldname": "accounting_dimension",
- "label": __("Accounting Dimension"),
- "fieldtype": "Link",
- "options": "Accounting Dimension",
+ fieldname: "accounting_dimension",
+ label: __("Accounting Dimension"),
+ fieldtype: "Link",
+ options: "Accounting Dimension",
},
{
- "fieldname": "fiscal_year",
- "label": __("Fiscal Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1,
- "on_change": function(query_report) {
+ fieldname: "fiscal_year",
+ label: __("Fiscal Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
+ on_change: function (query_report) {
var fiscal_year = query_report.get_values().fiscal_year;
if (!fiscal_year) {
return;
}
- frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
frappe.query_report.set_filter_value({
from_date: fy.year_start_date,
- to_date: fy.year_end_date
+ to_date: fy.year_end_date,
});
});
- }
+ },
},
{
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
},
{
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
},
{
- "fieldname": "show_zero_values",
- "label": __("Show zero values"),
- "fieldtype": "Check"
- }
+ fieldname: "show_zero_values",
+ label: __("Show zero values"),
+ fieldtype: "Check",
+ },
],
- "formatter": function(value, row, column, data, default_formatter) {
- if (column.fieldname=="account") {
+ formatter: function (value, row, column, data, default_formatter) {
+ if (column.fieldname == "account") {
value = data.account_name;
column.link_onclick =
- "frappe.query_reports['Profitability Analysis'].open_profit_and_loss_statement(" + JSON.stringify(data) + ")";
+ "frappe.query_reports['Profitability Analysis'].open_profit_and_loss_statement(" +
+ JSON.stringify(data) +
+ ")";
column.is_tree = true;
}
value = default_formatter(value, row, column, data);
- if (!data.parent_account && data.based_on != 'project') {
+ if (!data.parent_account && data.based_on != "project") {
value = $(`<span>${value}</span>`);
var $value = $(value).css("font-weight", "bold");
if (data.warn_if_negative && data[column.fieldname] < 0) {
@@ -95,25 +97,25 @@
return value;
},
- "open_profit_and_loss_statement": function(data) {
+ open_profit_and_loss_statement: function (data) {
if (!data.account) return;
frappe.route_options = {
- "company": frappe.query_report.get_filter_value('company'),
- "from_fiscal_year": data.fiscal_year,
- "to_fiscal_year": data.fiscal_year
+ company: frappe.query_report.get_filter_value("company"),
+ from_fiscal_year: data.fiscal_year,
+ to_fiscal_year: data.fiscal_year,
};
- if(data.based_on == 'Cost Center'){
- frappe.route_options["cost_center"] = data.account
+ if (data.based_on == "Cost Center") {
+ frappe.route_options["cost_center"] = data.account;
} else {
- frappe.route_options["project"] = data.account
+ frappe.route_options["project"] = data.account;
}
frappe.set_route("query-report", "Profit and Loss Statement");
},
- "tree": true,
- "name_field": "account",
- "parent_field": "parent_account",
- "initial_depth": 3
-}
+ tree: true,
+ name_field: "account",
+ parent_field: "parent_account",
+ initial_depth: 3,
+};
diff --git a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
index feab96f..e3f90f2 100644
--- a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
+++ b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
@@ -1,8 +1,8 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function () {
frappe.query_reports["Purchase Invoice Trends"] = {
- filters: erpnext.get_purchase_trends_filters()
- }
+ filters: erpnext.get_purchase_trends_filters(),
+ };
});
diff --git a/erpnext/accounts/report/purchase_register/purchase_register.js b/erpnext/accounts/report/purchase_register/purchase_register.js
index cf11ed0..5887498 100644
--- a/erpnext/accounts/report/purchase_register/purchase_register.js
+++ b/erpnext/accounts/report/purchase_register/purchase_register.js
@@ -2,70 +2,70 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Purchase Register"] = {
- "filters": [
+ filters: [
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "width": "80"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ width: "80",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"supplier",
- "label": __("Supplier"),
- "fieldtype": "Link",
- "options": "Supplier"
+ fieldname: "supplier",
+ label: __("Supplier"),
+ fieldtype: "Link",
+ options: "Supplier",
},
{
- "fieldname":"supplier_group",
- "label": __("Supplier Group"),
- "fieldtype": "Link",
- "options": "Supplier Group"
+ fieldname: "supplier_group",
+ label: __("Supplier Group"),
+ fieldtype: "Link",
+ options: "Supplier Group",
},
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"mode_of_payment",
- "label": __("Mode of Payment"),
- "fieldtype": "Link",
- "options": "Mode of Payment"
+ fieldname: "mode_of_payment",
+ label: __("Mode of Payment"),
+ fieldtype: "Link",
+ options: "Mode of Payment",
},
{
- "fieldname":"cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center"
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
},
{
- "fieldname":"warehouse",
- "label": __("Warehouse"),
- "fieldtype": "Link",
- "options": "Warehouse"
+ fieldname: "warehouse",
+ label: __("Warehouse"),
+ fieldtype: "Link",
+ options: "Warehouse",
},
{
- "fieldname":"item_group",
- "label": __("Item Group"),
- "fieldtype": "Link",
- "options": "Item Group"
+ fieldname: "item_group",
+ label: __("Item Group"),
+ fieldtype: "Link",
+ options: "Item Group",
},
{
- "fieldname": "include_payments",
- "label": __("Show Ledger View"),
- "fieldtype": "Check",
- "default": 0
- }
- ]
-}
+ fieldname: "include_payments",
+ label: __("Show Ledger View"),
+ fieldtype: "Check",
+ default: 0,
+ },
+ ],
+};
-erpnext.utils.add_dimensions('Purchase Register', 7);
+erpnext.utils.add_dimensions("Purchase Register", 7);
diff --git a/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js b/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js
index 0ee3f57..ad97f27 100644
--- a/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js
+++ b/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js
@@ -2,7 +2,5 @@
// For license information, please see license.txt
frappe.query_reports["Received Items To Be Billed"] = {
- "filters": [
-
- ]
-}
+ filters: [],
+};
diff --git a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
index e3d43a7..292d827 100644
--- a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
+++ b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
@@ -1,8 +1,8 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function () {
frappe.query_reports["Sales Invoice Trends"] = {
- filters: erpnext.get_sales_trends_filters()
- }
+ filters: erpnext.get_sales_trends_filters(),
+ };
});
diff --git a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
index 92e6f7f..b64db9e 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
@@ -1,44 +1,44 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Sales Payment Summary"] = {
- "filters": [
+ filters: [
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
- "width": "80"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
+ width: "80",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "reqd": 1,
- "default": frappe.datetime.get_today()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"owner",
- "label": __("Owner"),
- "fieldtype": "Link",
- "options": "User",
+ fieldname: "owner",
+ label: __("Owner"),
+ fieldtype: "Link",
+ options: "User",
},
{
- "fieldname":"is_pos",
- "label": __("Show only POS"),
- "fieldtype": "Check"
+ fieldname: "is_pos",
+ label: __("Show only POS"),
+ fieldtype: "Check",
},
{
- "fieldname":"payment_detail",
- "label": __("Show Payment Details"),
- "fieldtype": "Check"
+ fieldname: "payment_detail",
+ label: __("Show Payment Details"),
+ fieldtype: "Check",
},
- ]
+ ],
};
diff --git a/erpnext/accounts/report/sales_register/sales_register.js b/erpnext/accounts/report/sales_register/sales_register.js
index 4578ac3..c4f57c8 100644
--- a/erpnext/accounts/report/sales_register/sales_register.js
+++ b/erpnext/accounts/report/sales_register/sales_register.js
@@ -2,82 +2,82 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Sales Register"] = {
- "filters": [
+ filters: [
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "width": "80"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ width: "80",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"customer",
- "label": __("Customer"),
- "fieldtype": "Link",
- "options": "Customer"
+ fieldname: "customer",
+ label: __("Customer"),
+ fieldtype: "Link",
+ options: "Customer",
},
{
- "fieldname":"customer_group",
- "label": __("Customer Group"),
- "fieldtype": "Link",
- "options": "Customer Group"
+ fieldname: "customer_group",
+ label: __("Customer Group"),
+ fieldtype: "Link",
+ options: "Customer Group",
},
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"mode_of_payment",
- "label": __("Mode of Payment"),
- "fieldtype": "Link",
- "options": "Mode of Payment"
+ fieldname: "mode_of_payment",
+ label: __("Mode of Payment"),
+ fieldtype: "Link",
+ options: "Mode of Payment",
},
{
- "fieldname":"owner",
- "label": __("Owner"),
- "fieldtype": "Link",
- "options": "User"
+ fieldname: "owner",
+ label: __("Owner"),
+ fieldtype: "Link",
+ options: "User",
},
{
- "fieldname":"cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center"
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
},
{
- "fieldname":"warehouse",
- "label": __("Warehouse"),
- "fieldtype": "Link",
- "options": "Warehouse"
+ fieldname: "warehouse",
+ label: __("Warehouse"),
+ fieldtype: "Link",
+ options: "Warehouse",
},
{
- "fieldname":"brand",
- "label": __("Brand"),
- "fieldtype": "Link",
- "options": "Brand"
+ fieldname: "brand",
+ label: __("Brand"),
+ fieldtype: "Link",
+ options: "Brand",
},
{
- "fieldname":"item_group",
- "label": __("Item Group"),
- "fieldtype": "Link",
- "options": "Item Group"
+ fieldname: "item_group",
+ label: __("Item Group"),
+ fieldtype: "Link",
+ options: "Item Group",
},
{
- "fieldname": "include_payments",
- "label": __("Show Ledger View"),
- "fieldtype": "Check",
- "default": 0
- }
- ]
-}
+ fieldname: "include_payments",
+ label: __("Show Ledger View"),
+ fieldtype: "Check",
+ default: 0,
+ },
+ ],
+};
-erpnext.utils.add_dimensions('Sales Register', 7);
+erpnext.utils.add_dimensions("Sales Register", 7);
diff --git a/erpnext/accounts/report/share_balance/share_balance.js b/erpnext/accounts/report/share_balance/share_balance.js
index ac64a0b..05d2959 100644
--- a/erpnext/accounts/report/share_balance/share_balance.js
+++ b/erpnext/accounts/report/share_balance/share_balance.js
@@ -2,21 +2,20 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Share Balance"] = {
- "filters": [
+ filters: [
{
- "fieldname":"date",
- "label": __("Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1
+ fieldname: "date",
+ label: __("Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname":"shareholder",
- "label": __("Shareholder"),
- "fieldtype": "Link",
- "options": "Shareholder"
- }
- ]
-}
+ fieldname: "shareholder",
+ label: __("Shareholder"),
+ fieldtype: "Link",
+ options: "Shareholder",
+ },
+ ],
+};
diff --git a/erpnext/accounts/report/share_ledger/share_ledger.js b/erpnext/accounts/report/share_ledger/share_ledger.js
index 4f2d2cc..0d4e3c6 100644
--- a/erpnext/accounts/report/share_ledger/share_ledger.js
+++ b/erpnext/accounts/report/share_ledger/share_ledger.js
@@ -2,21 +2,20 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Share Ledger"] = {
- "filters": [
+ filters: [
{
- "fieldname":"date",
- "label": __("Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1
+ fieldname: "date",
+ label: __("Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname":"shareholder",
- "label": __("Shareholder"),
- "fieldtype": "Link",
- "options": "Shareholder"
- }
- ]
+ fieldname: "shareholder",
+ label: __("Shareholder"),
+ fieldtype: "Link",
+ options: "Shareholder",
+ },
+ ],
};
diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js
index 8e3c8ac..5d91575 100644
--- a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js
+++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js
@@ -1,79 +1,78 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Supplier Ledger Summary"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
- "width": "60px"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
- "width": "60px"
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book"
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname":"party",
- "label": __("Supplier"),
- "fieldtype": "Link",
- "options": "Supplier",
+ fieldname: "party",
+ label: __("Supplier"),
+ fieldtype: "Link",
+ options: "Supplier",
on_change: () => {
- var party = frappe.query_report.get_filter_value('party');
+ var party = frappe.query_report.get_filter_value("party");
if (party) {
- frappe.db.get_value('Supplier', party, ["tax_id", "supplier_name"], function(value) {
- frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
- frappe.query_report.set_filter_value('supplier_name', value["supplier_name"]);
+ frappe.db.get_value("Supplier", party, ["tax_id", "supplier_name"], function (value) {
+ frappe.query_report.set_filter_value("tax_id", value["tax_id"]);
+ frappe.query_report.set_filter_value("supplier_name", value["supplier_name"]);
});
} else {
- frappe.query_report.set_filter_value('tax_id', "");
- frappe.query_report.set_filter_value('supplier_name', "");
+ frappe.query_report.set_filter_value("tax_id", "");
+ frappe.query_report.set_filter_value("supplier_name", "");
}
- }
+ },
},
{
- "fieldname":"supplier_group",
- "label": __("Supplier Group"),
- "fieldtype": "Link",
- "options": "Supplier Group"
+ fieldname: "supplier_group",
+ label: __("Supplier Group"),
+ fieldtype: "Link",
+ options: "Supplier Group",
},
{
- "fieldname":"payment_terms_template",
- "label": __("Payment Terms Template"),
- "fieldtype": "Link",
- "options": "Payment Terms Template"
+ fieldname: "payment_terms_template",
+ label: __("Payment Terms Template"),
+ fieldtype: "Link",
+ options: "Payment Terms Template",
},
{
- "fieldname":"tax_id",
- "label": __("Tax Id"),
- "fieldtype": "Data",
- "hidden": 1
+ fieldname: "tax_id",
+ label: __("Tax Id"),
+ fieldtype: "Data",
+ hidden: 1,
},
{
- "fieldname":"supplier_name",
- "label": __("Supplier Name"),
- "fieldtype": "Data",
- "hidden": 1
- }
- ]
+ fieldname: "supplier_name",
+ label: __("Supplier Name"),
+ fieldtype: "Data",
+ hidden: 1,
+ },
+ ],
};
diff --git a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js
index 8808165..bdc98ab 100644
--- a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js
+++ b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js
@@ -1,62 +1,61 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Tax Withholding Details"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_default('company')
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_default("company"),
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Select",
- "options": ["Supplier", "Customer"],
- "reqd": 1,
- "default": "Supplier",
- "on_change": function(){
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Select",
+ options: ["Supplier", "Customer"],
+ reqd: 1,
+ default: "Supplier",
+ on_change: function () {
frappe.query_report.set_filter_value("party", "");
- }
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "Dynamic Link",
- "get_options": function() {
- var party_type = frappe.query_report.get_filter_value('party_type');
- var party = frappe.query_report.get_filter_value('party');
- if(party && !party_type) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "Dynamic Link",
+ get_options: function () {
+ var party_type = frappe.query_report.get_filter_value("party_type");
+ var party = frappe.query_report.get_filter_value("party");
+ if (party && !party_type) {
frappe.throw(__("Please select Party Type first"));
}
return party_type;
},
- "get_query": function() {
+ get_query: function () {
return {
- "filters": {
- "tax_withholding_category": ["!=",""],
- }
- }
+ filters: {
+ tax_withholding_category: ["!=", ""],
+ },
+ };
},
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
- "width": "60px"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
- "width": "60px"
- }
- ]
-}
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
+ width: "60px",
+ },
+ ],
+};
diff --git a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js
index a0be1b5..3db1f29 100644
--- a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js
+++ b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js
@@ -1,62 +1,61 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["TDS Computation Summary"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_default('company')
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_default("company"),
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Select",
- "options": ["Supplier", "Customer"],
- "reqd": 1,
- "default": "Supplier",
- "on_change": function(){
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Select",
+ options: ["Supplier", "Customer"],
+ reqd: 1,
+ default: "Supplier",
+ on_change: function () {
frappe.query_report.set_filter_value("party", "");
- }
+ },
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "Dynamic Link",
- "get_options": function() {
- var party_type = frappe.query_report.get_filter_value('party_type');
- var party = frappe.query_report.get_filter_value('party');
- if(party && !party_type) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "Dynamic Link",
+ get_options: function () {
+ var party_type = frappe.query_report.get_filter_value("party_type");
+ var party = frappe.query_report.get_filter_value("party");
+ if (party && !party_type) {
frappe.throw(__("Please select Party Type first"));
}
return party_type;
},
- "get_query": function() {
+ get_query: function () {
return {
- "filters": {
- "tax_withholding_category": ["!=",""],
- }
- }
+ filters: {
+ tax_withholding_category: ["!=", ""],
+ },
+ };
},
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "reqd": 1,
- "width": "60px"
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ reqd: 1,
+ width: "60px",
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1,
- "width": "60px"
- }
- ]
-}
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
+ width: "60px",
+ },
+ ],
+};
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.js b/erpnext/accounts/report/trial_balance/trial_balance.js
index 5374ac1..2f70190 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.js
+++ b/erpnext/accounts/report/trial_balance/trial_balance.js
@@ -2,121 +2,121 @@
// License: GNU General Public License v3. See license.txt
frappe.query_reports["Trial Balance"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname": "fiscal_year",
- "label": __("Fiscal Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1,
- "on_change": function(query_report) {
+ fieldname: "fiscal_year",
+ label: __("Fiscal Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
+ on_change: function (query_report) {
var fiscal_year = query_report.get_values().fiscal_year;
if (!fiscal_year) {
return;
}
- frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
frappe.query_report.set_filter_value({
from_date: fy.year_start_date,
- to_date: fy.year_end_date
+ to_date: fy.year_end_date,
});
});
- }
+ },
},
{
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
},
{
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
},
{
- "fieldname": "cost_center",
- "label": __("Cost Center"),
- "fieldtype": "Link",
- "options": "Cost Center",
- "get_query": function() {
- var company = frappe.query_report.get_filter_value('company');
+ fieldname: "cost_center",
+ label: __("Cost Center"),
+ fieldtype: "Link",
+ options: "Cost Center",
+ get_query: function () {
+ var company = frappe.query_report.get_filter_value("company");
return {
- "doctype": "Cost Center",
- "filters": {
- "company": company,
- }
- }
- }
+ doctype: "Cost Center",
+ filters: {
+ company: company,
+ },
+ };
+ },
},
{
- "fieldname": "project",
- "label": __("Project"),
- "fieldtype": "Link",
- "options": "Project"
+ fieldname: "project",
+ label: __("Project"),
+ fieldtype: "Link",
+ options: "Project",
},
{
- "fieldname": "finance_book",
- "label": __("Finance Book"),
- "fieldtype": "Link",
- "options": "Finance Book",
+ fieldname: "finance_book",
+ label: __("Finance Book"),
+ fieldtype: "Link",
+ options: "Finance Book",
},
{
- "fieldname": "presentation_currency",
- "label": __("Currency"),
- "fieldtype": "Select",
- "options": erpnext.get_presentation_currency_list()
+ fieldname: "presentation_currency",
+ label: __("Currency"),
+ fieldtype: "Select",
+ options: erpnext.get_presentation_currency_list(),
},
{
- "fieldname": "with_period_closing_entry_for_opening",
- "label": __("With Period Closing Entry For Opening Balances"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "with_period_closing_entry_for_opening",
+ label: __("With Period Closing Entry For Opening Balances"),
+ fieldtype: "Check",
+ default: 1,
},
{
- "fieldname": "with_period_closing_entry_for_current_period",
- "label": __("Period Closing Entry For Current Period"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "with_period_closing_entry_for_current_period",
+ label: __("Period Closing Entry For Current Period"),
+ fieldtype: "Check",
+ default: 1,
},
{
- "fieldname": "show_zero_values",
- "label": __("Show zero values"),
- "fieldtype": "Check"
+ fieldname: "show_zero_values",
+ label: __("Show zero values"),
+ fieldtype: "Check",
},
{
- "fieldname": "show_unclosed_fy_pl_balances",
- "label": __("Show unclosed fiscal year's P&L balances"),
- "fieldtype": "Check"
+ fieldname: "show_unclosed_fy_pl_balances",
+ label: __("Show unclosed fiscal year's P&L balances"),
+ fieldtype: "Check",
},
{
- "fieldname": "include_default_book_entries",
- "label": __("Include Default FB Entries"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "include_default_book_entries",
+ label: __("Include Default FB Entries"),
+ fieldtype: "Check",
+ default: 1,
},
{
- "fieldname": "show_net_values",
- "label": __("Show net values in opening and closing columns"),
- "fieldtype": "Check",
- "default": 1
- }
+ fieldname: "show_net_values",
+ label: __("Show net values in opening and closing columns"),
+ fieldtype: "Check",
+ default: 1,
+ },
],
- "formatter": erpnext.financial_statements.formatter,
- "tree": true,
- "name_field": "account",
- "parent_field": "parent_account",
- "initial_depth": 3
-}
+ formatter: erpnext.financial_statements.formatter,
+ tree: true,
+ name_field: "account",
+ parent_field: "parent_account",
+ initial_depth: 3,
+};
-erpnext.utils.add_dimensions('Trial Balance', 6);
+erpnext.utils.add_dimensions("Trial Balance", 6);
diff --git a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
index 33c644a..50578d3 100644
--- a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
+++ b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
@@ -2,88 +2,88 @@
// For license information, please see license.txt
frappe.query_reports["Trial Balance for Party"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname": "fiscal_year",
- "label": __("Fiscal Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "reqd": 1,
- "on_change": function(query_report) {
+ fieldname: "fiscal_year",
+ label: __("Fiscal Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ reqd: 1,
+ on_change: function (query_report) {
var fiscal_year = query_report.get_values().fiscal_year;
if (!fiscal_year) {
return;
}
- frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+ frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
frappe.query_report.set_filter_value({
from_date: fy.year_start_date,
- to_date: fy.year_end_date
+ to_date: fy.year_end_date,
});
});
- }
+ },
},
{
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
},
{
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
},
{
- "fieldname":"party_type",
- "label": __("Party Type"),
- "fieldtype": "Link",
- "options": "Party Type",
- "default": "Customer",
- "reqd": 1
+ fieldname: "party_type",
+ label: __("Party Type"),
+ fieldtype: "Link",
+ options: "Party Type",
+ default: "Customer",
+ reqd: 1,
},
{
- "fieldname":"party",
- "label": __("Party"),
- "fieldtype": "Dynamic Link",
- "get_options": function() {
- var party_type = frappe.query_report.get_filter_value('party_type');
- var party = frappe.query_report.get_filter_value('party');
- if(party && !party_type) {
+ fieldname: "party",
+ label: __("Party"),
+ fieldtype: "Dynamic Link",
+ get_options: function () {
+ var party_type = frappe.query_report.get_filter_value("party_type");
+ var party = frappe.query_report.get_filter_value("party");
+ if (party && !party_type) {
frappe.throw(__("Please select Party Type first"));
}
return party_type;
- }
+ },
},
{
- "fieldname": "account",
- "label": __("Account"),
- "fieldtype": "Link",
- "options": "Account",
- "get_query": function() {
- var company = frappe.query_report.get_filter_value('company');
+ fieldname: "account",
+ label: __("Account"),
+ fieldtype: "Link",
+ options: "Account",
+ get_query: function () {
+ var company = frappe.query_report.get_filter_value("company");
return {
- "doctype": "Account",
- "filters": {
- "company": company,
- }
- }
- }
+ doctype: "Account",
+ filters: {
+ company: company,
+ },
+ };
+ },
},
{
- "fieldname": "show_zero_values",
- "label": __("Show zero values"),
- "fieldtype": "Check"
- }
- ]
-}
+ fieldname: "show_zero_values",
+ label: __("Show zero values"),
+ fieldtype: "Check",
+ },
+ ],
+};
diff --git a/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js b/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js
index f7ab029..03ebf73 100644
--- a/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js
+++ b/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js
@@ -1,28 +1,27 @@
// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Voucher-wise Balance"] = {
- "filters": [
- {
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company"
- },
- {
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- "width": "60px"
- },
- {
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "width": "60px"
- },
- ]
+ filters: [
+ {
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ },
+ {
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ width: "60px",
+ },
+ {
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ width: "60px",
+ },
+ ],
};
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index d4cb57b..0755f2e 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -490,7 +490,9 @@
# For payments with `Advance` in separate account feature enabled, only new ledger entries are posted for each reference.
# No need to cancel/delete payment ledger entries
- if not (voucher_type == "Payment Entry" and doc.book_advance_payments_in_separate_party_account):
+ if voucher_type == "Payment Entry" and doc.book_advance_payments_in_separate_party_account:
+ doc.make_advance_gl_entries(cancel=1)
+ else:
_delete_pl_entries(voucher_type, voucher_no)
for entry in entries:
@@ -501,14 +503,16 @@
# update ref in advance entry
if voucher_type == "Journal Entry":
- referenced_row = update_reference_in_journal_entry(entry, doc, do_not_save=False)
+ referenced_row, update_advance_paid = update_reference_in_journal_entry(
+ entry, doc, do_not_save=False
+ )
# advance section in sales/purchase invoice and reconciliation tool,both pass on exchange gain/loss
# amount and account in args
# referenced_row is used to deduplicate gain/loss journal
entry.update({"referenced_row": referenced_row})
doc.make_exchange_gain_loss_journal([entry], dimensions_dict)
else:
- referenced_row = update_reference_in_payment_entry(
+ referenced_row, update_advance_paid = update_reference_in_payment_entry(
entry,
doc,
do_not_save=True,
@@ -522,7 +526,8 @@
if voucher_type == "Payment Entry" and doc.book_advance_payments_in_separate_party_account:
# both ledgers must be posted to for `Advance` in separate account feature
- doc.make_advance_gl_entries(referenced_row, update_outstanding="No")
+ # TODO: find a more efficient way post only for the new linked vouchers
+ doc.make_advance_gl_entries()
else:
gl_map = doc.build_gl_map()
create_payment_ledger_entry(gl_map, update_outstanding="No", cancel=0, adv_adj=1)
@@ -532,6 +537,10 @@
update_voucher_outstanding(
entry.against_voucher_type, entry.against_voucher, entry.account, entry.party_type, entry.party
)
+ # update advance paid in Advance Receivable/Payable doctypes
+ if update_advance_paid:
+ for t, n in update_advance_paid:
+ frappe.get_doc(t, n).set_total_advance_paid()
frappe.flags.ignore_party_validation = False
@@ -621,11 +630,12 @@
jv_detail = journal_entry.get("accounts", {"name": d["voucher_detail_no"]})[0]
# Update Advance Paid in SO/PO since they might be getting unlinked
+ update_advance_paid = []
advance_payment_doctypes = frappe.get_hooks(
"advance_payment_receivable_doctypes"
) + frappe.get_hooks("advance_payment_payable_doctypes")
if jv_detail.get("reference_type") in advance_payment_doctypes:
- frappe.get_doc(jv_detail.reference_type, jv_detail.reference_name).set_total_advance_paid()
+ update_advance_paid.append((jv_detail.reference_type, jv_detail.reference_name))
if flt(d["unadjusted_amount"]) - flt(d["allocated_amount"]) != 0:
# adjust the unreconciled balance
@@ -674,7 +684,7 @@
if not do_not_save:
journal_entry.save(ignore_permissions=True)
- return new_row.name
+ return new_row.name, update_advance_paid
def update_reference_in_payment_entry(
@@ -693,6 +703,7 @@
"account": d.account,
"dimensions": d.dimensions,
}
+ update_advance_paid = []
if d.voucher_detail_no:
existing_row = payment_entry.get("references", {"name": d["voucher_detail_no"]})[0]
@@ -702,9 +713,7 @@
"advance_payment_receivable_doctypes"
) + frappe.get_hooks("advance_payment_payable_doctypes")
if existing_row.get("reference_doctype") in advance_payment_doctypes:
- frappe.get_doc(
- existing_row.reference_doctype, existing_row.reference_name
- ).set_total_advance_paid()
+ update_advance_paid.append((existing_row.reference_doctype, existing_row.reference_name))
if d.allocated_amount <= existing_row.allocated_amount:
existing_row.allocated_amount -= d.allocated_amount
@@ -734,7 +743,7 @@
if not do_not_save:
payment_entry.save(ignore_permissions=True)
- return row
+ return row, update_advance_paid
def cancel_exchange_gain_loss_journal(
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 673fe54..6dbb53a 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -4,136 +4,175 @@
frappe.provide("erpnext.asset");
frappe.provide("erpnext.accounts.dimensions");
-frappe.ui.form.on('Asset', {
- onload: function(frm) {
- frm.set_query("item_code", function() {
+frappe.ui.form.on("Asset", {
+ onload: function (frm) {
+ frm.set_query("item_code", function () {
return {
- "filters": {
- "is_fixed_asset": 1,
- "is_stock_item": 0
- }
+ filters: {
+ is_fixed_asset: 1,
+ is_stock_item: 0,
+ },
};
});
- frm.set_query("warehouse", function() {
+ frm.set_query("warehouse", function () {
return {
- "filters": {
- "company": frm.doc.company,
- "is_group": 0
- }
+ filters: {
+ company: frm.doc.company,
+ is_group: 0,
+ },
};
});
- frm.set_query("department", function() {
+ frm.set_query("department", function () {
return {
- "filters": {
- "company": frm.doc.company,
- }
+ filters: {
+ company: frm.doc.company,
+ },
};
});
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- company: function(frm) {
+ company: function (frm) {
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
- setup: function(frm) {
- frm.ignore_doctypes_on_cancel_all = ['Journal Entry'];
+ setup: function (frm) {
+ frm.ignore_doctypes_on_cancel_all = ["Journal Entry"];
frm.make_methods = {
- 'Asset Movement': () => {
+ "Asset Movement": () => {
frappe.call({
- method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
- freeze: true,
- args:{
- "assets": [{ name: cur_frm.doc.name }]
- },
- callback: function (r) {
- if (r.message) {
- var doc = frappe.model.sync(r.message)[0];
- frappe.set_route("Form", doc.doctype, doc.name);
- }
- }
- });
+ method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
+ freeze: true,
+ args: {
+ assets: [{ name: cur_frm.doc.name }],
+ },
+ callback: function (r) {
+ if (r.message) {
+ var doc = frappe.model.sync(r.message)[0];
+ frappe.set_route("Form", doc.doctype, doc.name);
+ }
+ },
+ });
},
- }
+ };
frm.set_query("purchase_receipt", (doc) => {
return {
query: "erpnext.controllers.queries.get_purchase_receipts",
- filters: { item_code: doc.item_code }
- }
+ filters: { item_code: doc.item_code },
+ };
});
frm.set_query("purchase_invoice", (doc) => {
return {
query: "erpnext.controllers.queries.get_purchase_invoices",
- filters: { item_code: doc.item_code }
- }
+ filters: { item_code: doc.item_code },
+ };
});
},
- refresh: function(frm) {
+ refresh: function (frm) {
frappe.ui.form.trigger("Asset", "is_existing_asset");
frm.toggle_display("next_depreciation_date", frm.doc.docstatus < 1);
- if (frm.doc.docstatus==1) {
+ if (frm.doc.docstatus == 1) {
if (in_list(["Submitted", "Partially Depreciated", "Fully Depreciated"], frm.doc.status)) {
- frm.add_custom_button(__("Transfer Asset"), function() {
- erpnext.asset.transfer_asset(frm);
- }, __("Manage"));
+ frm.add_custom_button(
+ __("Transfer Asset"),
+ function () {
+ erpnext.asset.transfer_asset(frm);
+ },
+ __("Manage")
+ );
- frm.add_custom_button(__("Scrap Asset"), function() {
- erpnext.asset.scrap_asset(frm);
- }, __("Manage"));
+ frm.add_custom_button(
+ __("Scrap Asset"),
+ function () {
+ erpnext.asset.scrap_asset(frm);
+ },
+ __("Manage")
+ );
- frm.add_custom_button(__("Sell Asset"), function() {
- frm.trigger("make_sales_invoice");
- }, __("Manage"));
-
- } else if (frm.doc.status=='Scrapped') {
- frm.add_custom_button(__("Restore Asset"), function() {
- erpnext.asset.restore_asset(frm);
- }, __("Manage"));
+ frm.add_custom_button(
+ __("Sell Asset"),
+ function () {
+ frm.trigger("make_sales_invoice");
+ },
+ __("Manage")
+ );
+ } else if (frm.doc.status == "Scrapped") {
+ frm.add_custom_button(
+ __("Restore Asset"),
+ function () {
+ erpnext.asset.restore_asset(frm);
+ },
+ __("Manage")
+ );
}
if (frm.doc.maintenance_required && !frm.doc.maintenance_schedule) {
- frm.add_custom_button(__("Maintain Asset"), function() {
- frm.trigger("create_asset_maintenance");
- }, __("Manage"));
+ frm.add_custom_button(
+ __("Maintain Asset"),
+ function () {
+ frm.trigger("create_asset_maintenance");
+ },
+ __("Manage")
+ );
}
- frm.add_custom_button(__("Repair Asset"), function() {
- frm.trigger("create_asset_repair");
- }, __("Manage"));
+ frm.add_custom_button(
+ __("Repair Asset"),
+ function () {
+ frm.trigger("create_asset_repair");
+ },
+ __("Manage")
+ );
- frm.add_custom_button(__("Split Asset"), function() {
- frm.trigger("split_asset");
- }, __("Manage"));
+ frm.add_custom_button(
+ __("Split Asset"),
+ function () {
+ frm.trigger("split_asset");
+ },
+ __("Manage")
+ );
- if (frm.doc.status != 'Fully Depreciated') {
- frm.add_custom_button(__("Adjust Asset Value"), function() {
- frm.trigger("create_asset_value_adjustment");
- }, __("Manage"));
+ if (frm.doc.status != "Fully Depreciated") {
+ frm.add_custom_button(
+ __("Adjust Asset Value"),
+ function () {
+ frm.trigger("create_asset_value_adjustment");
+ },
+ __("Manage")
+ );
}
if (!frm.doc.calculate_depreciation) {
- frm.add_custom_button(__("Create Depreciation Entry"), function() {
- frm.trigger("make_journal_entry");
- }, __("Manage"));
+ frm.add_custom_button(
+ __("Create Depreciation Entry"),
+ function () {
+ frm.trigger("make_journal_entry");
+ },
+ __("Manage")
+ );
}
if (frm.doc.purchase_receipt || !frm.doc.is_existing_asset) {
- frm.add_custom_button(__("View General Ledger"), function() {
- frappe.route_options = {
- "voucher_no": frm.doc.name,
- "from_date": frm.doc.available_for_use_date,
- "to_date": frm.doc.available_for_use_date,
- "company": frm.doc.company
- };
- frappe.set_route("query-report", "General Ledger");
- }, __("Manage"));
+ frm.add_custom_button(
+ __("View General Ledger"),
+ function () {
+ frappe.route_options = {
+ voucher_no: frm.doc.name,
+ from_date: frm.doc.available_for_use_date,
+ to_date: frm.doc.available_for_use_date,
+ company: frm.doc.company,
+ };
+ frappe.set_route("query-report", "General Ledger");
+ },
+ __("Manage")
+ );
}
if (frm.doc.depr_entry_posting_status === "Failed") {
@@ -149,10 +188,10 @@
frm.toggle_reqd("finance_books", frm.doc.calculate_depreciation);
if (frm.doc.is_composite_asset && !frm.doc.capitalized_in) {
- $('.primary-action').prop('hidden', true);
- $('.form-message').text('Capitalize this asset to confirm');
+ $(".primary-action").prop("hidden", true);
+ $(".form-message").text("Capitalize this asset to confirm");
- frm.add_custom_button(__("Capitalize Asset"), function() {
+ frm.add_custom_button(__("Capitalize Asset"), function () {
frm.trigger("create_asset_capitalization");
});
}
@@ -172,81 +211,89 @@
frm.dashboard.set_headline_alert(alert);
},
- toggle_reference_doc: function(frm) {
+ toggle_reference_doc: function (frm) {
if (frm.doc.purchase_receipt && frm.doc.purchase_invoice && frm.doc.docstatus === 1) {
- frm.set_df_property('purchase_invoice', 'read_only', 1);
- frm.set_df_property('purchase_receipt', 'read_only', 1);
- }
- else if (frm.doc.is_existing_asset || frm.doc.is_composite_asset) {
- frm.toggle_reqd('purchase_receipt', 0);
- frm.toggle_reqd('purchase_invoice', 0);
- }
- else if (frm.doc.purchase_receipt) {
+ frm.set_df_property("purchase_invoice", "read_only", 1);
+ frm.set_df_property("purchase_receipt", "read_only", 1);
+ } else if (frm.doc.is_existing_asset || frm.doc.is_composite_asset) {
+ frm.toggle_reqd("purchase_receipt", 0);
+ frm.toggle_reqd("purchase_invoice", 0);
+ } else if (frm.doc.purchase_receipt) {
// if purchase receipt link is set then set PI disabled
- frm.toggle_reqd('purchase_invoice', 0);
- frm.set_df_property('purchase_invoice', 'read_only', 1);
- }
- else if (frm.doc.purchase_invoice) {
+ frm.toggle_reqd("purchase_invoice", 0);
+ frm.set_df_property("purchase_invoice", "read_only", 1);
+ } else if (frm.doc.purchase_invoice) {
// if purchase invoice link is set then set PR disabled
- frm.toggle_reqd('purchase_receipt', 0);
- frm.set_df_property('purchase_receipt', 'read_only', 1);
- }
- else {
- frm.toggle_reqd('purchase_receipt', 1);
- frm.set_df_property('purchase_receipt', 'read_only', 0);
- frm.toggle_reqd('purchase_invoice', 1);
- frm.set_df_property('purchase_invoice', 'read_only', 0);
+ frm.toggle_reqd("purchase_receipt", 0);
+ frm.set_df_property("purchase_receipt", "read_only", 1);
+ } else {
+ frm.toggle_reqd("purchase_receipt", 1);
+ frm.set_df_property("purchase_receipt", "read_only", 0);
+ frm.toggle_reqd("purchase_invoice", 1);
+ frm.set_df_property("purchase_invoice", "read_only", 0);
}
},
- make_journal_entry: function(frm) {
+ make_journal_entry: function (frm) {
frappe.call({
method: "erpnext.assets.doctype.asset.asset.make_journal_entry",
args: {
- asset_name: frm.doc.name
+ asset_name: frm.doc.name,
},
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
}
- }
- })
+ },
+ });
},
- render_depreciation_schedule_view: function(frm, asset_depr_schedule_doc) {
+ render_depreciation_schedule_view: function (frm, asset_depr_schedule_doc) {
let wrapper = $(frm.fields_dict["depreciation_schedule_view"].wrapper).empty();
let data = [];
asset_depr_schedule_doc.depreciation_schedule.forEach((sch) => {
const row = [
- sch['idx'],
- frappe.format(sch['schedule_date'], { fieldtype: 'Date' }),
- frappe.format(sch['depreciation_amount'], { fieldtype: 'Currency' }),
- frappe.format(sch['accumulated_depreciation_amount'], { fieldtype: 'Currency' }),
- sch['journal_entry'] || '',
+ sch["idx"],
+ frappe.format(sch["schedule_date"], { fieldtype: "Date" }),
+ frappe.format(sch["depreciation_amount"], { fieldtype: "Currency" }),
+ frappe.format(sch["accumulated_depreciation_amount"], { fieldtype: "Currency" }),
+ sch["journal_entry"] || "",
];
if (asset_depr_schedule_doc.shift_based) {
- row.push(sch['shift']);
+ row.push(sch["shift"]);
}
data.push(row);
});
let columns = [
- {name: __("No."), editable: false, resizable: false, format: value => value, width: 60},
- {name: __("Schedule Date"), editable: false, resizable: false, width: 270},
- {name: __("Depreciation Amount"), editable: false, resizable: false, width: 164},
- {name: __("Accumulated Depreciation Amount"), editable: false, resizable: false, width: 164},
+ { name: __("No."), editable: false, resizable: false, format: (value) => value, width: 60 },
+ { name: __("Schedule Date"), editable: false, resizable: false, width: 270 },
+ { name: __("Depreciation Amount"), editable: false, resizable: false, width: 164 },
+ { name: __("Accumulated Depreciation Amount"), editable: false, resizable: false, width: 164 },
];
if (asset_depr_schedule_doc.shift_based) {
- columns.push({name: __("Journal Entry"), editable: false, resizable: false, format: value => `<a href="/app/journal-entry/${value}">${value}</a>`, width: 245});
- columns.push({name: __("Shift"), editable: false, resizable: false, width: 59});
+ columns.push({
+ name: __("Journal Entry"),
+ editable: false,
+ resizable: false,
+ format: (value) => `<a href="/app/journal-entry/${value}">${value}</a>`,
+ width: 245,
+ });
+ columns.push({ name: __("Shift"), editable: false, resizable: false, width: 59 });
} else {
- columns.push({name: __("Journal Entry"), editable: false, resizable: false, format: value => `<a href="/app/journal-entry/${value}">${value}</a>`, width: 304});
+ columns.push({
+ name: __("Journal Entry"),
+ editable: false,
+ resizable: false,
+ format: (value) => `<a href="/app/journal-entry/${value}">${value}</a>`,
+ width: 304,
+ });
}
let datatable = new frappe.DataTable(wrapper.get(0), {
@@ -255,55 +302,73 @@
layout: "fluid",
serialNoColumn: false,
checkboxColumn: true,
- cellHeight: 35
+ cellHeight: 35,
});
- datatable.style.setStyle(`.dt-scrollable`, {'font-size': '0.75rem', 'margin-bottom': '1rem', 'margin-left': '0.35rem', 'margin-right': '0.35rem'});
- datatable.style.setStyle(`.dt-header`, {'margin-left': '0.35rem', 'margin-right': '0.35rem'});
- datatable.style.setStyle(`.dt-cell--header .dt-cell__content`, {'color': 'var(--gray-600)', 'font-size': 'var(--text-sm)'});
- datatable.style.setStyle(`.dt-cell`, {'color': 'var(--text-color)'});
- datatable.style.setStyle(`.dt-cell--col-1`, {'text-align': 'center'});
- datatable.style.setStyle(`.dt-cell--col-2`, {'font-weight': 600});
- datatable.style.setStyle(`.dt-cell--col-3`, {'font-weight': 600});
+ datatable.style.setStyle(`.dt-scrollable`, {
+ "font-size": "0.75rem",
+ "margin-bottom": "1rem",
+ "margin-left": "0.35rem",
+ "margin-right": "0.35rem",
+ });
+ datatable.style.setStyle(`.dt-header`, { "margin-left": "0.35rem", "margin-right": "0.35rem" });
+ datatable.style.setStyle(`.dt-cell--header .dt-cell__content`, {
+ color: "var(--gray-600)",
+ "font-size": "var(--text-sm)",
+ });
+ datatable.style.setStyle(`.dt-cell`, { color: "var(--text-color)" });
+ datatable.style.setStyle(`.dt-cell--col-1`, { "text-align": "center" });
+ datatable.style.setStyle(`.dt-cell--col-2`, { "font-weight": 600 });
+ datatable.style.setStyle(`.dt-cell--col-3`, { "font-weight": 600 });
},
- setup_chart_and_depr_schedule_view: async function(frm) {
- if(frm.doc.finance_books.length > 1) {
- return
+ setup_chart_and_depr_schedule_view: async function (frm) {
+ if (frm.doc.finance_books.length > 1) {
+ return;
}
- var x_intervals = [frappe.format(frm.doc.purchase_date, { fieldtype: 'Date' })];
+ var x_intervals = [frappe.format(frm.doc.purchase_date, { fieldtype: "Date" })];
var asset_values = [frm.doc.gross_purchase_amount];
- if(frm.doc.calculate_depreciation) {
- if(frm.doc.opening_accumulated_depreciation) {
+ if (frm.doc.calculate_depreciation) {
+ if (frm.doc.opening_accumulated_depreciation) {
var depreciation_date = frappe.datetime.add_months(
frm.doc.finance_books[0].depreciation_start_date,
-1 * frm.doc.finance_books[0].frequency_of_depreciation
);
- x_intervals.push(frappe.format(depreciation_date, { fieldtype: 'Date' }));
- asset_values.push(flt(frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation, precision('gross_purchase_amount')));
+ x_intervals.push(frappe.format(depreciation_date, { fieldtype: "Date" }));
+ asset_values.push(
+ flt(
+ frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation,
+ precision("gross_purchase_amount")
+ )
+ );
}
- let asset_depr_schedule_doc = (await frappe.call(
- "erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule.get_asset_depr_schedule_doc",
- {
- asset_name: frm.doc.name,
- status: "Active",
- finance_book: frm.doc.finance_books[0].finance_book || null
- }
- )).message;
+ let asset_depr_schedule_doc = (
+ await frappe.call(
+ "erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule.get_asset_depr_schedule_doc",
+ {
+ asset_name: frm.doc.name,
+ status: "Active",
+ finance_book: frm.doc.finance_books[0].finance_book || null,
+ }
+ )
+ ).message;
- $.each(asset_depr_schedule_doc.depreciation_schedule || [], function(i, v) {
- x_intervals.push(frappe.format(v.schedule_date, { fieldtype: 'Date' }));
- var asset_value = flt(frm.doc.gross_purchase_amount - v.accumulated_depreciation_amount, precision('gross_purchase_amount'));
- if(v.journal_entry) {
+ $.each(asset_depr_schedule_doc.depreciation_schedule || [], function (i, v) {
+ x_intervals.push(frappe.format(v.schedule_date, { fieldtype: "Date" }));
+ var asset_value = flt(
+ frm.doc.gross_purchase_amount - v.accumulated_depreciation_amount,
+ precision("gross_purchase_amount")
+ );
+ if (v.journal_entry) {
asset_values.push(asset_value);
} else {
if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
asset_values.push(null);
} else {
- asset_values.push(asset_value)
+ asset_values.push(asset_value);
}
}
});
@@ -311,25 +376,32 @@
frm.toggle_display(["depreciation_schedule_view"], 1);
frm.events.render_depreciation_schedule_view(frm, asset_depr_schedule_doc);
} else {
- if(frm.doc.opening_accumulated_depreciation) {
- x_intervals.push(frappe.format(frm.doc.creation.split(" ")[0], { fieldtype: 'Date' }));
- asset_values.push(flt(frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation, precision('gross_purchase_amount')));
+ if (frm.doc.opening_accumulated_depreciation) {
+ x_intervals.push(frappe.format(frm.doc.creation.split(" ")[0], { fieldtype: "Date" }));
+ asset_values.push(
+ flt(
+ frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation,
+ precision("gross_purchase_amount")
+ )
+ );
}
- let depr_entries = (await frappe.call({
- method: "get_manual_depreciation_entries",
- doc: frm.doc,
- })).message;
+ let depr_entries = (
+ await frappe.call({
+ method: "get_manual_depreciation_entries",
+ doc: frm.doc,
+ })
+ ).message;
- $.each(depr_entries || [], function(i, v) {
- x_intervals.push(frappe.format(v.posting_date, { fieldtype: 'Date' }));
- let last_asset_value = asset_values[asset_values.length - 1]
- asset_values.push(flt(last_asset_value - v.value, precision('gross_purchase_amount')));
+ $.each(depr_entries || [], function (i, v) {
+ x_intervals.push(frappe.format(v.posting_date, { fieldtype: "Date" }));
+ let last_asset_value = asset_values[asset_values.length - 1];
+ asset_values.push(flt(last_asset_value - v.value, precision("gross_purchase_amount")));
});
}
- if(in_list(["Scrapped", "Sold"], frm.doc.status)) {
- x_intervals.push(frappe.format(frm.doc.disposal_date, { fieldtype: 'Date' }));
+ if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
+ x_intervals.push(frappe.format(frm.doc.disposal_date, { fieldtype: "Date" }));
asset_values.push(0);
}
@@ -337,145 +409,146 @@
title: "Asset Value",
data: {
labels: x_intervals,
- datasets: [{
- color: 'green',
- values: asset_values,
- formatted: asset_values.map(d => d?.toFixed(2))
- }]
+ datasets: [
+ {
+ color: "green",
+ values: asset_values,
+ formatted: asset_values.map((d) => d?.toFixed(2)),
+ },
+ ],
},
- type: 'line'
+ type: "line",
});
},
-
- item_code: function(frm) {
- if(frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
- frm.trigger('set_finance_book');
+ item_code: function (frm) {
+ if (frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
+ frm.trigger("set_finance_book");
} else {
- frm.set_value('finance_books', []);
+ frm.set_value("finance_books", []);
}
},
- set_finance_book: function(frm) {
+ set_finance_book: function (frm) {
frappe.call({
method: "erpnext.assets.doctype.asset.asset.get_item_details",
args: {
item_code: frm.doc.item_code,
asset_category: frm.doc.asset_category,
- gross_purchase_amount: frm.doc.gross_purchase_amount
+ gross_purchase_amount: frm.doc.gross_purchase_amount,
},
- callback: function(r, rt) {
- if(r.message) {
- frm.set_value('finance_books', r.message);
+ callback: function (r, rt) {
+ if (r.message) {
+ frm.set_value("finance_books", r.message);
}
- }
- })
+ },
+ });
},
- is_existing_asset: function(frm) {
+ is_existing_asset: function (frm) {
frm.trigger("toggle_reference_doc");
},
- is_composite_asset: function(frm) {
- if(frm.doc.is_composite_asset) {
- frm.set_value('gross_purchase_amount', 0);
- frm.set_df_property('gross_purchase_amount', 'read_only', 1);
+ is_composite_asset: function (frm) {
+ if (frm.doc.is_composite_asset) {
+ frm.set_value("gross_purchase_amount", 0);
+ frm.set_df_property("gross_purchase_amount", "read_only", 1);
} else {
- frm.set_df_property('gross_purchase_amount', 'read_only', 0);
+ frm.set_df_property("gross_purchase_amount", "read_only", 0);
}
frm.trigger("toggle_reference_doc");
},
- make_sales_invoice: function(frm) {
+ make_sales_invoice: function (frm) {
frappe.call({
args: {
- "asset": frm.doc.name,
- "item_code": frm.doc.item_code,
- "company": frm.doc.company,
- "serial_no": frm.doc.serial_no
+ asset: frm.doc.name,
+ item_code: frm.doc.item_code,
+ company: frm.doc.company,
+ serial_no: frm.doc.serial_no,
},
method: "erpnext.assets.doctype.asset.asset.make_sales_invoice",
- callback: function(r) {
+ callback: function (r) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
- }
- })
+ },
+ });
},
- create_asset_maintenance: function(frm) {
+ create_asset_maintenance: function (frm) {
frappe.call({
args: {
- "asset": frm.doc.name,
- "item_code": frm.doc.item_code,
- "item_name": frm.doc.item_name,
- "asset_category": frm.doc.asset_category,
- "company": frm.doc.company
+ asset: frm.doc.name,
+ item_code: frm.doc.item_code,
+ item_name: frm.doc.item_name,
+ asset_category: frm.doc.asset_category,
+ company: frm.doc.company,
},
method: "erpnext.assets.doctype.asset.asset.create_asset_maintenance",
- callback: function(r) {
+ callback: function (r) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
- }
- })
+ },
+ });
},
- create_asset_repair: function(frm) {
+ create_asset_repair: function (frm) {
frappe.call({
args: {
- "asset": frm.doc.name,
- "asset_name": frm.doc.asset_name
+ asset: frm.doc.name,
+ asset_name: frm.doc.asset_name,
},
method: "erpnext.assets.doctype.asset.asset.create_asset_repair",
- callback: function(r) {
+ callback: function (r) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
- }
+ },
});
},
- create_asset_capitalization: function(frm) {
+ create_asset_capitalization: function (frm) {
frappe.call({
args: {
- "asset": frm.doc.name,
+ asset: frm.doc.name,
},
method: "erpnext.assets.doctype.asset.asset.create_asset_capitalization",
- callback: function(r) {
+ callback: function (r) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
- }
+ },
});
},
- split_asset: function(frm) {
- const title = __('Split Asset');
+ split_asset: function (frm) {
+ const title = __("Split Asset");
const fields = [
{
- fieldname: 'split_qty',
- fieldtype: 'Int',
- label: __('Split Qty'),
- reqd: 1
- }
+ fieldname: "split_qty",
+ fieldtype: "Int",
+ label: __("Split Qty"),
+ reqd: 1,
+ },
];
let dialog = new frappe.ui.Dialog({
title: title,
- fields: fields
+ fields: fields,
});
- dialog.set_primary_action(__('Split'), function() {
+ dialog.set_primary_action(__("Split"), function () {
const dialog_data = dialog.get_values();
frappe.call({
args: {
- "asset_name": frm.doc.name,
- "split_qty": cint(dialog_data.split_qty)
+ asset_name: frm.doc.name,
+ split_qty: cint(dialog_data.split_qty),
},
method: "erpnext.assets.doctype.asset.asset.split_asset",
- callback: function(r) {
+ callback: function (r) {
let doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
- }
+ },
});
dialog.hide();
@@ -484,23 +557,23 @@
dialog.show();
},
- create_asset_value_adjustment: function(frm) {
+ create_asset_value_adjustment: function (frm) {
frappe.call({
args: {
- "asset": frm.doc.name,
- "asset_category": frm.doc.asset_category,
- "company": frm.doc.company
+ asset: frm.doc.name,
+ asset_category: frm.doc.asset_category,
+ company: frm.doc.company,
},
method: "erpnext.assets.doctype.asset.asset.create_asset_value_adjustment",
freeze: 1,
- callback: function(r) {
+ callback: function (r) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
- }
- })
+ },
+ });
},
- calculate_depreciation: function(frm) {
+ calculate_depreciation: function (frm) {
frm.toggle_reqd("finance_books", frm.doc.calculate_depreciation);
if (frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
frm.trigger("set_finance_book");
@@ -509,203 +582,249 @@
}
},
- gross_purchase_amount: function(frm) {
+ gross_purchase_amount: function (frm) {
if (frm.doc.finance_books) {
- frm.doc.finance_books.forEach(d => {
+ frm.doc.finance_books.forEach((d) => {
frm.events.set_depreciation_rate(frm, d);
- })
+ });
}
},
purchase_receipt: (frm) => {
- frm.trigger('toggle_reference_doc');
+ frm.trigger("toggle_reference_doc");
if (frm.doc.purchase_receipt) {
if (frm.doc.item_code) {
- frappe.db.get_doc('Purchase Receipt', frm.doc.purchase_receipt).then(pr_doc => {
- frm.events.set_values_from_purchase_doc(frm, 'Purchase Receipt', pr_doc)
+ frappe.db.get_doc("Purchase Receipt", frm.doc.purchase_receipt).then((pr_doc) => {
+ frm.events.set_values_from_purchase_doc(frm, "Purchase Receipt", pr_doc);
});
} else {
- frm.set_value('purchase_receipt', '');
+ frm.set_value("purchase_receipt", "");
frappe.msgprint({
- title: __('Not Allowed'),
- message: __("Please select Item Code first")
+ title: __("Not Allowed"),
+ message: __("Please select Item Code first"),
});
}
}
},
purchase_invoice: (frm) => {
- frm.trigger('toggle_reference_doc');
+ frm.trigger("toggle_reference_doc");
if (frm.doc.purchase_invoice) {
if (frm.doc.item_code) {
- frappe.db.get_doc('Purchase Invoice', frm.doc.purchase_invoice).then(pi_doc => {
- frm.events.set_values_from_purchase_doc(frm, 'Purchase Invoice', pi_doc)
+ frappe.db.get_doc("Purchase Invoice", frm.doc.purchase_invoice).then((pi_doc) => {
+ frm.events.set_values_from_purchase_doc(frm, "Purchase Invoice", pi_doc);
});
} else {
- frm.set_value('purchase_invoice', '');
+ frm.set_value("purchase_invoice", "");
frappe.msgprint({
- title: __('Not Allowed'),
- message: __("Please select Item Code first")
+ title: __("Not Allowed"),
+ message: __("Please select Item Code first"),
});
}
}
},
- set_values_from_purchase_doc: function(frm, doctype, purchase_doc) {
- frm.set_value('company', purchase_doc.company);
+ set_values_from_purchase_doc: function (frm, doctype, purchase_doc) {
+ frm.set_value("company", purchase_doc.company);
if (purchase_doc.bill_date) {
- frm.set_value('purchase_date', purchase_doc.bill_date);
+ frm.set_value("purchase_date", purchase_doc.bill_date);
} else {
- frm.set_value('purchase_date', purchase_doc.posting_date);
+ frm.set_value("purchase_date", purchase_doc.posting_date);
}
if (!frm.doc.is_existing_asset && !frm.doc.available_for_use_date) {
- frm.set_value('available_for_use_date', frm.doc.purchase_date);
+ frm.set_value("available_for_use_date", frm.doc.purchase_date);
}
- const item = purchase_doc.items.find(item => item.item_code === frm.doc.item_code);
+ const item = purchase_doc.items.find((item) => item.item_code === frm.doc.item_code);
if (!item) {
- let doctype_field = frappe.scrub(doctype)
- frm.set_value(doctype_field, '');
+ let doctype_field = frappe.scrub(doctype);
+ frm.set_value(doctype_field, "");
frappe.msgprint({
- title: __('Invalid {0}', [__(doctype)]),
- message: __('The selected {0} does not contain the selected Asset Item.', [__(doctype)]),
- indicator: 'red'
+ title: __("Invalid {0}", [__(doctype)]),
+ message: __("The selected {0} does not contain the selected Asset Item.", [__(doctype)]),
+ indicator: "red",
});
}
- frappe.db.get_value('Item', item.item_code, 'is_grouped_asset', (r) => {
+ frappe.db.get_value("Item", item.item_code, "is_grouped_asset", (r) => {
var asset_quantity = r.is_grouped_asset ? item.qty : 1;
- var purchase_amount = flt(item.valuation_rate * asset_quantity, precision('gross_purchase_amount'));
+ var purchase_amount = flt(
+ item.valuation_rate * asset_quantity,
+ precision("gross_purchase_amount")
+ );
- frm.set_value('gross_purchase_amount', purchase_amount);
- frm.set_value('purchase_receipt_amount', purchase_amount);
- frm.set_value('asset_quantity', asset_quantity);
- frm.set_value('cost_center', item.cost_center || purchase_doc.cost_center);
- if(item.asset_location) { frm.set_value('location', item.asset_location); }
+ frm.set_value("gross_purchase_amount", purchase_amount);
+ frm.set_value("purchase_receipt_amount", purchase_amount);
+ frm.set_value("asset_quantity", asset_quantity);
+ frm.set_value("cost_center", item.cost_center || purchase_doc.cost_center);
+ if (item.asset_location) {
+ frm.set_value("location", item.asset_location);
+ }
});
},
- set_depreciation_rate: function(frm, row) {
- if (row.total_number_of_depreciations && row.frequency_of_depreciation
- && row.expected_value_after_useful_life) {
+ set_depreciation_rate: function (frm, row) {
+ if (
+ row.total_number_of_depreciations &&
+ row.frequency_of_depreciation &&
+ row.expected_value_after_useful_life
+ ) {
frappe.call({
method: "get_depreciation_rate",
doc: frm.doc,
args: row,
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
frappe.flags.dont_change_rate = true;
- frappe.model.set_value(row.doctype, row.name,
- "rate_of_depreciation", flt(r.message, precision("rate_of_depreciation", row)));
+ frappe.model.set_value(
+ row.doctype,
+ row.name,
+ "rate_of_depreciation",
+ flt(r.message, precision("rate_of_depreciation", row))
+ );
}
- }
+ },
});
}
},
- set_salvage_value_percentage_or_expected_value_after_useful_life: function(frm, row, salvage_value_percentage_changed, expected_value_after_useful_life_changed) {
+ set_salvage_value_percentage_or_expected_value_after_useful_life: function (
+ frm,
+ row,
+ salvage_value_percentage_changed,
+ expected_value_after_useful_life_changed
+ ) {
if (expected_value_after_useful_life_changed) {
frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
- const new_salvage_value_percentage = flt((row.expected_value_after_useful_life * 100) / frm.doc.gross_purchase_amount, precision("salvage_value_percentage", row));
- frappe.model.set_value(row.doctype, row.name, "salvage_value_percentage", new_salvage_value_percentage);
+ const new_salvage_value_percentage = flt(
+ (row.expected_value_after_useful_life * 100) / frm.doc.gross_purchase_amount,
+ precision("salvage_value_percentage", row)
+ );
+ frappe.model.set_value(
+ row.doctype,
+ row.name,
+ "salvage_value_percentage",
+ new_salvage_value_percentage
+ );
frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
} else if (salvage_value_percentage_changed) {
frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
- const new_expected_value_after_useful_life = flt(frm.doc.gross_purchase_amount * (row.salvage_value_percentage / 100), precision('gross_purchase_amount'));
- frappe.model.set_value(row.doctype, row.name, "expected_value_after_useful_life", new_expected_value_after_useful_life);
+ const new_expected_value_after_useful_life = flt(
+ frm.doc.gross_purchase_amount * (row.salvage_value_percentage / 100),
+ precision("gross_purchase_amount")
+ );
+ frappe.model.set_value(
+ row.doctype,
+ row.name,
+ "expected_value_after_useful_life",
+ new_expected_value_after_useful_life
+ );
frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
}
},
});
-frappe.ui.form.on('Asset Finance Book', {
- depreciation_method: function(frm, cdt, cdn) {
+frappe.ui.form.on("Asset Finance Book", {
+ depreciation_method: function (frm, cdt, cdn) {
const row = locals[cdt][cdn];
frm.events.set_depreciation_rate(frm, row);
},
- expected_value_after_useful_life: function(frm, cdt, cdn) {
+ expected_value_after_useful_life: function (frm, cdt, cdn) {
const row = locals[cdt][cdn];
if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
- frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, false, true);
+ frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(
+ frm,
+ row,
+ false,
+ true
+ );
}
frm.events.set_depreciation_rate(frm, row);
},
- salvage_value_percentage: function(frm, cdt, cdn) {
+ salvage_value_percentage: function (frm, cdt, cdn) {
const row = locals[cdt][cdn];
if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
- frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, true, false);
+ frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(
+ frm,
+ row,
+ true,
+ false
+ );
}
},
- frequency_of_depreciation: function(frm, cdt, cdn) {
+ frequency_of_depreciation: function (frm, cdt, cdn) {
const row = locals[cdt][cdn];
frm.events.set_depreciation_rate(frm, row);
},
- total_number_of_depreciations: function(frm, cdt, cdn) {
+ total_number_of_depreciations: function (frm, cdt, cdn) {
const row = locals[cdt][cdn];
frm.events.set_depreciation_rate(frm, row);
},
- rate_of_depreciation: function(frm, cdt, cdn) {
- if(!frappe.flags.dont_change_rate) {
+ rate_of_depreciation: function (frm, cdt, cdn) {
+ if (!frappe.flags.dont_change_rate) {
frappe.model.set_value(cdt, cdn, "expected_value_after_useful_life", 0);
}
frappe.flags.dont_change_rate = false;
},
- depreciation_start_date: function(frm, cdt, cdn) {
+ depreciation_start_date: function (frm, cdt, cdn) {
const book = locals[cdt][cdn];
- if (frm.doc.available_for_use_date && book.depreciation_start_date == frm.doc.available_for_use_date) {
+ if (
+ frm.doc.available_for_use_date &&
+ book.depreciation_start_date == frm.doc.available_for_use_date
+ ) {
frappe.msgprint(__("Depreciation Posting Date should not be equal to Available for Use Date."));
book.depreciation_start_date = "";
frm.refresh_field("finance_books");
}
- }
+ },
});
-erpnext.asset.scrap_asset = function(frm) {
+erpnext.asset.scrap_asset = function (frm) {
frappe.confirm(__("Do you really want to scrap this asset?"), function () {
frappe.call({
args: {
- "asset_name": frm.doc.name
+ asset_name: frm.doc.name,
},
method: "erpnext.assets.doctype.asset.depreciation.scrap_asset",
- callback: function(r) {
+ callback: function (r) {
cur_frm.reload_doc();
- }
- })
- })
+ },
+ });
+ });
};
-erpnext.asset.restore_asset = function(frm) {
+erpnext.asset.restore_asset = function (frm) {
frappe.confirm(__("Do you really want to restore this scrapped asset?"), function () {
frappe.call({
args: {
- "asset_name": frm.doc.name
+ asset_name: frm.doc.name,
},
method: "erpnext.assets.doctype.asset.depreciation.restore_asset",
- callback: function(r) {
+ callback: function (r) {
cur_frm.reload_doc();
- }
- })
- })
+ },
+ });
+ });
};
-erpnext.asset.transfer_asset = function() {
+erpnext.asset.transfer_asset = function () {
frappe.call({
method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
freeze: true,
- args:{
- "assets": [{ name: cur_frm.doc.name }],
- "purpose": "Transfer"
+ args: {
+ assets: [{ name: cur_frm.doc.name }],
+ purpose: "Transfer",
},
callback: function (r) {
if (r.message) {
var doc = frappe.model.sync(r.message)[0];
frappe.set_route("Form", doc.doctype, doc.name);
}
- }
+ },
});
};
diff --git a/erpnext/assets/doctype/asset/asset_list.js b/erpnext/assets/doctype/asset/asset_list.js
index 5f53b00..712958a 100644
--- a/erpnext/assets/doctype/asset/asset_list.js
+++ b/erpnext/assets/doctype/asset/asset_list.js
@@ -1,56 +1,46 @@
-frappe.listview_settings['Asset'] = {
- add_fields: ['status'],
+frappe.listview_settings["Asset"] = {
+ add_fields: ["status"],
get_indicator: function (doc) {
if (doc.status === "Fully Depreciated") {
return [__("Fully Depreciated"), "green", "status,=,Fully Depreciated"];
-
} else if (doc.status === "Partially Depreciated") {
return [__("Partially Depreciated"), "grey", "status,=,Partially Depreciated"];
-
} else if (doc.status === "Sold") {
return [__("Sold"), "green", "status,=,Sold"];
-
} else if (["Capitalized", "Decapitalized"].includes(doc.status)) {
return [__(doc.status), "grey", "status,=," + doc.status];
-
} else if (doc.status === "Scrapped") {
return [__("Scrapped"), "grey", "status,=,Scrapped"];
-
} else if (doc.status === "In Maintenance") {
return [__("In Maintenance"), "orange", "status,=,In Maintenance"];
-
} else if (doc.status === "Out of Order") {
return [__("Out of Order"), "grey", "status,=,Out of Order"];
-
} else if (doc.status === "Issue") {
return [__("Issue"), "orange", "status,=,Issue"];
-
} else if (doc.status === "Receipt") {
return [__("Receipt"), "green", "status,=,Receipt"];
-
} else if (doc.status === "Submitted") {
return [__("Submitted"), "blue", "status,=,Submitted"];
-
} else if (doc.status === "Draft") {
return [__("Draft"), "red", "status,=,Draft"];
}
},
- onload: function(me) {
- me.page.add_action_item(__("Make Asset Movement"), function() {
+ onload: function (me) {
+ me.page.add_action_item(__("Make Asset Movement"), function () {
const assets = me.get_checked_items();
frappe.call({
method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
freeze: true,
- args:{
- "assets": assets
+ args: {
+ assets: assets,
},
callback: function (r) {
if (r.message) {
var doc = frappe.model.sync(r.message)[0];
frappe.set_route("Form", doc.doctype, doc.name);
}
- }
+ },
});
});
},
-}
+};
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
index 110f2c4..651b75d 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
@@ -3,10 +3,9 @@
frappe.provide("erpnext.assets");
-
erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.stock.StockController {
setup() {
- this.frm.ignore_doctypes_on_cancel_all = ['Serial and Batch Bundle', 'Asset Movement'];
+ this.frm.ignore_doctypes_on_cancel_all = ["Serial and Batch Bundle", "Asset Movement"];
this.setup_posting_date_time_check();
}
@@ -17,7 +16,10 @@
refresh() {
this.show_general_ledger();
- if ((this.frm.doc.stock_items && this.frm.doc.stock_items.length) || !this.frm.doc.target_is_fixed_asset) {
+ if (
+ (this.frm.doc.stock_items && this.frm.doc.stock_items.length) ||
+ !this.frm.doc.target_is_fixed_asset
+ ) {
this.show_stock_ledger();
}
@@ -32,32 +34,32 @@
me.setup_warehouse_query();
- me.frm.set_query("target_item_code", function() {
+ me.frm.set_query("target_item_code", function () {
if (me.frm.doc.entry_type == "Capitalization") {
- return erpnext.queries.item({"is_stock_item": 0, "is_fixed_asset": 1});
+ return erpnext.queries.item({ is_stock_item: 0, is_fixed_asset: 1 });
} else {
- return erpnext.queries.item({"is_stock_item": 1, "is_fixed_asset": 0});
+ return erpnext.queries.item({ is_stock_item: 1, is_fixed_asset: 0 });
}
});
- me.frm.set_query("target_asset", function() {
+ me.frm.set_query("target_asset", function () {
return {
- filters: {'is_composite_asset': 1, 'docstatus': 0 }
- }
+ filters: { is_composite_asset: 1, docstatus: 0 },
+ };
});
- me.frm.set_query("asset", "asset_items", function() {
+ me.frm.set_query("asset", "asset_items", function () {
var filters = {
- 'status': ["not in", ["Draft", "Scrapped", "Sold", "Capitalized", "Decapitalized"]],
- 'docstatus': 1
+ status: ["not in", ["Draft", "Scrapped", "Sold", "Capitalized", "Decapitalized"]],
+ docstatus: 1,
};
if (me.frm.doc.target_asset) {
- filters['name'] = ['!=', me.frm.doc.target_asset];
+ filters["name"] = ["!=", me.frm.doc.target_asset];
}
return {
- filters: filters
+ filters: filters,
};
});
@@ -65,58 +67,67 @@
let row = locals[cdt][cdn];
return {
filters: {
- 'item_code': row.item_code,
- 'voucher_type': doc.doctype,
- 'voucher_no': ["in", [doc.name, ""]],
- 'is_cancelled': 0,
- }
- }
+ item_code: row.item_code,
+ voucher_type: doc.doctype,
+ voucher_no: ["in", [doc.name, ""]],
+ is_cancelled: 0,
+ },
+ };
});
- me.frm.set_query("item_code", "stock_items", function() {
- return erpnext.queries.item({"is_stock_item": 1});
+ me.frm.set_query("item_code", "stock_items", function () {
+ return erpnext.queries.item({ is_stock_item: 1 });
});
- me.frm.set_query("item_code", "service_items", function() {
- return erpnext.queries.item({"is_stock_item": 0, "is_fixed_asset": 0});
+ me.frm.set_query("item_code", "service_items", function () {
+ return erpnext.queries.item({ is_stock_item: 0, is_fixed_asset: 0 });
});
- me.frm.set_query('batch_no', 'stock_items', function(doc, cdt, cdn) {
+ me.frm.set_query("batch_no", "stock_items", function (doc, cdt, cdn) {
var item = locals[cdt][cdn];
if (!item.item_code) {
frappe.throw(__("Please enter Item Code to get Batch Number"));
} else {
var filters = {
- 'item_code': item.item_code,
- 'posting_date': me.frm.doc.posting_date || frappe.datetime.nowdate(),
- 'warehouse': item.warehouse
+ item_code: item.item_code,
+ posting_date: me.frm.doc.posting_date || frappe.datetime.nowdate(),
+ warehouse: item.warehouse,
};
return {
query: "erpnext.controllers.queries.get_batch_no",
- filters: filters
+ filters: filters,
};
}
});
- me.frm.set_query('expense_account', 'service_items', function() {
+ me.frm.set_query("expense_account", "service_items", function () {
return {
filters: {
- "account_type": ['in', ["Tax", "Expense Account", "Income Account", "Expenses Included In Valuation", "Expenses Included In Asset Valuation"]],
- "is_group": 0,
- "company": me.frm.doc.company
- }
+ account_type: [
+ "in",
+ [
+ "Tax",
+ "Expense Account",
+ "Income Account",
+ "Expenses Included In Valuation",
+ "Expenses Included In Asset Valuation",
+ ],
+ ],
+ is_group: 0,
+ company: me.frm.doc.company,
+ },
};
});
- let sbb_field = me.frm.get_docfield('stock_items', 'serial_and_batch_bundle');
+ let sbb_field = me.frm.get_docfield("stock_items", "serial_and_batch_bundle");
if (sbb_field) {
sbb_field.get_route_options_for_new_doc = (row) => {
return {
- 'item_code': row.doc.item_code,
- 'warehouse': row.doc.warehouse,
- 'voucher_type': me.frm.doc.doctype,
- }
+ item_code: row.doc.item_code,
+ warehouse: row.doc.warehouse,
+ voucher_type: me.frm.doc.doctype,
+ };
};
}
}
@@ -126,7 +137,10 @@
}
target_asset() {
- if (this.frm.doc.target_asset && this.frm.doc.capitalization_method === "Choose a WIP composite asset") {
+ if (
+ this.frm.doc.target_asset &&
+ this.frm.doc.capitalization_method === "Choose a WIP composite asset"
+ ) {
this.set_consumed_stock_items_tagged_to_wip_composite_asset(this.frm.doc.target_asset);
this.get_target_asset_details();
}
@@ -143,7 +157,7 @@
},
callback: function (r) {
if (!r.exc && r.message) {
- if(r.message[0] && r.message[0].length) {
+ if (r.message[0] && r.message[0].length) {
me.frm.clear_table("stock_items");
for (let item of r.message[0]) {
me.frm.add_child("stock_items", item);
@@ -160,7 +174,7 @@
me.calculate_totals();
}
- }
+ },
});
}
}
@@ -192,7 +206,7 @@
if (this.frm.doc.posting_date) {
frappe.run_serially([
() => this.get_all_item_warehouse_details(),
- () => this.get_all_asset_values()
+ () => this.get_all_asset_values(),
]);
}
}
@@ -248,15 +262,15 @@
}
stock_items_add(doc, cdt, cdn) {
- erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'stock_items');
+ erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "stock_items");
}
asset_items_add(doc, cdt, cdn) {
- erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'asset_items');
+ erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "asset_items");
}
serivce_items_add(doc, cdt, cdn) {
- erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'service_items');
+ erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "service_items");
}
get_target_item_details() {
@@ -274,7 +288,7 @@
if (!r.exc) {
me.frm.refresh_fields();
}
- }
+ },
});
}
}
@@ -294,7 +308,7 @@
if (!r.exc) {
me.frm.refresh_fields();
}
- }
+ },
});
}
}
@@ -316,13 +330,13 @@
company: me.frm.doc.company,
posting_date: me.frm.doc.posting_date,
posting_time: me.frm.doc.posting_time,
- }
+ },
},
callback: function (r) {
if (!r.exc) {
me.calculate_totals();
}
- }
+ },
});
}
}
@@ -343,13 +357,13 @@
finance_book: row.finance_book || me.frm.doc.finance_book,
posting_date: me.frm.doc.posting_date,
posting_time: me.frm.doc.posting_time,
- }
+ },
},
callback: function (r) {
if (!r.exc) {
me.calculate_totals();
}
- }
+ },
});
}
}
@@ -367,13 +381,13 @@
qty: flt(row.qty),
expense_account: row.expense_account,
company: me.frm.doc.company,
- }
+ },
},
callback: function (r) {
if (!r.exc) {
me.calculate_totals();
}
- }
+ },
});
}
}
@@ -386,23 +400,23 @@
child: item,
args: {
args: {
- 'item_code': item.item_code,
- 'warehouse': cstr(item.warehouse),
- 'qty': flt(item.stock_qty),
- 'serial_no': item.serial_no,
- 'posting_date': me.frm.doc.posting_date,
- 'posting_time': me.frm.doc.posting_time,
- 'company': me.frm.doc.company,
- 'voucher_type': me.frm.doc.doctype,
- 'voucher_no': me.frm.doc.name,
- 'allow_zero_valuation': 1
- }
+ item_code: item.item_code,
+ warehouse: cstr(item.warehouse),
+ qty: flt(item.stock_qty),
+ serial_no: item.serial_no,
+ posting_date: me.frm.doc.posting_date,
+ posting_time: me.frm.doc.posting_time,
+ company: me.frm.doc.company,
+ voucher_type: me.frm.doc.doctype,
+ voucher_no: me.frm.doc.name,
+ allow_zero_valuation: 1,
+ },
},
- callback: function(r) {
+ callback: function (r) {
if (!r.exc) {
me.calculate_totals();
}
- }
+ },
});
}
}
@@ -412,11 +426,11 @@
return me.frm.call({
method: "set_warehouse_details",
doc: me.frm.doc,
- callback: function(r) {
+ callback: function (r) {
if (!r.exc) {
me.calculate_totals();
}
- }
+ },
});
}
@@ -425,11 +439,11 @@
return me.frm.call({
method: "set_asset_values",
doc: me.frm.doc,
- callback: function(r) {
+ callback: function (r) {
if (!r.exc) {
me.calculate_totals();
}
- }
+ },
});
}
@@ -441,33 +455,38 @@
me.frm.doc.service_items_total = 0;
$.each(me.frm.doc.stock_items || [], function (i, d) {
- d.amount = flt(flt(d.stock_qty) * flt(d.valuation_rate), precision('amount', d));
+ d.amount = flt(flt(d.stock_qty) * flt(d.valuation_rate), precision("amount", d));
me.frm.doc.stock_items_total += d.amount;
});
$.each(me.frm.doc.asset_items || [], function (i, d) {
- d.asset_value = flt(flt(d.asset_value), precision('asset_value', d));
+ d.asset_value = flt(flt(d.asset_value), precision("asset_value", d));
me.frm.doc.asset_items_total += d.asset_value;
});
$.each(me.frm.doc.service_items || [], function (i, d) {
- d.amount = flt(flt(d.qty) * flt(d.rate), precision('amount', d));
+ d.amount = flt(flt(d.qty) * flt(d.rate), precision("amount", d));
me.frm.doc.service_items_total += d.amount;
});
- me.frm.doc.stock_items_total = flt(me.frm.doc.stock_items_total, precision('stock_items_total'));
- me.frm.doc.asset_items_total = flt(me.frm.doc.asset_items_total, precision('asset_items_total'));
- me.frm.doc.service_items_total = flt(me.frm.doc.service_items_total, precision('service_items_total'));
+ me.frm.doc.stock_items_total = flt(me.frm.doc.stock_items_total, precision("stock_items_total"));
+ me.frm.doc.asset_items_total = flt(me.frm.doc.asset_items_total, precision("asset_items_total"));
+ me.frm.doc.service_items_total = flt(
+ me.frm.doc.service_items_total,
+ precision("service_items_total")
+ );
- me.frm.doc.total_value = me.frm.doc.stock_items_total + me.frm.doc.asset_items_total + me.frm.doc.service_items_total;
- me.frm.doc.total_value = flt(me.frm.doc.total_value, precision('total_value'));
+ me.frm.doc.total_value =
+ me.frm.doc.stock_items_total + me.frm.doc.asset_items_total + me.frm.doc.service_items_total;
+ me.frm.doc.total_value = flt(me.frm.doc.total_value, precision("total_value"));
- me.frm.doc.target_qty = flt(me.frm.doc.target_qty, precision('target_qty'));
- me.frm.doc.target_incoming_rate = me.frm.doc.target_qty ? me.frm.doc.total_value / flt(me.frm.doc.target_qty)
+ me.frm.doc.target_qty = flt(me.frm.doc.target_qty, precision("target_qty"));
+ me.frm.doc.target_incoming_rate = me.frm.doc.target_qty
+ ? me.frm.doc.total_value / flt(me.frm.doc.target_qty)
: me.frm.doc.total_value;
me.frm.refresh_fields();
}
};
-cur_frm.cscript = new erpnext.assets.AssetCapitalization({frm: cur_frm});
+cur_frm.cscript = new erpnext.assets.AssetCapitalization({ frm: cur_frm });
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
index e27a492..2f4d710 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
@@ -145,6 +145,10 @@
self.make_gl_entries()
self.restore_consumed_asset_items()
+ def on_trash(self):
+ frappe.db.set_value("Asset", self.target_asset, "capitalized_in", None)
+ super(AssetCapitalization, self).on_trash()
+
def cancel_target_asset(self):
if self.entry_type == "Capitalization" and self.target_asset:
asset_doc = frappe.get_doc("Asset", self.target_asset)
diff --git a/erpnext/assets/doctype/asset_category/asset_category.js b/erpnext/assets/doctype/asset_category/asset_category.js
index 7dde14e..046b62f 100644
--- a/erpnext/assets/doctype/asset_category/asset_category.js
+++ b/erpnext/assets/doctype/asset_category/asset_category.js
@@ -1,56 +1,55 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Asset Category', {
- onload: function(frm) {
- frm.add_fetch('company_name', 'accumulated_depreciation_account', 'accumulated_depreciation_account');
- frm.add_fetch('company_name', 'depreciation_expense_account', 'depreciation_expense_account');
+frappe.ui.form.on("Asset Category", {
+ onload: function (frm) {
+ frm.add_fetch("company_name", "accumulated_depreciation_account", "accumulated_depreciation_account");
+ frm.add_fetch("company_name", "depreciation_expense_account", "depreciation_expense_account");
- frm.set_query('fixed_asset_account', 'accounts', function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
+ frm.set_query("fixed_asset_account", "accounts", function (doc, cdt, cdn) {
+ var d = locals[cdt][cdn];
return {
- "filters": {
- "account_type": "Fixed Asset",
- "root_type": "Asset",
- "is_group": 0,
- "company": d.company_name
- }
+ filters: {
+ account_type: "Fixed Asset",
+ root_type: "Asset",
+ is_group: 0,
+ company: d.company_name,
+ },
};
});
- frm.set_query('accumulated_depreciation_account', 'accounts', function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
+ frm.set_query("accumulated_depreciation_account", "accounts", function (doc, cdt, cdn) {
+ var d = locals[cdt][cdn];
return {
- "filters": {
- "account_type": "Accumulated Depreciation",
- "is_group": 0,
- "company": d.company_name
- }
+ filters: {
+ account_type: "Accumulated Depreciation",
+ is_group: 0,
+ company: d.company_name,
+ },
};
});
- frm.set_query('depreciation_expense_account', 'accounts', function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
+ frm.set_query("depreciation_expense_account", "accounts", function (doc, cdt, cdn) {
+ var d = locals[cdt][cdn];
return {
- "filters": {
- "account_type": "Depreciation",
- "root_type": ["in", ["Expense", "Income"]],
- "is_group": 0,
- "company": d.company_name
- }
+ filters: {
+ account_type: "Depreciation",
+ root_type: ["in", ["Expense", "Income"]],
+ is_group: 0,
+ company: d.company_name,
+ },
};
});
- frm.set_query('capital_work_in_progress_account', 'accounts', function(doc, cdt, cdn) {
- var d = locals[cdt][cdn];
+ frm.set_query("capital_work_in_progress_account", "accounts", function (doc, cdt, cdn) {
+ var d = locals[cdt][cdn];
return {
- "filters": {
- "account_type": "Capital Work in Progress",
- "is_group": 0,
- "company": d.company_name
- }
+ filters: {
+ account_type: "Capital Work in Progress",
+ is_group: 0,
+ company: d.company_name,
+ },
};
});
-
- }
+ },
});
diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js
index c99297d..83b5c37 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js
@@ -2,52 +2,63 @@
// For license information, please see license.txt
frappe.provide("erpnext.asset");
-frappe.ui.form.on('Asset Depreciation Schedule', {
- onload: function(frm) {
+frappe.ui.form.on("Asset Depreciation Schedule", {
+ onload: function (frm) {
frm.events.make_schedules_editable(frm);
},
- make_schedules_editable: function(frm) {
+ make_schedules_editable: function (frm) {
var is_manual_hence_editable = frm.doc.depreciation_method === "Manual" ? true : false;
var is_shift_hence_editable = frm.doc.shift_based ? true : false;
frm.toggle_enable("depreciation_schedule", is_manual_hence_editable || is_shift_hence_editable);
- frm.fields_dict["depreciation_schedule"].grid.toggle_enable("schedule_date", is_manual_hence_editable);
- frm.fields_dict["depreciation_schedule"].grid.toggle_enable("depreciation_amount", is_manual_hence_editable);
+ frm.fields_dict["depreciation_schedule"].grid.toggle_enable(
+ "schedule_date",
+ is_manual_hence_editable
+ );
+ frm.fields_dict["depreciation_schedule"].grid.toggle_enable(
+ "depreciation_amount",
+ is_manual_hence_editable
+ );
frm.fields_dict["depreciation_schedule"].grid.toggle_enable("shift", is_shift_hence_editable);
- }
+ },
});
-frappe.ui.form.on('Depreciation Schedule', {
- make_depreciation_entry: function(frm, cdt, cdn) {
+frappe.ui.form.on("Depreciation Schedule", {
+ make_depreciation_entry: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
if (!row.journal_entry) {
frappe.call({
method: "erpnext.assets.doctype.asset.depreciation.make_depreciation_entry",
args: {
- "asset_depr_schedule_name": frm.doc.name,
- "date": row.schedule_date
+ asset_depr_schedule_name: frm.doc.name,
+ date: row.schedule_date,
},
- callback: function(r) {
+ callback: function (r) {
frappe.model.sync(r.message);
frm.refresh();
- }
- })
+ },
+ });
}
},
- depreciation_amount: function(frm, cdt, cdn) {
+ depreciation_amount: function (frm, cdt, cdn) {
erpnext.asset.set_accumulated_depreciation(frm);
- }
+ },
});
-erpnext.asset.set_accumulated_depreciation = function(frm) {
- if(frm.doc.depreciation_method != "Manual") return;
+erpnext.asset.set_accumulated_depreciation = function (frm) {
+ if (frm.doc.depreciation_method != "Manual") return;
var accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
- $.each(frm.doc.depreciation_schedule || [], function(i, row) {
- accumulated_depreciation += flt(row.depreciation_amount);
- frappe.model.set_value(row.doctype, row.name, "accumulated_depreciation_amount", accumulated_depreciation);
- })
+ $.each(frm.doc.depreciation_schedule || [], function (i, row) {
+ accumulated_depreciation += flt(row.depreciation_amount);
+ frappe.model.set_value(
+ row.doctype,
+ row.name,
+ "accumulated_depreciation_amount",
+ accumulated_depreciation
+ );
+ });
};
diff --git a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
index 5c03b98..83dabab 100644
--- a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
+++ b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
@@ -1,49 +1,47 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Asset Maintenance', {
+frappe.ui.form.on("Asset Maintenance", {
setup: (frm) => {
- frm.set_query("assign_to", "asset_maintenance_tasks", function(doc) {
+ frm.set_query("assign_to", "asset_maintenance_tasks", function (doc) {
return {
query: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_team_members",
filters: {
- maintenance_team: doc.maintenance_team
- }
+ maintenance_team: doc.maintenance_team,
+ },
};
});
- frm.set_indicator_formatter('maintenance_status',
- function(doc) {
- let indicator = 'blue';
- if (doc.maintenance_status == 'Overdue') {
- indicator = 'orange';
- }
- if (doc.maintenance_status == 'Cancelled') {
- indicator = 'red';
- }
- return indicator;
+ frm.set_indicator_formatter("maintenance_status", function (doc) {
+ let indicator = "blue";
+ if (doc.maintenance_status == "Overdue") {
+ indicator = "orange";
}
- );
+ if (doc.maintenance_status == "Cancelled") {
+ indicator = "red";
+ }
+ return indicator;
+ });
},
refresh: (frm) => {
- if(!frm.is_new()) {
- frm.trigger('make_dashboard');
+ if (!frm.is_new()) {
+ frm.trigger("make_dashboard");
}
},
make_dashboard: (frm) => {
- if(!frm.is_new()) {
+ if (!frm.is_new()) {
frappe.call({
- method: 'erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_maintenance_log',
- args: {asset_name: frm.doc.asset_name},
+ method: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_maintenance_log",
+ args: { asset_name: frm.doc.asset_name },
callback: (r) => {
- if(!r.message) {
+ if (!r.message) {
return;
}
- const section = frm.dashboard.add_section('', __("Maintenance Log"));
- var rows = $('<div></div>').appendTo(section);
+ const section = frm.dashboard.add_section("", __("Maintenance Log"));
+ var rows = $("<div></div>").appendTo(section);
// show
- (r.message || []).forEach(function(d) {
+ (r.message || []).forEach(function (d) {
$(`<div class='row' style='margin-bottom: 10px;'>
<div class='col-sm-3 small'>
<a onclick="frappe.set_route('List', 'Asset Maintenance Log',
@@ -54,47 +52,46 @@
</div>`).appendTo(rows);
});
frm.dashboard.show();
- }
+ },
});
}
- }
+ },
});
-frappe.ui.form.on('Asset Maintenance Task', {
- start_date: (frm, cdt, cdn) => {
+frappe.ui.form.on("Asset Maintenance Task", {
+ start_date: (frm, cdt, cdn) => {
get_next_due_date(frm, cdt, cdn);
},
- periodicity: (frm, cdt, cdn) => {
+ periodicity: (frm, cdt, cdn) => {
get_next_due_date(frm, cdt, cdn);
},
- last_completion_date: (frm, cdt, cdn) => {
+ last_completion_date: (frm, cdt, cdn) => {
get_next_due_date(frm, cdt, cdn);
},
- end_date: (frm, cdt, cdn) => {
+ end_date: (frm, cdt, cdn) => {
get_next_due_date(frm, cdt, cdn);
- }
+ },
});
var get_next_due_date = function (frm, cdt, cdn) {
var d = locals[cdt][cdn];
if (d.start_date && d.periodicity) {
return frappe.call({
- method: 'erpnext.assets.doctype.asset_maintenance.asset_maintenance.calculate_next_due_date',
+ method: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.calculate_next_due_date",
args: {
start_date: d.start_date,
periodicity: d.periodicity,
end_date: d.end_date,
last_completion_date: d.last_completion_date,
- next_due_date: d.next_due_date
+ next_due_date: d.next_due_date,
},
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
frappe.model.set_value(cdt, cdn, "next_due_date", r.message);
- }
- else {
+ } else {
frappe.model.set_value(cdt, cdn, "next_due_date", "");
}
- }
+ },
});
}
};
diff --git a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js
index bcdc3ac..47a2128 100644
--- a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js
+++ b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js
@@ -1,15 +1,15 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Asset Maintenance Log', {
+frappe.ui.form.on("Asset Maintenance Log", {
asset_maintenance: (frm) => {
- frm.set_query('task', function(doc) {
+ frm.set_query("task", function (doc) {
return {
query: "erpnext.assets.doctype.asset_maintenance_log.asset_maintenance_log.get_maintenance_tasks",
filters: {
- 'asset_maintenance': doc.asset_maintenance
- }
+ asset_maintenance: doc.asset_maintenance,
+ },
};
});
- }
+ },
});
diff --git a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js
index c804b31..7b7b508 100644
--- a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js
+++ b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js
@@ -3,20 +3,20 @@
frappe.views.calendar["Asset Maintenance Log"] = {
field_map: {
- "start": "due_date",
- "end": "due_date",
- "id": "name",
- "title": "task",
- "allDay": "allDay",
- "progress": "progress"
+ start: "due_date",
+ end: "due_date",
+ id: "name",
+ title: "task",
+ allDay: "allDay",
+ progress: "progress",
},
filters: [
{
- "fieldtype": "Link",
- "fieldname": "asset_name",
- "options": "Asset Maintenance",
- "label": __("Asset Maintenance")
- }
+ fieldtype: "Link",
+ fieldname: "asset_name",
+ options: "Asset Maintenance",
+ label: __("Asset Maintenance"),
+ },
],
- get_events_method: "frappe.desk.calendar.get_events"
+ get_events_method: "frappe.desk.calendar.get_events",
};
diff --git a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js
index 23000e6..13f2444 100644
--- a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js
+++ b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js
@@ -1,15 +1,15 @@
-frappe.listview_settings['Asset Maintenance Log'] = {
+frappe.listview_settings["Asset Maintenance Log"] = {
add_fields: ["maintenance_status"],
has_indicator_for_draft: 1,
- get_indicator: function(doc) {
- if (doc.maintenance_status=="Planned") {
+ get_indicator: function (doc) {
+ if (doc.maintenance_status == "Planned") {
return [__(doc.maintenance_status), "orange", "status,=," + doc.maintenance_status];
- } else if (doc.maintenance_status=="Completed") {
+ } else if (doc.maintenance_status == "Completed") {
return [__(doc.maintenance_status), "green", "status,=," + doc.maintenance_status];
- } else if (doc.maintenance_status=="Cancelled") {
+ } else if (doc.maintenance_status == "Cancelled") {
return [__(doc.maintenance_status), "red", "status,=," + doc.maintenance_status];
- } else if (doc.maintenance_status=="Overdue") {
+ } else if (doc.maintenance_status == "Overdue") {
return [__(doc.maintenance_status), "red", "status,=," + doc.maintenance_status];
}
- }
+ },
};
diff --git a/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js b/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js
index c94e3db..8598765 100644
--- a/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js
+++ b/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js
@@ -1,8 +1,6 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Asset Maintenance Team', {
- refresh: function() {
-
- }
+frappe.ui.form.on("Asset Maintenance Team", {
+ refresh: function () {},
});
diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.js b/erpnext/assets/doctype/asset_movement/asset_movement.js
index 4ccc3f8..e445c90 100644
--- a/erpnext/assets/doctype/asset_movement/asset_movement.js
+++ b/erpnext/assets/doctype/asset_movement/asset_movement.js
@@ -1,104 +1,107 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Asset Movement', {
+frappe.ui.form.on("Asset Movement", {
setup: (frm) => {
frm.set_query("to_employee", "assets", (doc) => {
return {
filters: {
- company: doc.company
- }
+ company: doc.company,
+ },
};
- })
+ });
frm.set_query("from_employee", "assets", (doc) => {
return {
filters: {
- company: doc.company
- }
+ company: doc.company,
+ },
};
- })
+ });
frm.set_query("reference_name", (doc) => {
return {
filters: {
company: doc.company,
- docstatus: 1
- }
+ docstatus: 1,
+ },
};
- })
+ });
frm.set_query("reference_doctype", () => {
return {
filters: {
- name: ["in", ["Purchase Receipt", "Purchase Invoice"]]
- }
+ name: ["in", ["Purchase Receipt", "Purchase Invoice"]],
+ },
};
}),
- frm.set_query("asset", "assets", () => {
- return {
- filters: {
- status: ["not in", ["Draft"]]
- }
- }
- })
+ frm.set_query("asset", "assets", () => {
+ return {
+ filters: {
+ status: ["not in", ["Draft"]],
+ },
+ };
+ });
},
onload: (frm) => {
- frm.trigger('set_required_fields');
+ frm.trigger("set_required_fields");
},
purpose: (frm) => {
- frm.trigger('set_required_fields');
+ frm.trigger("set_required_fields");
},
set_required_fields: (frm, cdt, cdn) => {
let fieldnames_to_be_altered;
- if (frm.doc.purpose === 'Transfer') {
+ if (frm.doc.purpose === "Transfer") {
fieldnames_to_be_altered = {
target_location: { read_only: 0, reqd: 1 },
source_location: { read_only: 1, reqd: 1 },
from_employee: { read_only: 1, reqd: 0 },
- to_employee: { read_only: 1, reqd: 0 }
+ to_employee: { read_only: 1, reqd: 0 },
};
- }
- else if (frm.doc.purpose === 'Receipt') {
+ } else if (frm.doc.purpose === "Receipt") {
fieldnames_to_be_altered = {
target_location: { read_only: 0, reqd: 1 },
source_location: { read_only: 1, reqd: 0 },
from_employee: { read_only: 0, reqd: 0 },
- to_employee: { read_only: 1, reqd: 0 }
+ to_employee: { read_only: 1, reqd: 0 },
};
- }
- else if (frm.doc.purpose === 'Issue') {
+ } else if (frm.doc.purpose === "Issue") {
fieldnames_to_be_altered = {
target_location: { read_only: 1, reqd: 0 },
source_location: { read_only: 1, reqd: 0 },
from_employee: { read_only: 1, reqd: 0 },
- to_employee: { read_only: 0, reqd: 1 }
+ to_employee: { read_only: 0, reqd: 1 },
};
}
if (fieldnames_to_be_altered) {
- Object.keys(fieldnames_to_be_altered).forEach(fieldname => {
+ Object.keys(fieldnames_to_be_altered).forEach((fieldname) => {
let property_to_be_altered = fieldnames_to_be_altered[fieldname];
- Object.keys(property_to_be_altered).forEach(property => {
+ Object.keys(property_to_be_altered).forEach((property) => {
let value = property_to_be_altered[property];
- frm.fields_dict['assets'].grid.update_docfield_property(fieldname, property, value);
+ frm.fields_dict["assets"].grid.update_docfield_property(fieldname, property, value);
});
});
- frm.refresh_field('assets');
+ frm.refresh_field("assets");
}
- }
+ },
});
-frappe.ui.form.on('Asset Movement Item', {
- asset: function(frm, cdt, cdn) {
+frappe.ui.form.on("Asset Movement Item", {
+ asset: function (frm, cdt, cdn) {
// on manual entry of an asset auto sets their source location / employee
const asset_name = locals[cdt][cdn].asset;
- if (asset_name){
- frappe.db.get_doc('Asset', asset_name).then((asset_doc) => {
- if(asset_doc.location) frappe.model.set_value(cdt, cdn, 'source_location', asset_doc.location);
- if(asset_doc.custodian) frappe.model.set_value(cdt, cdn, 'from_employee', asset_doc.custodian);
- }).catch((err) => {
- console.log(err); // eslint-disable-line
- });
+ if (asset_name) {
+ frappe.db
+ .get_doc("Asset", asset_name)
+ .then((asset_doc) => {
+ if (asset_doc.location)
+ frappe.model.set_value(cdt, cdn, "source_location", asset_doc.location);
+ if (asset_doc.custodian)
+ frappe.model.set_value(cdt, cdn, "from_employee", asset_doc.custodian);
+ })
+ .catch((err) => {
+ console.log(err); // eslint-disable-line
+ });
}
- }
+ },
});
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.js b/erpnext/assets/doctype/asset_repair/asset_repair.js
index 03afcb9..27a4eb6 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.js
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.js
@@ -1,31 +1,31 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Asset Repair', {
- setup: function(frm) {
- frm.fields_dict.cost_center.get_query = function(doc) {
+frappe.ui.form.on("Asset Repair", {
+ setup: function (frm) {
+ frm.fields_dict.cost_center.get_query = function (doc) {
return {
filters: {
- 'is_group': 0,
- 'company': doc.company
- }
+ is_group: 0,
+ company: doc.company,
+ },
};
};
- frm.fields_dict.project.get_query = function(doc) {
+ frm.fields_dict.project.get_query = function (doc) {
return {
filters: {
- 'company': doc.company
- }
+ company: doc.company,
+ },
};
};
- frm.fields_dict.warehouse.get_query = function(doc) {
+ frm.fields_dict.warehouse.get_query = function (doc) {
return {
filters: {
- 'is_group': 0,
- 'company': doc.company
- }
+ is_group: 0,
+ company: doc.company,
+ },
};
};
@@ -33,87 +33,87 @@
let row = locals[cdt][cdn];
return {
filters: {
- 'item_code': row.item_code,
- 'voucher_type': doc.doctype,
- 'voucher_no': ["in", [doc.name, ""]],
- 'is_cancelled': 0,
- }
- }
+ item_code: row.item_code,
+ voucher_type: doc.doctype,
+ voucher_no: ["in", [doc.name, ""]],
+ is_cancelled: 0,
+ },
+ };
});
},
- refresh: function(frm) {
+ refresh: function (frm) {
if (frm.doc.docstatus) {
- frm.add_custom_button(__("View General Ledger"), function() {
+ frm.add_custom_button(__("View General Ledger"), function () {
frappe.route_options = {
- "voucher_no": frm.doc.name
+ voucher_no: frm.doc.name,
};
frappe.set_route("query-report", "General Ledger");
});
}
- let sbb_field = frm.get_docfield('stock_items', 'serial_and_batch_bundle');
+ let sbb_field = frm.get_docfield("stock_items", "serial_and_batch_bundle");
if (sbb_field) {
sbb_field.get_route_options_for_new_doc = (row) => {
return {
- 'item_code': row.doc.item_code,
- 'voucher_type': frm.doc.doctype,
- }
+ item_code: row.doc.item_code,
+ voucher_type: frm.doc.doctype,
+ };
};
}
},
repair_status: (frm) => {
if (frm.doc.completion_date && frm.doc.repair_status == "Completed") {
- frappe.call ({
+ frappe.call({
method: "erpnext.assets.doctype.asset_repair.asset_repair.get_downtime",
args: {
- "failure_date":frm.doc.failure_date,
- "completion_date":frm.doc.completion_date
+ failure_date: frm.doc.failure_date,
+ completion_date: frm.doc.completion_date,
},
- callback: function(r) {
- if(r.message) {
+ callback: function (r) {
+ if (r.message) {
frm.set_value("downtime", r.message + " Hrs");
}
- }
+ },
});
}
if (frm.doc.repair_status == "Completed") {
- frm.set_value('completion_date', frappe.datetime.now_datetime());
+ frm.set_value("completion_date", frappe.datetime.now_datetime());
}
},
stock_items_on_form_rendered() {
erpnext.setup_serial_or_batch_no();
- }
+ },
});
-frappe.ui.form.on('Asset Repair Consumed Item', {
- item_code: function(frm, cdt, cdn) {
+frappe.ui.form.on("Asset Repair Consumed Item", {
+ item_code: function (frm, cdt, cdn) {
var item = locals[cdt][cdn];
let item_args = {
- 'item_code': item.item_code,
- 'warehouse': frm.doc.warehouse,
- 'qty': item.consumed_quantity,
- 'serial_no': item.serial_no,
- 'company': frm.doc.company,
+ item_code: item.item_code,
+ warehouse: frm.doc.warehouse,
+ qty: item.consumed_quantity,
+ serial_no: item.serial_no,
+ company: frm.doc.company,
};
frappe.call({
- method: 'erpnext.stock.utils.get_incoming_rate',
+ method: "erpnext.stock.utils.get_incoming_rate",
args: {
- args: item_args
+ args: item_args,
},
- callback: function(r) {
- frappe.model.set_value(cdt, cdn, 'valuation_rate', r.message);
- }
+ callback: function (r) {
+ frappe.model.set_value(cdt, cdn, "valuation_rate", r.message);
+ },
});
},
- consumed_quantity: function(frm, cdt, cdn) {
+ consumed_quantity: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
- frappe.model.set_value(cdt, cdn, 'total_value', row.consumed_quantity * row.valuation_rate);
+ frappe.model.set_value(cdt, cdn, "total_value", row.consumed_quantity * row.valuation_rate);
},
});
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair_list.js b/erpnext/assets/doctype/asset_repair/asset_repair_list.js
index 86376f4..633c39b 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair_list.js
+++ b/erpnext/assets/doctype/asset_repair/asset_repair_list.js
@@ -1,12 +1,12 @@
-frappe.listview_settings['Asset Repair'] = {
+frappe.listview_settings["Asset Repair"] = {
add_fields: ["repair_status"],
- get_indicator: function(doc) {
- if(doc.repair_status=="Pending") {
+ get_indicator: function (doc) {
+ if (doc.repair_status == "Pending") {
return [__("Pending"), "orange"];
- } else if(doc.repair_status=="Completed") {
+ } else if (doc.repair_status == "Completed") {
return [__("Completed"), "green"];
- } else if(doc.repair_status=="Cancelled") {
+ } else if (doc.repair_status == "Cancelled") {
return [__("Cancelled"), "red"];
}
- }
+ },
};
diff --git a/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js b/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js
index 54df693..c22feb0 100644
--- a/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js
+++ b/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js
@@ -1,14 +1,14 @@
// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Asset Shift Allocation', {
- onload: function(frm) {
+frappe.ui.form.on("Asset Shift Allocation", {
+ onload: function (frm) {
frm.events.make_schedules_editable(frm);
},
- make_schedules_editable: function(frm) {
+ make_schedules_editable: function (frm) {
frm.toggle_enable("depreciation_schedule", true);
frm.fields_dict["depreciation_schedule"].grid.toggle_enable("schedule_date", false);
frm.fields_dict["depreciation_schedule"].grid.toggle_enable("depreciation_amount", false);
frm.fields_dict["depreciation_schedule"].grid.toggle_enable("shift", true);
- }
+ },
});
diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js
index d07f40c..7fbe6d0 100644
--- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js
+++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js
@@ -3,61 +3,61 @@
frappe.provide("erpnext.accounts.dimensions");
-frappe.ui.form.on('Asset Value Adjustment', {
- setup: function(frm) {
- frm.add_fetch('company', 'cost_center', 'cost_center');
- frm.set_query('cost_center', function() {
+frappe.ui.form.on("Asset Value Adjustment", {
+ setup: function (frm) {
+ frm.add_fetch("company", "cost_center", "cost_center");
+ frm.set_query("cost_center", function () {
return {
filters: {
company: frm.doc.company,
- is_group: 0
- }
- }
+ is_group: 0,
+ },
+ };
});
- frm.set_query('asset', function() {
+ frm.set_query("asset", function () {
return {
filters: {
calculate_depreciation: 1,
- docstatus: 1
- }
+ docstatus: 1,
+ },
};
});
},
- onload: function(frm) {
- if(frm.is_new() && frm.doc.asset) {
+ onload: function (frm) {
+ if (frm.is_new() && frm.doc.asset) {
frm.trigger("set_current_asset_value");
}
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
- company: function(frm) {
+ company: function (frm) {
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
- asset: function(frm) {
+ asset: function (frm) {
frm.trigger("set_current_asset_value");
},
- finance_book: function(frm) {
+ finance_book: function (frm) {
frm.trigger("set_current_asset_value");
},
- set_current_asset_value: function(frm) {
+ set_current_asset_value: function (frm) {
if (frm.doc.asset) {
frm.call({
method: "erpnext.assets.doctype.asset.asset.get_asset_value_after_depreciation",
args: {
asset_name: frm.doc.asset,
- finance_book: frm.doc.finance_book
+ finance_book: frm.doc.finance_book,
},
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
- frm.set_value('current_asset_value', r.message);
+ frm.set_value("current_asset_value", r.message);
}
- }
+ },
});
}
- }
+ },
});
diff --git a/erpnext/assets/doctype/location/location.js b/erpnext/assets/doctype/location/location.js
index 0f069b2..97d7239 100644
--- a/erpnext/assets/doctype/location/location.js
+++ b/erpnext/assets/doctype/location/location.js
@@ -1,13 +1,13 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Location', {
+frappe.ui.form.on("Location", {
setup: function (frm) {
frm.set_query("parent_location", function () {
return {
- "filters": {
- "is_group": 1
- }
+ filters: {
+ is_group: 1,
+ },
};
});
},
@@ -15,10 +15,9 @@
onload_post_render(frm) {
if (!frm.doc.location && frm.doc.latitude && frm.doc.longitude) {
frm.fields_dict.location.map.setView([frm.doc.latitude, frm.doc.longitude], 13);
- }
- else {
- frm.doc.latitude = frm.fields_dict.location.map.getCenter()['lat'];
- frm.doc.longitude = frm.fields_dict.location.map.getCenter()['lng'];
+ } else {
+ frm.doc.latitude = frm.fields_dict.location.map.getCenter()["lat"];
+ frm.doc.longitude = frm.fields_dict.location.map.getCenter()["lng"];
}
},
});
diff --git a/erpnext/assets/doctype/location/location_tree.js b/erpnext/assets/doctype/location/location_tree.js
index 3e105f6..c3484c2 100644
--- a/erpnext/assets/doctype/location/location_tree.js
+++ b/erpnext/assets/doctype/location/location_tree.js
@@ -1,7 +1,7 @@
frappe.treeview_settings["Location"] = {
ignore_fields: ["parent_location"],
- get_tree_nodes: 'erpnext.assets.doctype.location.location.get_children',
- add_tree_node: 'erpnext.assets.doctype.location.location.add_node',
+ get_tree_nodes: "erpnext.assets.doctype.location.location.get_children",
+ add_tree_node: "erpnext.assets.doctype.location.location.add_node",
filters: [
{
fieldname: "location",
@@ -10,9 +10,9 @@
label: __("Location"),
get_query: function () {
return {
- filters: [["Location", "is_group", "=", 1]]
+ filters: [["Location", "is_group", "=", 1]],
};
- }
+ },
},
],
breadcrumb: "Assets",
@@ -24,10 +24,10 @@
action: function () {
frappe.new_doc("Location", true);
},
- condition: 'frappe.boot.user.can_create.indexOf("Location") !== -1'
- }
+ condition: 'frappe.boot.user.can_create.indexOf("Location") !== -1',
+ },
],
onload: function (treeview) {
treeview.make_tree();
- }
+ },
};
diff --git a/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js b/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js
index 2db7125..6f3521f 100644
--- a/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js
+++ b/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js
@@ -1,8 +1,6 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Maintenance Team Member', {
- refresh: function() {
-
- }
+frappe.ui.form.on("Maintenance Team Member", {
+ refresh: function () {},
});
diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
index 812b7f7..c7fd8e0 100644
--- a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
+++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
@@ -1,105 +1,104 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Fixed Asset Register"] = {
- "filters": [
+ filters: [
{
- fieldname:"company",
+ fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
- reqd: 1
+ reqd: 1,
},
{
- fieldname:"status",
+ fieldname: "status",
label: __("Status"),
fieldtype: "Select",
options: "\nIn Location\nDisposed",
- default: 'In Location'
+ default: "In Location",
},
{
- fieldname:"asset_category",
+ fieldname: "asset_category",
label: __("Asset Category"),
fieldtype: "Link",
- options: "Asset Category"
+ options: "Asset Category",
},
{
- fieldname:"cost_center",
+ fieldname: "cost_center",
label: __("Cost Center"),
fieldtype: "Link",
- options: "Cost Center"
+ options: "Cost Center",
},
{
- fieldname:"group_by",
+ fieldname: "group_by",
label: __("Group By"),
fieldtype: "Select",
options: ["--Select a group--", "Asset Category", "Location"],
default: "--Select a group--",
- reqd: 1
+ reqd: 1,
},
{
- fieldname:"only_existing_assets",
+ fieldname: "only_existing_assets",
label: __("Only existing assets"),
- fieldtype: "Check"
+ fieldtype: "Check",
},
{
- fieldname:"finance_book",
+ fieldname: "finance_book",
label: __("Finance Book"),
fieldtype: "Link",
options: "Finance Book",
},
{
- "fieldname": "include_default_book_assets",
- "label": __("Include Default FB Assets"),
- "fieldtype": "Check",
- "default": 1
+ fieldname: "include_default_book_assets",
+ label: __("Include Default FB Assets"),
+ fieldtype: "Check",
+ default: 1,
},
{
- "fieldname":"filter_based_on",
- "label": __("Period Based On"),
- "fieldtype": "Select",
- "options": ["--Select a period--", "Fiscal Year", "Date Range"],
- "default": "--Select a period--",
+ fieldname: "filter_based_on",
+ label: __("Period Based On"),
+ fieldtype: "Select",
+ options: ["--Select a period--", "Fiscal Year", "Date Range"],
+ default: "--Select a period--",
},
{
- "fieldname":"from_date",
- "label": __("Start Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.nowdate(), -12),
- "depends_on": "eval: doc.filter_based_on == 'Date Range'",
+ fieldname: "from_date",
+ label: __("Start Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.nowdate(), -12),
+ depends_on: "eval: doc.filter_based_on == 'Date Range'",
},
{
- "fieldname":"to_date",
- "label": __("End Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.nowdate(),
- "depends_on": "eval: doc.filter_based_on == 'Date Range'",
+ fieldname: "to_date",
+ label: __("End Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.nowdate(),
+ depends_on: "eval: doc.filter_based_on == 'Date Range'",
},
{
- "fieldname":"from_fiscal_year",
- "label": __("Start Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "depends_on": "eval: doc.filter_based_on == 'Fiscal Year'",
+ fieldname: "from_fiscal_year",
+ label: __("Start Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ depends_on: "eval: doc.filter_based_on == 'Fiscal Year'",
},
{
- "fieldname":"to_fiscal_year",
- "label": __("End Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
- "depends_on": "eval: doc.filter_based_on == 'Fiscal Year'",
+ fieldname: "to_fiscal_year",
+ label: __("End Year"),
+ fieldtype: "Link",
+ options: "Fiscal Year",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+ depends_on: "eval: doc.filter_based_on == 'Fiscal Year'",
},
{
- "fieldname":"date_based_on",
- "label": __("Date Based On"),
- "fieldtype": "Select",
- "options": ["Purchase Date", "Available For Use Date"],
- "default": "Purchase Date",
- "depends_on": "eval: doc.filter_based_on == 'Date Range' || doc.filter_based_on == 'Fiscal Year'",
+ fieldname: "date_based_on",
+ label: __("Date Based On"),
+ fieldtype: "Select",
+ options: ["Purchase Date", "Available For Use Date"],
+ default: "Purchase Date",
+ depends_on: "eval: doc.filter_based_on == 'Date Range' || doc.filter_based_on == 'Fiscal Year'",
},
- ]
+ ],
};
diff --git a/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js b/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js
index dc54d60..9ee0c49 100644
--- a/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js
+++ b/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js
@@ -3,17 +3,31 @@
frappe.ui.form.on("Bulk Transaction Log", {
refresh(frm) {
- frm.add_custom_button(__('Succeeded Entries'), function() {
- frappe.set_route('List', 'Bulk Transaction Log Detail', {'date': frm.doc.date, 'transaction_status': "Success"});
- }, __("View"));
- frm.add_custom_button(__('Failed Entries'), function() {
- frappe.set_route('List', 'Bulk Transaction Log Detail', {'date': frm.doc.date, 'transaction_status': "Failed"});
- }, __("View"));
+ frm.add_custom_button(
+ __("Succeeded Entries"),
+ function () {
+ frappe.set_route("List", "Bulk Transaction Log Detail", {
+ date: frm.doc.date,
+ transaction_status: "Success",
+ });
+ },
+ __("View")
+ );
+ frm.add_custom_button(
+ __("Failed Entries"),
+ function () {
+ frappe.set_route("List", "Bulk Transaction Log Detail", {
+ date: frm.doc.date,
+ transaction_status: "Failed",
+ });
+ },
+ __("View")
+ );
if (frm.doc.failed) {
- frm.add_custom_button(__('Retry Failed Transactions'), function() {
+ frm.add_custom_button(__("Retry Failed Transactions"), function () {
frappe.call({
method: "erpnext.utilities.bulk_transaction.retry",
- args: {date: frm.doc.date}
+ args: { date: frm.doc.date },
});
});
}
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.js b/erpnext/buying/doctype/buying_settings/buying_settings.js
index 32431fc..11b920a 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.js
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.js
@@ -1,31 +1,38 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Buying Settings', {
+frappe.ui.form.on("Buying Settings", {
// refresh: function(frm) {
-
// }
});
-frappe.tour['Buying Settings'] = [
+frappe.tour["Buying Settings"] = [
{
fieldname: "supp_master_name",
title: "Supplier Naming By",
- description: __("By default, the Supplier Name is set as per the Supplier Name entered. If you want Suppliers to be named by a <a href='https://docs.erpnext.com/docs/user/manual/en/setting-up/settings/naming-series' target='_blank'>Naming Series</a> choose the 'Naming Series' option."),
+ description: __(
+ "By default, the Supplier Name is set as per the Supplier Name entered. If you want Suppliers to be named by a <a href='https://docs.erpnext.com/docs/user/manual/en/setting-up/settings/naming-series' target='_blank'>Naming Series</a> choose the 'Naming Series' option."
+ ),
},
{
fieldname: "buying_price_list",
title: "Default Buying Price List",
- description: __("Configure the default Price List when creating a new Purchase transaction. Item prices will be fetched from this Price List.")
+ description: __(
+ "Configure the default Price List when creating a new Purchase transaction. Item prices will be fetched from this Price List."
+ ),
},
{
fieldname: "po_required",
title: "Purchase Order Required for Purchase Invoice & Receipt Creation",
- description: __("If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice or Receipt without creating a Purchase Order first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Order' checkbox in the Supplier master.")
+ description: __(
+ "If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice or Receipt without creating a Purchase Order first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Order' checkbox in the Supplier master."
+ ),
},
{
fieldname: "pr_required",
title: "Purchase Receipt Required for Purchase Invoice Creation",
- description: __("If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice without creating a Purchase Receipt first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Receipt' checkbox in the Supplier master.")
- }
+ description: __(
+ "If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice without creating a Purchase Receipt first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Receipt' checkbox in the Supplier master."
+ ),
+ },
];
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index 3b671bb..7875646 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -9,52 +9,52 @@
erpnext.buying.setup_buying_controller();
frappe.ui.form.on("Purchase Order", {
- setup: function(frm) {
-
+ setup: function (frm) {
if (frm.doc.is_old_subcontracting_flow) {
- frm.set_query("reserve_warehouse", "supplied_items", function() {
+ frm.set_query("reserve_warehouse", "supplied_items", function () {
return {
filters: {
- "company": frm.doc.company,
- "name": ['!=', frm.doc.supplier_warehouse],
- "is_group": 0
- }
- }
+ company: frm.doc.company,
+ name: ["!=", frm.doc.supplier_warehouse],
+ is_group: 0,
+ },
+ };
});
}
- frm.set_indicator_formatter('item_code',
- function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
-
- frm.set_query("expense_account", "items", function() {
- return {
- query: "erpnext.controllers.queries.get_expense_account",
- filters: {'company': frm.doc.company}
- }
+ frm.set_indicator_formatter("item_code", function (doc) {
+ return doc.qty <= doc.received_qty ? "green" : "orange";
});
- frm.set_query("fg_item", "items", function() {
+ frm.set_query("expense_account", "items", function () {
+ return {
+ query: "erpnext.controllers.queries.get_expense_account",
+ filters: { company: frm.doc.company },
+ };
+ });
+
+ frm.set_query("fg_item", "items", function () {
return {
filters: {
- 'is_stock_item': 1,
- 'is_sub_contracted_item': 1,
- 'default_bom': ['!=', '']
- }
- }
+ is_stock_item: 1,
+ is_sub_contracted_item: 1,
+ default_bom: ["!=", ""],
+ },
+ };
});
},
- company: function(frm) {
+ company: function (frm) {
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
- refresh: function(frm) {
- if(frm.doc.is_old_subcontracting_flow) {
- frm.trigger('get_materials_from_supplier');
+ refresh: function (frm) {
+ if (frm.doc.is_old_subcontracting_flow) {
+ frm.trigger("get_materials_from_supplier");
- $('a.grey-link').each(function () {
- var id = $(this).children(':first-child').attr('data-label');
- if (id == 'Duplicate') {
+ $("a.grey-link").each(function () {
+ var id = $(this).children(":first-child").attr("data-label");
+ if (id == "Duplicate") {
$(this).remove();
return false;
}
@@ -62,87 +62,91 @@
}
},
- get_materials_from_supplier: function(frm) {
+ get_materials_from_supplier: function (frm) {
let po_details = [];
- if (frm.doc.supplied_items && (flt(frm.doc.per_received, 2) == 100 || frm.doc.status === 'Closed')) {
- frm.doc.supplied_items.forEach(d => {
+ if (frm.doc.supplied_items && (flt(frm.doc.per_received, 2) == 100 || frm.doc.status === "Closed")) {
+ frm.doc.supplied_items.forEach((d) => {
if (d.total_supplied_qty && d.total_supplied_qty != d.consumed_qty) {
- po_details.push(d.name)
+ po_details.push(d.name);
}
});
}
if (po_details && po_details.length) {
- frm.add_custom_button(__('Return of Components'), () => {
- frm.call({
- method: 'erpnext.controllers.subcontracting_controller.get_materials_from_supplier',
- freeze: true,
- freeze_message: __('Creating Stock Entry'),
- args: {
- subcontract_order: frm.doc.name,
- rm_details: po_details,
- order_doctype: cur_frm.doc.doctype
- },
- callback: function(r) {
- if (r && r.message) {
- const doc = frappe.model.sync(r.message);
- frappe.set_route("Form", doc[0].doctype, doc[0].name);
- }
- }
- });
- }, __('Create'));
+ frm.add_custom_button(
+ __("Return of Components"),
+ () => {
+ frm.call({
+ method: "erpnext.controllers.subcontracting_controller.get_materials_from_supplier",
+ freeze: true,
+ freeze_message: __("Creating Stock Entry"),
+ args: {
+ subcontract_order: frm.doc.name,
+ rm_details: po_details,
+ order_doctype: cur_frm.doc.doctype,
+ },
+ callback: function (r) {
+ if (r && r.message) {
+ const doc = frappe.model.sync(r.message);
+ frappe.set_route("Form", doc[0].doctype, doc[0].name);
+ }
+ },
+ });
+ },
+ __("Create")
+ );
}
},
- onload: function(frm) {
+ onload: function (frm) {
set_schedule_date(frm);
- if (!frm.doc.transaction_date){
- frm.set_value('transaction_date', frappe.datetime.get_today())
+ if (!frm.doc.transaction_date) {
+ frm.set_value("transaction_date", frappe.datetime.get_today());
}
- erpnext.queries.setup_queries(frm, "Warehouse", function() {
+ erpnext.queries.setup_queries(frm, "Warehouse", function () {
return erpnext.queries.warehouse(frm.doc);
});
// On cancel and amending a purchase order with advance payment, reset advance paid amount
if (frm.is_new()) {
- frm.set_value("advance_paid", 0)
+ frm.set_value("advance_paid", 0);
}
},
- apply_tds: function(frm) {
+ apply_tds: function (frm) {
if (!frm.doc.apply_tds) {
- frm.set_value("tax_withholding_category", '');
+ frm.set_value("tax_withholding_category", "");
} else {
frm.set_value("tax_withholding_category", frm.supplier_tds);
}
},
- get_subcontracting_boms_for_finished_goods: function(fg_item) {
+ get_subcontracting_boms_for_finished_goods: function (fg_item) {
return frappe.call({
- method:"erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_finished_goods",
+ method: "erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_finished_goods",
args: {
- fg_items: fg_item
+ fg_items: fg_item,
},
});
},
- get_subcontracting_boms_for_service_item: function(service_item) {
+ get_subcontracting_boms_for_service_item: function (service_item) {
return frappe.call({
- method:"erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_service_item",
+ method: "erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_service_item",
args: {
- service_item: service_item
+ service_item: service_item,
},
});
},
});
frappe.ui.form.on("Purchase Order Item", {
- schedule_date: function(frm, cdt, cdn) {
+ schedule_date: function (frm, cdt, cdn) {
var row = locals[cdt][cdn];
if (row.schedule_date) {
- if(!frm.doc.schedule_date) {
+ if (!frm.doc.schedule_date) {
erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "items", "schedule_date");
} else {
set_schedule_date(frm);
@@ -150,12 +154,12 @@
}
},
- item_code: async function(frm, cdt, cdn) {
+ item_code: async function (frm, cdt, cdn) {
if (frm.doc.is_subcontracted && !frm.doc.is_old_subcontracting_flow) {
var row = locals[cdt][cdn];
if (row.item_code && !row.fg_item) {
- var result = await frm.events.get_subcontracting_boms_for_service_item(row.item_code)
+ var result = await frm.events.get_subcontracting_boms_for_service_item(row.item_code);
if (result.message && Object.keys(result.message).length) {
var finished_goods = Object.keys(result.message);
@@ -175,7 +179,7 @@
fieldtype: "Autocomplete",
label: __("Finished Good"),
options: finished_goods,
- }
+ },
],
primary_action_label: __("Select"),
primary_action: () => {
@@ -198,16 +202,21 @@
}
},
- fg_item: async function(frm, cdt, cdn) {
+ fg_item: async function (frm, cdt, cdn) {
if (frm.doc.is_subcontracted && !frm.doc.is_old_subcontracting_flow) {
var row = locals[cdt][cdn];
if (row.fg_item) {
- var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item)
+ var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item);
if (result.message && Object.keys(result.message).length) {
frappe.model.set_value(cdt, cdn, "item_code", result.message.service_item);
- frappe.model.set_value(cdt, cdn, "qty", flt(row.fg_item_qty) * flt(result.message.conversion_factor));
+ frappe.model.set_value(
+ cdt,
+ cdn,
+ "qty",
+ flt(row.fg_item_qty) * flt(result.message.conversion_factor)
+ );
frappe.model.set_value(cdt, cdn, "uom", result.message.service_item_uom);
}
}
@@ -219,25 +228,36 @@
var row = locals[cdt][cdn];
if (row.fg_item) {
- var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item)
+ var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item);
- if (result.message && row.item_code == result.message.service_item && row.uom == result.message.service_item_uom) {
- frappe.model.set_value(cdt, cdn, "fg_item_qty", flt(row.qty) / flt(result.message.conversion_factor));
+ if (
+ result.message &&
+ row.item_code == result.message.service_item &&
+ row.uom == result.message.service_item_uom
+ ) {
+ frappe.model.set_value(
+ cdt,
+ cdn,
+ "fg_item_qty",
+ flt(row.qty) / flt(result.message.conversion_factor)
+ );
}
}
}
},
});
-erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends erpnext.buying.BuyingController {
+erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends (
+ erpnext.buying.BuyingController
+) {
setup() {
this.frm.custom_make_buttons = {
- 'Purchase Receipt': 'Purchase Receipt',
- 'Purchase Invoice': 'Purchase Invoice',
- 'Payment Entry': 'Payment',
- 'Subcontracting Order': 'Subcontracting Order',
- 'Stock Entry': 'Material to Supplier'
- }
+ "Purchase Receipt": "Purchase Receipt",
+ "Purchase Invoice": "Purchase Invoice",
+ "Payment Entry": "Payment",
+ "Subcontracting Order": "Subcontracting Order",
+ "Stock Entry": "Material to Supplier",
+ };
super.setup();
}
@@ -250,110 +270,155 @@
for (var i in cur_frm.doc.items) {
var item = cur_frm.doc.items[i];
- if(item.delivered_by_supplier !== 1) {
+ if (item.delivered_by_supplier !== 1) {
allow_receipt = true;
} else {
is_drop_ship = true;
}
- if(is_drop_ship && allow_receipt) {
+ if (is_drop_ship && allow_receipt) {
break;
}
}
this.frm.set_df_property("drop_ship", "hidden", !is_drop_ship);
- if(doc.docstatus == 1) {
+ if (doc.docstatus == 1) {
this.frm.fields_dict.items_section.wrapper.addClass("hide-border");
- if(!this.frm.doc.set_warehouse) {
+ if (!this.frm.doc.set_warehouse) {
this.frm.fields_dict.items_section.wrapper.removeClass("hide-border");
}
- if(!in_list(["Closed", "Delivered"], doc.status)) {
- if(this.frm.doc.status !== 'Closed' && flt(this.frm.doc.per_received, 2) < 100 && flt(this.frm.doc.per_billed, 2) < 100) {
+ if (!in_list(["Closed", "Delivered"], doc.status)) {
+ if (
+ this.frm.doc.status !== "Closed" &&
+ flt(this.frm.doc.per_received, 2) < 100 &&
+ flt(this.frm.doc.per_billed, 2) < 100
+ ) {
if (!this.frm.doc.__onload || this.frm.doc.__onload.can_update_items) {
- this.frm.add_custom_button(__('Update Items'), () => {
+ this.frm.add_custom_button(__("Update Items"), () => {
erpnext.utils.update_child_items({
frm: this.frm,
child_docname: "items",
child_doctype: "Purchase Order Detail",
cannot_add_row: false,
- })
+ });
});
}
}
if (this.frm.has_perm("submit")) {
- if(flt(doc.per_billed, 2) < 100 || flt(doc.per_received, 2) < 100) {
+ if (flt(doc.per_billed, 2) < 100 || flt(doc.per_received, 2) < 100) {
if (doc.status != "On Hold") {
- this.frm.add_custom_button(__('Hold'), () => this.hold_purchase_order(), __("Status"));
- } else{
- this.frm.add_custom_button(__('Resume'), () => this.unhold_purchase_order(), __("Status"));
+ this.frm.add_custom_button(
+ __("Hold"),
+ () => this.hold_purchase_order(),
+ __("Status")
+ );
+ } else {
+ this.frm.add_custom_button(
+ __("Resume"),
+ () => this.unhold_purchase_order(),
+ __("Status")
+ );
}
- this.frm.add_custom_button(__('Close'), () => this.close_purchase_order(), __("Status"));
+ this.frm.add_custom_button(
+ __("Close"),
+ () => this.close_purchase_order(),
+ __("Status")
+ );
}
}
- if(is_drop_ship && doc.status!="Delivered") {
- this.frm.add_custom_button(__('Delivered'),
- this.delivered_by_supplier, __("Status"));
+ if (is_drop_ship && doc.status != "Delivered") {
+ this.frm.add_custom_button(__("Delivered"), this.delivered_by_supplier, __("Status"));
this.frm.page.set_inner_btn_group_as_primary(__("Status"));
}
- } else if(in_list(["Closed", "Delivered"], doc.status)) {
+ } else if (in_list(["Closed", "Delivered"], doc.status)) {
if (this.frm.has_perm("submit")) {
- this.frm.add_custom_button(__('Re-open'), () => this.unclose_purchase_order(), __("Status"));
+ this.frm.add_custom_button(
+ __("Re-open"),
+ () => this.unclose_purchase_order(),
+ __("Status")
+ );
}
}
- if(doc.status != "Closed") {
+ if (doc.status != "Closed") {
if (doc.status != "On Hold") {
- if(flt(doc.per_received, 2) < 100 && allow_receipt) {
- cur_frm.add_custom_button(__('Purchase Receipt'), this.make_purchase_receipt, __('Create'));
+ if (flt(doc.per_received, 2) < 100 && allow_receipt) {
+ cur_frm.add_custom_button(
+ __("Purchase Receipt"),
+ this.make_purchase_receipt,
+ __("Create")
+ );
if (doc.is_subcontracted) {
if (doc.is_old_subcontracting_flow) {
if (me.has_unsupplied_items()) {
- cur_frm.add_custom_button(__('Material to Supplier'), function() { me.make_stock_entry(); }, __("Transfer"));
+ cur_frm.add_custom_button(
+ __("Material to Supplier"),
+ function () {
+ me.make_stock_entry();
+ },
+ __("Transfer")
+ );
}
- }
- else {
- cur_frm.add_custom_button(__('Subcontracting Order'), this.make_subcontracting_order, __('Create'));
+ } else {
+ cur_frm.add_custom_button(
+ __("Subcontracting Order"),
+ this.make_subcontracting_order,
+ __("Create")
+ );
}
}
}
- if(flt(doc.per_billed, 2) < 100)
- cur_frm.add_custom_button(__('Purchase Invoice'),
- this.make_purchase_invoice, __('Create'));
+ if (flt(doc.per_billed, 2) < 100)
+ cur_frm.add_custom_button(
+ __("Purchase Invoice"),
+ this.make_purchase_invoice,
+ __("Create")
+ );
- if(flt(doc.per_billed, 2) < 100 && doc.status != "Delivered") {
+ if (flt(doc.per_billed, 2) < 100 && doc.status != "Delivered") {
this.frm.add_custom_button(
- __('Payment'),
+ __("Payment"),
() => this.make_payment_entry(),
- __('Create')
+ __("Create")
);
}
- if(flt(doc.per_billed, 2) < 100) {
- this.frm.add_custom_button(__('Payment Request'),
- function() { me.make_payment_request() }, __('Create'));
+ if (flt(doc.per_billed, 2) < 100) {
+ this.frm.add_custom_button(
+ __("Payment Request"),
+ function () {
+ me.make_payment_request();
+ },
+ __("Create")
+ );
}
if (doc.docstatus === 1 && !doc.inter_company_order_reference) {
let me = this;
let internal = me.frm.doc.is_internal_supplier;
if (internal) {
- let button_label = (me.frm.doc.company === me.frm.doc.represents_company) ? "Internal Sales Order" :
- "Inter Company Sales Order";
+ let button_label =
+ me.frm.doc.company === me.frm.doc.represents_company
+ ? "Internal Sales Order"
+ : "Inter Company Sales Order";
- me.frm.add_custom_button(button_label, function() {
- me.make_inter_company_order(me.frm);
- }, __('Create'));
+ me.frm.add_custom_button(
+ button_label,
+ function () {
+ me.make_inter_company_order(me.frm);
+ },
+ __("Create")
+ );
}
-
}
}
- cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+ cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
}
- } else if(doc.docstatus===0) {
+ } else if (doc.docstatus === 0) {
cur_frm.cscript.add_from_mappers();
}
}
@@ -362,19 +427,20 @@
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order_based_on_supplier",
args: {
- supplier: this.frm.doc.supplier
+ supplier: this.frm.doc.supplier,
},
source_doctype: "Material Request",
source_name: this.frm.doc.supplier,
target: this.frm,
setters: {
- company: this.frm.doc.company
+ company: this.frm.doc.company,
},
get_query_filters: {
docstatus: ["!=", 2],
- supplier: this.frm.doc.supplier
+ supplier: this.frm.doc.supplier,
},
- get_query_method: "erpnext.stock.doctype.material_request.material_request.get_material_requests_based_on_supplier"
+ get_query_method:
+ "erpnext.stock.doctype.material_request.material_request.get_material_requests_based_on_supplier",
});
}
@@ -383,27 +449,27 @@
}
has_unsupplied_items() {
- return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty);
+ return this.frm.doc["supplied_items"].some((item) => item.required_qty > item.supplied_qty);
}
make_stock_entry() {
frappe.call({
- method:"erpnext.controllers.subcontracting_controller.make_rm_stock_entry",
+ method: "erpnext.controllers.subcontracting_controller.make_rm_stock_entry",
args: {
subcontract_order: cur_frm.doc.name,
- order_doctype: cur_frm.doc.doctype
+ order_doctype: cur_frm.doc.doctype,
},
- callback: function(r) {
+ callback: function (r) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
- }
+ },
});
}
make_inter_company_order(frm) {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_inter_company_sales_order",
- frm: frm
+ frm: frm,
});
}
@@ -411,134 +477,163 @@
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
frm: cur_frm,
- freeze_message: __("Creating Purchase Receipt ...")
- })
+ freeze_message: __("Creating Purchase Receipt ..."),
+ });
}
make_purchase_invoice() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
make_subcontracting_order() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_subcontracting_order",
frm: cur_frm,
- freeze_message: __("Creating Subcontracting Order ...")
- })
+ freeze_message: __("Creating Subcontracting Order ..."),
+ });
}
add_from_mappers() {
var me = this;
- this.frm.add_custom_button(__('Material Request'),
- function() {
+ this.frm.add_custom_button(
+ __("Material Request"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order",
source_doctype: "Material Request",
target: me.frm,
setters: {
schedule_date: undefined,
- status: undefined
+ status: undefined,
},
get_query_filters: {
material_request_type: "Purchase",
docstatus: 1,
status: ["!=", "Stopped"],
per_ordered: ["<", 100],
- company: me.frm.doc.company
+ company: me.frm.doc.company,
},
allow_child_item_selection: true,
child_fieldname: "items",
- child_columns: ["item_code", "qty", "ordered_qty"]
- })
- }, __("Get Items From"));
+ child_columns: ["item_code", "qty", "ordered_qty"],
+ });
+ },
+ __("Get Items From")
+ );
- this.frm.add_custom_button(__('Supplier Quotation'),
- function() {
+ this.frm.add_custom_button(
+ __("Supplier Quotation"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
source_doctype: "Supplier Quotation",
target: me.frm,
setters: {
supplier: me.frm.doc.supplier,
- valid_till: undefined
+ valid_till: undefined,
},
get_query_filters: {
docstatus: 1,
status: ["not in", ["Stopped", "Expired"]],
- }
- })
- }, __("Get Items From"));
+ },
+ });
+ },
+ __("Get Items From")
+ );
- this.frm.add_custom_button(__('Update Rate as per Last Purchase'),
- function() {
+ this.frm.add_custom_button(
+ __("Update Rate as per Last Purchase"),
+ function () {
frappe.call({
- "method": "get_last_purchase_rate",
- "doc": me.frm.doc,
- callback: function(r, rt) {
+ method: "get_last_purchase_rate",
+ doc: me.frm.doc,
+ callback: function (r, rt) {
me.frm.dirty();
me.frm.cscript.calculate_taxes_and_totals();
+ },
+ });
+ },
+ __("Tools")
+ );
+
+ this.frm.add_custom_button(
+ __("Link to Material Request"),
+ function () {
+ var my_items = [];
+ for (var i in me.frm.doc.items) {
+ if (!me.frm.doc.items[i].material_request) {
+ my_items.push(me.frm.doc.items[i].item_code);
}
- })
- }, __("Tools"));
-
- this.frm.add_custom_button(__('Link to Material Request'),
- function() {
- var my_items = [];
- for (var i in me.frm.doc.items) {
- if(!me.frm.doc.items[i].material_request){
- my_items.push(me.frm.doc.items[i].item_code);
}
- }
- frappe.call({
- method: "erpnext.buying.utils.get_linked_material_requests",
- args:{
- items: my_items
- },
- callback: function(r) {
- if(r.exc) return;
+ frappe.call({
+ method: "erpnext.buying.utils.get_linked_material_requests",
+ args: {
+ items: my_items,
+ },
+ callback: function (r) {
+ if (r.exc) return;
- var i = 0;
- var item_length = me.frm.doc.items.length;
- while (i < item_length) {
- var qty = me.frm.doc.items[i].qty;
- (r.message[0] || []).forEach(function(d) {
- if (d.qty > 0 && qty > 0 && me.frm.doc.items[i].item_code == d.item_code && !me.frm.doc.items[i].material_request_item)
- {
- me.frm.doc.items[i].material_request = d.mr_name;
- me.frm.doc.items[i].material_request_item = d.mr_item;
- var my_qty = Math.min(qty, d.qty);
- qty = qty - my_qty;
- d.qty = d.qty - my_qty;
- me.frm.doc.items[i].stock_qty = my_qty * me.frm.doc.items[i].conversion_factor;
- me.frm.doc.items[i].qty = my_qty;
+ var i = 0;
+ var item_length = me.frm.doc.items.length;
+ while (i < item_length) {
+ var qty = me.frm.doc.items[i].qty;
+ (r.message[0] || []).forEach(function (d) {
+ if (
+ d.qty > 0 &&
+ qty > 0 &&
+ me.frm.doc.items[i].item_code == d.item_code &&
+ !me.frm.doc.items[i].material_request_item
+ ) {
+ me.frm.doc.items[i].material_request = d.mr_name;
+ me.frm.doc.items[i].material_request_item = d.mr_item;
+ var my_qty = Math.min(qty, d.qty);
+ qty = qty - my_qty;
+ d.qty = d.qty - my_qty;
+ me.frm.doc.items[i].stock_qty =
+ my_qty * me.frm.doc.items[i].conversion_factor;
+ me.frm.doc.items[i].qty = my_qty;
- frappe.msgprint("Assigning " + d.mr_name + " to " + d.item_code + " (row " + me.frm.doc.items[i].idx + ")");
- if (qty > 0) {
- frappe.msgprint("Splitting " + qty + " units of " + d.item_code);
- var new_row = frappe.model.add_child(me.frm.doc, me.frm.doc.items[i].doctype, "items");
- item_length++;
+ frappe.msgprint(
+ "Assigning " +
+ d.mr_name +
+ " to " +
+ d.item_code +
+ " (row " +
+ me.frm.doc.items[i].idx +
+ ")"
+ );
+ if (qty > 0) {
+ frappe.msgprint("Splitting " + qty + " units of " + d.item_code);
+ var new_row = frappe.model.add_child(
+ me.frm.doc,
+ me.frm.doc.items[i].doctype,
+ "items"
+ );
+ item_length++;
- for (var key in me.frm.doc.items[i]) {
- new_row[key] = me.frm.doc.items[i][key];
+ for (var key in me.frm.doc.items[i]) {
+ new_row[key] = me.frm.doc.items[i][key];
+ }
+
+ new_row.idx = item_length;
+ new_row["stock_qty"] = new_row.conversion_factor * qty;
+ new_row["qty"] = qty;
+ new_row["material_request"] = "";
+ new_row["material_request_item"] = "";
}
-
- new_row.idx = item_length;
- new_row["stock_qty"] = new_row.conversion_factor * qty;
- new_row["qty"] = qty;
- new_row["material_request"] = "";
- new_row["material_request_item"] = "";
}
- }
- });
- i++;
- }
- refresh_field("items");
- }
- });
- }, __("Tools"));
+ });
+ i++;
+ }
+ refresh_field("items");
+ },
+ });
+ },
+ __("Tools")
+ );
}
tc_name() {
@@ -547,7 +642,7 @@
items_add(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
- if(doc.schedule_date) {
+ if (doc.schedule_date) {
row.schedule_date = doc.schedule_date;
refresh_field("schedule_date", cdn, "items");
} else {
@@ -555,24 +650,24 @@
}
}
- unhold_purchase_order(){
- cur_frm.cscript.update_status("Resume", "Draft")
+ unhold_purchase_order() {
+ cur_frm.cscript.update_status("Resume", "Draft");
}
- hold_purchase_order(){
+ hold_purchase_order() {
var me = this;
var d = new frappe.ui.Dialog({
- title: __('Reason for Hold'),
+ title: __("Reason for Hold"),
fields: [
{
- "fieldname": "reason_for_hold",
- "fieldtype": "Text",
- "reqd": 1,
- }
+ fieldname: "reason_for_hold",
+ fieldtype: "Text",
+ reqd: 1,
+ },
],
- primary_action: function() {
+ primary_action: function () {
var data = d.get_values();
- let reason_for_hold = 'Reason for hold: ' + data.reason_for_hold;
+ let reason_for_hold = "Reason for hold: " + data.reason_for_hold;
frappe.call({
method: "frappe.desk.form.utils.add_comment",
@@ -581,30 +676,30 @@
reference_name: me.frm.docname,
content: __(reason_for_hold),
comment_email: frappe.session.user,
- comment_by: frappe.session.user_fullname
+ comment_by: frappe.session.user_fullname,
},
- callback: function(r) {
- if(!r.exc) {
- me.update_status('Hold', 'On Hold')
+ callback: function (r) {
+ if (!r.exc) {
+ me.update_status("Hold", "On Hold");
d.hide();
}
- }
+ },
});
- }
+ },
});
d.show();
}
- unclose_purchase_order(){
- cur_frm.cscript.update_status('Re-open', 'Submitted')
+ unclose_purchase_order() {
+ cur_frm.cscript.update_status("Re-open", "Submitted");
}
- close_purchase_order(){
- cur_frm.cscript.update_status('Close', 'Closed')
+ close_purchase_order() {
+ cur_frm.cscript.update_status("Close", "Closed");
}
- delivered_by_supplier(){
- cur_frm.cscript.update_status('Deliver', 'Delivered')
+ delivered_by_supplier() {
+ cur_frm.cscript.update_status("Deliver", "Delivered");
}
items_on_form_rendered() {
@@ -617,51 +712,55 @@
};
// for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.buying.PurchaseOrderController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.buying.PurchaseOrderController({ frm: cur_frm }));
-cur_frm.cscript.update_status= function(label, status){
+cur_frm.cscript.update_status = function (label, status) {
frappe.call({
method: "erpnext.buying.doctype.purchase_order.purchase_order.update_status",
- args: {status: status, name: cur_frm.doc.name},
- callback: function(r) {
+ args: { status: status, name: cur_frm.doc.name },
+ callback: function (r) {
cur_frm.set_value("status", status);
cur_frm.reload_doc();
- }
- })
-}
+ },
+ });
+};
-cur_frm.fields_dict['items'].grid.get_field('project').get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict["items"].grid.get_field("project").get_query = function (doc, cdt, cdn) {
return {
- filters:[
- ['Project', 'status', 'not in', 'Completed, Cancelled']
- ]
- }
-}
+ filters: [["Project", "status", "not in", "Completed, Cancelled"]],
+ };
+};
if (cur_frm.doc.is_old_subcontracting_flow) {
- cur_frm.fields_dict['items'].grid.get_field('bom').get_query = function(doc, cdt, cdn) {
- var d = locals[cdt][cdn]
+ cur_frm.fields_dict["items"].grid.get_field("bom").get_query = function (doc, cdt, cdn) {
+ var d = locals[cdt][cdn];
return {
filters: [
- ['BOM', 'item', '=', d.item_code],
- ['BOM', 'is_active', '=', '1'],
- ['BOM', 'docstatus', '=', '1'],
- ['BOM', 'company', '=', doc.company]
- ]
- }
- }
+ ["BOM", "item", "=", d.item_code],
+ ["BOM", "is_active", "=", "1"],
+ ["BOM", "docstatus", "=", "1"],
+ ["BOM", "company", "=", doc.company],
+ ],
+ };
+ };
}
function set_schedule_date(frm) {
- if(frm.doc.schedule_date){
- erpnext.utils.copy_value_in_all_rows(frm.doc, frm.doc.doctype, frm.doc.name, "items", "schedule_date");
+ if (frm.doc.schedule_date) {
+ erpnext.utils.copy_value_in_all_rows(
+ frm.doc,
+ frm.doc.doctype,
+ frm.doc.name,
+ "items",
+ "schedule_date"
+ );
}
}
frappe.provide("erpnext.buying");
-frappe.ui.form.on("Purchase Order", "is_subcontracted", function(frm) {
+frappe.ui.form.on("Purchase Order", "is_subcontracted", function (frm) {
if (frm.doc.is_old_subcontracting_flow) {
erpnext.buying.get_default_bom(frm);
}
-});
\ No newline at end of file
+});
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order_list.js b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
index d39d7f9..5e33b42 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order_list.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
@@ -1,6 +1,15 @@
-frappe.listview_settings['Purchase Order'] = {
- add_fields: ["base_grand_total", "company", "currency", "supplier",
- "supplier_name", "per_received", "per_billed", "status", "advance_payment_status"],
+frappe.listview_settings["Purchase Order"] = {
+ add_fields: [
+ "base_grand_total",
+ "company",
+ "currency",
+ "supplier",
+ "supplier_name",
+ "per_received",
+ "per_billed",
+ "status",
+ "advance_payment_status",
+ ],
get_indicator: function (doc) {
if (doc.status === "Closed") {
return [__("Closed"), "green", "status,=,Closed"];
@@ -12,15 +21,25 @@
return [__("To Pay"), "gray", "advance_payment_status,=,Initiated"];
} else if (flt(doc.per_received, 2) < 100 && doc.status !== "Closed") {
if (flt(doc.per_billed, 2) < 100) {
- return [__("To Receive and Bill"), "orange",
- "per_received,<,100|per_billed,<,100|status,!=,Closed"];
+ return [
+ __("To Receive and Bill"),
+ "orange",
+ "per_received,<,100|per_billed,<,100|status,!=,Closed",
+ ];
} else {
- return [__("To Receive"), "orange",
- "per_received,<,100|per_billed,=,100|status,!=,Closed"];
+ return [__("To Receive"), "orange", "per_received,<,100|per_billed,=,100|status,!=,Closed"];
}
- } else if (flt(doc.per_received, 2) >= 100 && flt(doc.per_billed, 2) < 100 && doc.status !== "Closed") {
+ } else if (
+ flt(doc.per_received, 2) >= 100 &&
+ flt(doc.per_billed, 2) < 100 &&
+ doc.status !== "Closed"
+ ) {
return [__("To Bill"), "orange", "per_received,=,100|per_billed,<,100|status,!=,Closed"];
- } else if (flt(doc.per_received, 2) >= 100 && flt(doc.per_billed, 2) == 100 && doc.status !== "Closed") {
+ } else if (
+ flt(doc.per_received, 2) >= 100 &&
+ flt(doc.per_billed, 2) == 100 &&
+ doc.status !== "Closed"
+ ) {
return [__("Completed"), "green", "per_received,=,100|per_billed,=,100|status,!=,Closed"];
}
},
@@ -28,25 +47,23 @@
var method = "erpnext.buying.doctype.purchase_order.purchase_order.close_or_unclose_purchase_orders";
listview.page.add_menu_item(__("Close"), function () {
- listview.call_for_selected_items(method, { "status": "Closed" });
+ listview.call_for_selected_items(method, { status: "Closed" });
});
listview.page.add_menu_item(__("Reopen"), function () {
- listview.call_for_selected_items(method, { "status": "Submitted" });
+ listview.call_for_selected_items(method, { status: "Submitted" });
});
-
- listview.page.add_action_item(__("Purchase Invoice"), ()=>{
+ listview.page.add_action_item(__("Purchase Invoice"), () => {
erpnext.bulk_transaction_processing.create(listview, "Purchase Order", "Purchase Invoice");
});
- listview.page.add_action_item(__("Purchase Receipt"), ()=>{
+ listview.page.add_action_item(__("Purchase Receipt"), () => {
erpnext.bulk_transaction_processing.create(listview, "Purchase Order", "Purchase Receipt");
});
- listview.page.add_action_item(__("Advance Payment"), ()=>{
+ listview.page.add_action_item(__("Advance Payment"), () => {
erpnext.bulk_transaction_processing.create(listview, "Purchase Order", "Payment Entry");
});
-
- }
+ },
};
diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index d262783..c667ee8 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -762,11 +762,94 @@
pe_doc = frappe.get_doc("Payment Entry", pe.name)
pe_doc.cancel()
+ def create_account(self, account_name, company, currency, parent):
+ if not frappe.db.get_value(
+ "Account", filters={"account_name": account_name, "company": company}
+ ):
+ account = frappe.get_doc(
+ {
+ "doctype": "Account",
+ "account_name": account_name,
+ "parent_account": parent,
+ "company": company,
+ "account_currency": currency,
+ "is_group": 0,
+ "account_type": "Payable",
+ }
+ ).insert()
+ else:
+ account = frappe.db.get_value(
+ "Account",
+ filters={"account_name": account_name, "company": company},
+ fieldname="name",
+ pluck=True,
+ )
+
+ return account
+
+ def test_advance_payment_with_separate_party_account_enabled(self):
+ """
+ Test "Advance Paid" on Purchase Order, when "Book Advance Payments in Separate Party Account" is enabled and
+ the payment entry linked to the Order is allocated to Purchase Invoice.
+ """
+ supplier = "_Test Supplier"
+ company = "_Test Company"
+
+ # Setup default 'Advance Paid' account
+ account = self.create_account(
+ "Advance Paid", company, "INR", "Application of Funds (Assets) - _TC"
+ )
+ company_doc = frappe.get_doc("Company", company)
+ company_doc.book_advance_payments_in_separate_party_account = True
+ company_doc.default_advance_paid_account = account.name
+ company_doc.save()
+
+ po_doc = create_purchase_order(supplier=supplier)
+
+ from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
+
+ pe = get_payment_entry("Purchase Order", po_doc.name)
+ pe.save().submit()
+
+ po_doc.reload()
+ self.assertEqual(po_doc.advance_paid, 5000)
+
+ from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice
+
+ pi = make_purchase_invoice(po_doc.name)
+ pi.append(
+ "advances",
+ {
+ "reference_type": pe.doctype,
+ "reference_name": pe.name,
+ "reference_row": pe.references[0].name,
+ "advance_amount": 5000,
+ "allocated_amount": 5000,
+ },
+ )
+ pi.save().submit()
+ pe.reload()
+ po_doc.reload()
+ self.assertEqual(po_doc.advance_paid, 0)
+
+ company_doc.book_advance_payments_in_separate_party_account = False
+ company_doc.save()
+
@change_settings("Accounts Settings", {"unlink_advance_payment_on_cancelation_of_order": 1})
def test_advance_paid_upon_payment_entry_cancellation(self):
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
- po_doc = create_purchase_order(supplier="_Test Supplier USD", currency="USD", do_not_submit=1)
+ supplier = "_Test Supplier USD"
+ company = "_Test Company"
+
+ # Setup default USD payable account for Supplier
+ account = self.create_account("Creditors USD", company, "USD", "Accounts Payable - _TC")
+ supplier_doc = frappe.get_doc("Supplier", supplier)
+ if not [x for x in supplier_doc.accounts if x.company == company]:
+ supplier_doc.append("accounts", {"company": company, "account": account.name})
+ supplier_doc.save()
+
+ po_doc = create_purchase_order(supplier=supplier, currency="USD", do_not_submit=1)
po_doc.conversion_rate = 80
po_doc.submit()
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
index 31a06cf..272d077 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
@@ -1,60 +1,70 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-cur_frm.add_fetch('contact', 'email_id', 'email_id')
+cur_frm.add_fetch("contact", "email_id", "email_id");
erpnext.buying.setup_buying_controller();
-frappe.ui.form.on("Request for Quotation",{
- setup: function(frm) {
+frappe.ui.form.on("Request for Quotation", {
+ setup: function (frm) {
frm.custom_make_buttons = {
- 'Supplier Quotation': 'Create'
- }
+ "Supplier Quotation": "Create",
+ };
- frm.fields_dict["suppliers"].grid.get_field("contact").get_query = function(doc, cdt, cdn) {
+ frm.fields_dict["suppliers"].grid.get_field("contact").get_query = function (doc, cdt, cdn) {
let d = locals[cdt][cdn];
return {
query: "frappe.contacts.doctype.contact.contact.contact_query",
filters: {
link_doctype: "Supplier",
- link_name: d.supplier || ""
- }
+ link_name: d.supplier || "",
+ },
};
- }
+ };
- frm.set_query('warehouse', 'items', () => ({
+ frm.set_query("warehouse", "items", () => ({
filters: {
company: frm.doc.company,
- is_group: 0
- }
+ is_group: 0,
+ },
}));
},
- onload: function(frm) {
- if(!frm.doc.message_for_supplier) {
- frm.set_value("message_for_supplier", __("Please supply the specified items at the best possible rates"))
+ onload: function (frm) {
+ if (!frm.doc.message_for_supplier) {
+ frm.set_value(
+ "message_for_supplier",
+ __("Please supply the specified items at the best possible rates")
+ );
}
},
- refresh: function(frm, cdt, cdn) {
+ refresh: function (frm, cdt, cdn) {
if (frm.doc.docstatus === 1) {
+ frm.add_custom_button(
+ __("Supplier Quotation"),
+ function () {
+ frm.trigger("make_supplier_quotation");
+ },
+ __("Create")
+ );
- frm.add_custom_button(__('Supplier Quotation'),
- function(){ frm.trigger("make_supplier_quotation") }, __("Create"));
-
-
- frm.add_custom_button(__("Send Emails to Suppliers"), function() {
- frappe.call({
- method: 'erpnext.buying.doctype.request_for_quotation.request_for_quotation.send_supplier_emails',
- freeze: true,
- args: {
- rfq_name: frm.doc.name
- },
- callback: function(r){
- frm.reload_doc();
- }
- });
- }, __("Tools"));
+ frm.add_custom_button(
+ __("Send Emails to Suppliers"),
+ function () {
+ frappe.call({
+ method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.send_supplier_emails",
+ freeze: true,
+ args: {
+ rfq_name: frm.doc.name,
+ },
+ callback: function (r) {
+ frm.reload_doc();
+ },
+ });
+ },
+ __("Tools")
+ );
frm.add_custom_button(
__("Download PDF"),
@@ -122,13 +132,13 @@
var w = window.open(
frappe.urllib.get_full_url(
"/api/method/erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_pdf?" +
- new URLSearchParams({
- name: frm.doc.name,
- supplier: data.supplier,
- print_format: data.print_format || "Standard",
- language: data.language || frappe.boot.lang,
- letterhead: data.letter_head || frm.doc.letter_head || "",
- }).toString()
+ new URLSearchParams({
+ name: frm.doc.name,
+ supplier: data.supplier,
+ print_format: data.print_format || "Standard",
+ language: data.language || frappe.boot.lang,
+ letterhead: data.letter_head || frm.doc.letter_head || "",
+ }).toString()
)
);
if (!w) {
@@ -147,101 +157,109 @@
}
},
- make_supplier_quotation: function(frm) {
+ make_supplier_quotation: function (frm) {
var doc = frm.doc;
var dialog = new frappe.ui.Dialog({
title: __("Create Supplier Quotation"),
fields: [
- { "fieldtype": "Link",
- "label": __("Supplier"),
- "fieldname": "supplier",
- "options": 'Supplier',
- "reqd": 1,
+ {
+ fieldtype: "Link",
+ label: __("Supplier"),
+ fieldname: "supplier",
+ options: "Supplier",
+ reqd: 1,
get_query: () => {
return {
filters: [
- ["Supplier", "name", "in", frm.doc.suppliers.map((row) => {return row.supplier;})]
- ]
- }
- }
- }
+ [
+ "Supplier",
+ "name",
+ "in",
+ frm.doc.suppliers.map((row) => {
+ return row.supplier;
+ }),
+ ],
+ ],
+ };
+ },
+ },
],
primary_action_label: __("Create"),
primary_action: (args) => {
- if(!args) return;
+ if (!args) return;
dialog.hide();
return frappe.call({
type: "GET",
method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
args: {
- "source_name": doc.name,
- "for_supplier": args.supplier
+ source_name: doc.name,
+ for_supplier: args.supplier,
},
freeze: true,
- callback: function(r) {
- if(!r.exc) {
+ callback: function (r) {
+ if (!r.exc) {
var doc = frappe.model.sync(r.message);
frappe.set_route("Form", r.message.doctype, r.message.name);
}
- }
+ },
});
- }
+ },
});
- dialog.show()
+ dialog.show();
},
schedule_date(frm) {
- if(frm.doc.schedule_date){
+ if (frm.doc.schedule_date) {
frm.doc.items.forEach((item) => {
item.schedule_date = frm.doc.schedule_date;
- })
+ });
}
refresh_field("items");
},
preview: (frm) => {
let dialog = new frappe.ui.Dialog({
- title: __('Preview Email'),
+ title: __("Preview Email"),
fields: [
{
- label: __('Supplier'),
- fieldtype: 'Select',
- fieldname: 'supplier',
- options: frm.doc.suppliers.map(row => row.supplier),
- reqd: 1
+ label: __("Supplier"),
+ fieldtype: "Select",
+ fieldname: "supplier",
+ options: frm.doc.suppliers.map((row) => row.supplier),
+ reqd: 1,
},
{
- fieldtype: 'Column Break',
- fieldname: 'col_break_1',
+ fieldtype: "Column Break",
+ fieldname: "col_break_1",
},
{
- label: __('Subject'),
- fieldtype: 'Data',
- fieldname: 'subject',
+ label: __("Subject"),
+ fieldtype: "Data",
+ fieldname: "subject",
read_only: 1,
- depends_on: 'subject'
+ depends_on: "subject",
},
{
- fieldtype: 'Section Break',
- fieldname: 'sec_break_1',
- hide_border: 1
+ fieldtype: "Section Break",
+ fieldname: "sec_break_1",
+ hide_border: 1,
},
{
- label: __('Email'),
- fieldtype: 'HTML',
- fieldname: 'email_preview'
+ label: __("Email"),
+ fieldtype: "HTML",
+ fieldname: "email_preview",
},
{
- fieldtype: 'Section Break',
- fieldname: 'sec_break_2'
+ fieldtype: "Section Break",
+ fieldname: "sec_break_2",
},
{
- label: __('Note'),
- fieldtype: 'HTML',
- fieldname: 'note'
- }
- ]
+ label: __("Note"),
+ fieldtype: "HTML",
+ fieldname: "note",
+ },
+ ],
});
dialog.fields_dict["supplier"].df.onchange = () => {
@@ -249,74 +267,78 @@
supplier: dialog.get_value("supplier"),
}).then(({ message }) => {
dialog.fields_dict.email_preview.$wrapper.empty();
- dialog.fields_dict.email_preview.$wrapper.append(
- message.message
- );
+ dialog.fields_dict.email_preview.$wrapper.append(message.message);
dialog.set_value("subject", message.subject);
});
};
- dialog.fields_dict.note.$wrapper.append(`<p class="small text-muted">This is a preview of the email to be sent. A PDF of the document will
+ dialog.fields_dict.note.$wrapper
+ .append(`<p class="small text-muted">This is a preview of the email to be sent. A PDF of the document will
automatically be attached with the email.</p>`);
dialog.show();
- }
-})
+ },
+});
frappe.ui.form.on("Request for Quotation Item", {
items_add(frm, cdt, cdn) {
if (frm.doc.schedule_date) {
- frappe.model.set_value(cdt, cdn, 'schedule_date', frm.doc.schedule_date);
+ frappe.model.set_value(cdt, cdn, "schedule_date", frm.doc.schedule_date);
}
- }
-});
-frappe.ui.form.on("Request for Quotation Supplier",{
- supplier: function(frm, cdt, cdn) {
- var d = locals[cdt][cdn]
- frappe.call({
- method:"erpnext.accounts.party.get_party_details",
- args:{
- party: d.supplier,
- party_type: 'Supplier'
- },
- callback: function(r){
- if(r.message){
- frappe.model.set_value(cdt, cdn, 'contact', r.message.contact_person)
- frappe.model.set_value(cdt, cdn, 'email_id', r.message.contact_email)
- }
- }
- })
},
+});
+frappe.ui.form.on("Request for Quotation Supplier", {
+ supplier: function (frm, cdt, cdn) {
+ var d = locals[cdt][cdn];
+ frappe.call({
+ method: "erpnext.accounts.party.get_party_details",
+ args: {
+ party: d.supplier,
+ party_type: "Supplier",
+ },
+ callback: function (r) {
+ if (r.message) {
+ frappe.model.set_value(cdt, cdn, "contact", r.message.contact_person);
+ frappe.model.set_value(cdt, cdn, "email_id", r.message.contact_email);
+ }
+ },
+ });
+ },
+});
-})
-
-erpnext.buying.RequestforQuotationController = class RequestforQuotationController extends erpnext.buying.BuyingController {
+erpnext.buying.RequestforQuotationController = class RequestforQuotationController extends (
+ erpnext.buying.BuyingController
+) {
refresh() {
var me = this;
super.refresh();
- if (this.frm.doc.docstatus===0) {
- this.frm.add_custom_button(__('Material Request'),
- function() {
+ if (this.frm.doc.docstatus === 0) {
+ this.frm.add_custom_button(
+ __("Material Request"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.material_request.material_request.make_request_for_quotation",
source_doctype: "Material Request",
target: me.frm,
setters: {
schedule_date: undefined,
- status: undefined
+ status: undefined,
},
get_query_filters: {
material_request_type: "Purchase",
docstatus: 1,
status: ["!=", "Stopped"],
per_ordered: ["<", 100],
- company: me.frm.doc.company
- }
- })
- }, __("Get Items From"));
+ company: me.frm.doc.company,
+ },
+ });
+ },
+ __("Get Items From")
+ );
// Get items from Opportunity
- this.frm.add_custom_button(__('Opportunity'),
- function() {
+ this.frm.add_custom_button(
+ __("Opportunity"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation",
source_doctype: "Opportunity",
@@ -324,67 +346,79 @@
setters: {
party_name: undefined,
opportunity_from: undefined,
- status: undefined
+ status: undefined,
},
get_query_filters: {
status: ["not in", ["Closed", "Lost"]],
- company: me.frm.doc.company
- }
- })
- }, __("Get Items From"));
+ company: me.frm.doc.company,
+ },
+ });
+ },
+ __("Get Items From")
+ );
// Get items from open Material Requests based on supplier
- this.frm.add_custom_button(__('Possible Supplier'), function() {
- // Create a dialog window for the user to pick their supplier
- var dialog = new frappe.ui.Dialog({
- title: __('Select Possible Supplier'),
- fields: [
- {
- fieldname: 'supplier',
- fieldtype:'Link',
- options:'Supplier',
- label:'Supplier',
- reqd:1,
- description: __("Get Items from Material Requests against this Supplier")
- }
- ],
- primary_action_label: __("Get Items"),
- primary_action: (args) => {
- if(!args) return;
- dialog.hide();
-
- erpnext.utils.map_current_doc({
- method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
- source_name: args.supplier,
- target: me.frm,
- setters: {
- company: me.frm.doc.company
+ this.frm.add_custom_button(
+ __("Possible Supplier"),
+ function () {
+ // Create a dialog window for the user to pick their supplier
+ var dialog = new frappe.ui.Dialog({
+ title: __("Select Possible Supplier"),
+ fields: [
+ {
+ fieldname: "supplier",
+ fieldtype: "Link",
+ options: "Supplier",
+ label: "Supplier",
+ reqd: 1,
+ description: __("Get Items from Material Requests against this Supplier"),
},
- get_query_filters: {
- material_request_type: "Purchase",
- docstatus: 1,
- status: ["!=", "Stopped"],
- per_ordered: ["<", 100]
- }
- });
- dialog.hide();
- }
- });
+ ],
+ primary_action_label: __("Get Items"),
+ primary_action: (args) => {
+ if (!args) return;
+ dialog.hide();
- dialog.show();
- }, __("Get Items From"));
+ erpnext.utils.map_current_doc({
+ method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
+ source_name: args.supplier,
+ target: me.frm,
+ setters: {
+ company: me.frm.doc.company,
+ },
+ get_query_filters: {
+ material_request_type: "Purchase",
+ docstatus: 1,
+ status: ["!=", "Stopped"],
+ per_ordered: ["<", 100],
+ },
+ });
+ dialog.hide();
+ },
+ });
+
+ dialog.show();
+ },
+ __("Get Items From")
+ );
// Link Material Requests
- this.frm.add_custom_button(__('Link to Material Requests'),
- function() {
+ this.frm.add_custom_button(
+ __("Link to Material Requests"),
+ function () {
erpnext.buying.link_to_mrs(me.frm);
- }, __("Tools"));
+ },
+ __("Tools")
+ );
// Get Suppliers
- this.frm.add_custom_button(__('Get Suppliers'),
- function() {
+ this.frm.add_custom_button(
+ __("Get Suppliers"),
+ function () {
me.get_suppliers_button(me.frm);
- }, __("Tools"));
+ },
+ __("Tools")
+ );
}
}
@@ -396,70 +430,75 @@
this.get_terms();
}
- get_suppliers_button (frm) {
+ get_suppliers_button(frm) {
var doc = frm.doc;
var dialog = new frappe.ui.Dialog({
title: __("Get Suppliers"),
fields: [
{
- "fieldtype": "Select", "label": __("Get Suppliers By"),
- "fieldname": "search_type",
- "options": ["Supplier Group", "Tag"],
- "reqd": 1,
+ fieldtype: "Select",
+ label: __("Get Suppliers By"),
+ fieldname: "search_type",
+ options: ["Supplier Group", "Tag"],
+ reqd: 1,
onchange() {
- if(dialog.get_value('search_type') == 'Tag'){
- frappe.call({
- method: 'erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_supplier_tag',
- }).then(r => {
- dialog.set_df_property("tag", "options", r.message)
- });
+ if (dialog.get_value("search_type") == "Tag") {
+ frappe
+ .call({
+ method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_supplier_tag",
+ })
+ .then((r) => {
+ dialog.set_df_property("tag", "options", r.message);
+ });
}
- }
+ },
},
{
- "fieldtype": "Link", "label": __("Supplier Group"),
- "fieldname": "supplier_group",
- "options": "Supplier Group",
- "reqd": 0,
- "depends_on": "eval:doc.search_type == 'Supplier Group'"
+ fieldtype: "Link",
+ label: __("Supplier Group"),
+ fieldname: "supplier_group",
+ options: "Supplier Group",
+ reqd: 0,
+ depends_on: "eval:doc.search_type == 'Supplier Group'",
},
{
- "fieldtype": "Select", "label": __("Tag"),
- "fieldname": "tag",
- "reqd": 0,
- "depends_on": "eval:doc.search_type == 'Tag'",
- }
+ fieldtype: "Select",
+ label: __("Tag"),
+ fieldname: "tag",
+ reqd: 0,
+ depends_on: "eval:doc.search_type == 'Tag'",
+ },
],
primary_action_label: __("Add Suppliers"),
- primary_action : (args) => {
- if(!args) return;
+ primary_action: (args) => {
+ if (!args) return;
dialog.hide();
//Remove blanks
for (var j = 0; j < frm.doc.suppliers.length; j++) {
- if(!Object.prototype.hasOwnProperty.call(frm.doc.suppliers[j], "supplier")) {
+ if (!Object.prototype.hasOwnProperty.call(frm.doc.suppliers[j], "supplier")) {
frm.get_field("suppliers").grid.grid_rows[j].remove();
}
}
function load_suppliers(r) {
- if(r.message) {
+ if (r.message) {
for (var i = 0; i < r.message.length; i++) {
var exists = false;
let supplier = "";
- if (r.message[i].constructor === Array){
+ if (r.message[i].constructor === Array) {
supplier = r.message[i][0];
} else {
supplier = r.message[i].name;
}
- for (var j = 0; j < doc.suppliers.length;j++) {
+ for (var j = 0; j < doc.suppliers.length; j++) {
if (supplier === doc.suppliers[j].supplier) {
exists = true;
}
}
- if(!exists) {
- var d = frm.add_child('suppliers');
+ if (!exists) {
+ var d = frm.add_child("suppliers");
d.supplier = supplier;
frm.script_manager.trigger("supplier", d.doctype, d.name);
}
@@ -473,10 +512,10 @@
type: "GET",
method: "frappe.desk.doctype.tag.tag.get_tagged_docs",
args: {
- "doctype": "Supplier",
- "tag": args.tag
+ doctype: "Supplier",
+ tag: args.tag,
},
- callback: load_suppliers
+ callback: load_suppliers,
});
} else if (args.supplier_group) {
return frappe.call({
@@ -485,13 +524,12 @@
doctype: "Supplier",
order_by: "name",
fields: ["name"],
- filters: [["Supplier", "supplier_group", "=", args.supplier_group]]
-
+ filters: [["Supplier", "supplier_group", "=", args.supplier_group]],
},
- callback: load_suppliers
+ callback: load_suppliers,
});
}
- }
+ },
});
dialog.show();
@@ -499,4 +537,4 @@
};
// for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.buying.RequestforQuotationController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.buying.RequestforQuotationController({ frm: cur_frm }));
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index 70d2782..b74474b 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -3,65 +3,65 @@
frappe.ui.form.on("Supplier", {
setup: function (frm) {
- frm.set_query('default_price_list', { 'buying': 1 });
+ frm.set_query("default_price_list", { buying: 1 });
if (frm.doc.__islocal == 1) {
frm.set_value("represents_company", "");
}
- frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
+ frm.set_query("account", "accounts", function (doc, cdt, cdn) {
let d = locals[cdt][cdn];
return {
filters: {
- 'account_type': 'Payable',
- 'root_type': 'Liability',
- 'company': d.company,
- "is_group": 0
- }
- }
+ account_type: "Payable",
+ root_type: "Liability",
+ company: d.company,
+ is_group: 0,
+ },
+ };
});
- frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
+ frm.set_query("advance_account", "accounts", function (doc, cdt, cdn) {
let d = locals[cdt][cdn];
return {
filters: {
- "account_type": "Payable",
- "root_type": "Asset",
- "company": d.company,
- "is_group": 0
- }
- }
+ account_type: "Payable",
+ root_type: "Asset",
+ company: d.company,
+ is_group: 0,
+ },
+ };
});
- frm.set_query("default_bank_account", function() {
+ frm.set_query("default_bank_account", function () {
return {
filters: {
- "is_company_account":1
- }
- }
+ is_company_account: 1,
+ },
+ };
});
- frm.set_query("supplier_primary_contact", function(doc) {
+ frm.set_query("supplier_primary_contact", function (doc) {
return {
query: "erpnext.buying.doctype.supplier.supplier.get_supplier_primary_contact",
filters: {
- "supplier": doc.name
- }
+ supplier: doc.name,
+ },
};
});
- frm.set_query("supplier_primary_address", function(doc) {
+ frm.set_query("supplier_primary_address", function (doc) {
return {
filters: {
- "link_doctype": "Supplier",
- "link_name": doc.name
- }
+ link_doctype: "Supplier",
+ link_name: doc.name,
+ },
};
});
- frm.set_query("user", "portal_users", function(doc) {
+ frm.set_query("user", "portal_users", function (doc) {
return {
filters: {
- "ignore_user_type": true,
- }
+ ignore_user_type: true,
+ },
};
});
},
@@ -74,65 +74,94 @@
}
if (frm.doc.__islocal) {
- hide_field(['address_html','contact_html']);
+ hide_field(["address_html", "contact_html"]);
frappe.contacts.clear_address_and_contact(frm);
- }
- else {
- unhide_field(['address_html','contact_html']);
+ } else {
+ unhide_field(["address_html", "contact_html"]);
frappe.contacts.render_address_and_contact(frm);
// custom buttons
- frm.add_custom_button(__('Accounting Ledger'), function () {
- frappe.set_route('query-report', 'General Ledger',
- { party_type: 'Supplier', party: frm.doc.name, party_name: frm.doc.supplier_name });
- }, __("View"));
+ frm.add_custom_button(
+ __("Accounting Ledger"),
+ function () {
+ frappe.set_route("query-report", "General Ledger", {
+ party_type: "Supplier",
+ party: frm.doc.name,
+ party_name: frm.doc.supplier_name,
+ });
+ },
+ __("View")
+ );
- frm.add_custom_button(__('Accounts Payable'), function () {
- frappe.set_route('query-report', 'Accounts Payable', { party_type: "Supplier", party: frm.doc.name });
- }, __("View"));
+ frm.add_custom_button(
+ __("Accounts Payable"),
+ function () {
+ frappe.set_route("query-report", "Accounts Payable", {
+ party_type: "Supplier",
+ party: frm.doc.name,
+ });
+ },
+ __("View")
+ );
- frm.add_custom_button(__('Bank Account'), function () {
- erpnext.utils.make_bank_account(frm.doc.doctype, frm.doc.name);
- }, __('Create'));
+ frm.add_custom_button(
+ __("Bank Account"),
+ function () {
+ erpnext.utils.make_bank_account(frm.doc.doctype, frm.doc.name);
+ },
+ __("Create")
+ );
- frm.add_custom_button(__('Pricing Rule'), function () {
- erpnext.utils.make_pricing_rule(frm.doc.doctype, frm.doc.name);
- }, __('Create'));
+ frm.add_custom_button(
+ __("Pricing Rule"),
+ function () {
+ erpnext.utils.make_pricing_rule(frm.doc.doctype, frm.doc.name);
+ },
+ __("Create")
+ );
- frm.add_custom_button(__('Get Supplier Group Details'), function () {
- frm.trigger("get_supplier_group_details");
- }, __('Actions'));
+ frm.add_custom_button(
+ __("Get Supplier Group Details"),
+ function () {
+ frm.trigger("get_supplier_group_details");
+ },
+ __("Actions")
+ );
if (cint(frappe.defaults.get_default("enable_common_party_accounting"))) {
- frm.add_custom_button(__('Link with Customer'), function () {
- frm.trigger('show_party_link_dialog');
- }, __('Actions'));
+ frm.add_custom_button(
+ __("Link with Customer"),
+ function () {
+ frm.trigger("show_party_link_dialog");
+ },
+ __("Actions")
+ );
}
// indicators
erpnext.utils.set_party_dashboard_indicators(frm);
}
},
- get_supplier_group_details: function(frm) {
+ get_supplier_group_details: function (frm) {
frappe.call({
method: "get_supplier_group_details",
doc: frm.doc,
- callback: function() {
+ callback: function () {
frm.refresh();
- }
+ },
});
},
- supplier_primary_address: function(frm) {
+ supplier_primary_address: function (frm) {
if (frm.doc.supplier_primary_address) {
frappe.call({
- method: 'frappe.contacts.doctype.address.address.get_address_display',
+ method: "frappe.contacts.doctype.address.address.get_address_display",
args: {
- "address_dict": frm.doc.supplier_primary_address
+ address_dict: frm.doc.supplier_primary_address,
},
- callback: function(r) {
+ callback: function (r) {
frm.set_value("primary_address", r.message);
- }
+ },
});
}
if (!frm.doc.supplier_primary_address) {
@@ -140,56 +169,60 @@
}
},
- supplier_primary_contact: function(frm) {
+ supplier_primary_contact: function (frm) {
if (!frm.doc.supplier_primary_contact) {
frm.set_value("mobile_no", "");
frm.set_value("email_id", "");
}
},
- is_internal_supplier: function(frm) {
+ is_internal_supplier: function (frm) {
if (frm.doc.is_internal_supplier == 1) {
frm.toggle_reqd("represents_company", true);
- }
- else {
+ } else {
frm.toggle_reqd("represents_company", false);
}
},
- show_party_link_dialog: function(frm) {
+ show_party_link_dialog: function (frm) {
const dialog = new frappe.ui.Dialog({
- title: __('Select a Customer'),
- fields: [{
- fieldtype: 'Link', label: __('Customer'),
- options: 'Customer', fieldname: 'customer', reqd: 1
- }],
- primary_action: function({ customer }) {
+ title: __("Select a Customer"),
+ fields: [
+ {
+ fieldtype: "Link",
+ label: __("Customer"),
+ options: "Customer",
+ fieldname: "customer",
+ reqd: 1,
+ },
+ ],
+ primary_action: function ({ customer }) {
frappe.call({
- method: 'erpnext.accounts.doctype.party_link.party_link.create_party_link',
+ method: "erpnext.accounts.doctype.party_link.party_link.create_party_link",
args: {
- primary_role: 'Supplier',
+ primary_role: "Supplier",
primary_party: frm.doc.name,
- secondary_party: customer
+ secondary_party: customer,
},
freeze: true,
- callback: function() {
+ callback: function () {
dialog.hide();
frappe.msgprint({
- message: __('Successfully linked to Customer'),
- alert: true
+ message: __("Successfully linked to Customer"),
+ alert: true,
});
},
- error: function() {
+ error: function () {
dialog.hide();
frappe.msgprint({
- message: __('Linking to Customer Failed. Please try again.'),
- title: __('Linking Failed'),
- indicator: 'red'
+ message: __("Linking to Customer Failed. Please try again."),
+ title: __("Linking Failed"),
+ indicator: "red",
});
- }
+ },
});
},
- primary_action_label: __('Create Link')
+ primary_action_label: __("Create Link"),
});
dialog.show();
- }
+ },
});
diff --git a/erpnext/buying/doctype/supplier/supplier_list.js b/erpnext/buying/doctype/supplier/supplier_list.js
index c776b00..987c1e0 100644
--- a/erpnext/buying/doctype/supplier/supplier_list.js
+++ b/erpnext/buying/doctype/supplier/supplier_list.js
@@ -1,8 +1,8 @@
-frappe.listview_settings['Supplier'] = {
+frappe.listview_settings["Supplier"] = {
add_fields: ["supplier_name", "supplier_group", "image", "on_hold"],
- get_indicator: function(doc) {
- if(cint(doc.on_hold)) {
+ get_indicator: function (doc) {
+ if (cint(doc.on_hold)) {
return [__("On Hold"), "red"];
}
- }
+ },
};
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index addf5a5..c169871 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -2,12 +2,14 @@
// License: GNU General Public License v3. See license.txt
erpnext.buying.setup_buying_controller();
-erpnext.buying.SupplierQuotationController = class SupplierQuotationController extends erpnext.buying.BuyingController {
+erpnext.buying.SupplierQuotationController = class SupplierQuotationController extends (
+ erpnext.buying.BuyingController
+) {
setup() {
this.frm.custom_make_buttons = {
- 'Purchase Order': 'Purchase Order',
- 'Quotation': 'Quotation'
- }
+ "Purchase Order": "Purchase Order",
+ Quotation: "Quotation",
+ };
super.setup();
}
@@ -17,89 +19,90 @@
super.refresh();
if (this.frm.doc.__islocal && !this.frm.doc.valid_till) {
- this.frm.set_value('valid_till', frappe.datetime.add_months(this.frm.doc.transaction_date, 1));
+ this.frm.set_value("valid_till", frappe.datetime.add_months(this.frm.doc.transaction_date, 1));
}
if (this.frm.doc.docstatus === 1) {
- cur_frm.add_custom_button(__("Purchase Order"), this.make_purchase_order,
- __('Create'));
- cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
- cur_frm.add_custom_button(__("Quotation"), this.make_quotation,
- __('Create'));
- }
- else if (this.frm.doc.docstatus===0) {
-
- this.frm.add_custom_button(__('Material Request'),
- function() {
+ cur_frm.add_custom_button(__("Purchase Order"), this.make_purchase_order, __("Create"));
+ cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
+ cur_frm.add_custom_button(__("Quotation"), this.make_quotation, __("Create"));
+ } else if (this.frm.doc.docstatus === 0) {
+ this.frm.add_custom_button(
+ __("Material Request"),
+ function () {
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.material_request.material_request.make_supplier_quotation",
source_doctype: "Material Request",
target: me.frm,
setters: {
schedule_date: undefined,
- status: undefined
+ status: undefined,
},
get_query_filters: {
material_request_type: "Purchase",
docstatus: 1,
status: ["!=", "Stopped"],
per_ordered: ["<", 100],
- company: me.frm.doc.company
- }
- })
- }, __("Get Items From"));
+ company: me.frm.doc.company,
+ },
+ });
+ },
+ __("Get Items From")
+ );
// Link Material Requests
- this.frm.add_custom_button(__('Link to Material Requests'),
- function() {
+ this.frm.add_custom_button(
+ __("Link to Material Requests"),
+ function () {
erpnext.buying.link_to_mrs(me.frm);
- }, __("Tools"));
+ },
+ __("Tools")
+ );
- this.frm.add_custom_button(__("Request for Quotation"),
- function() {
- if (!me.frm.doc.supplier) {
- frappe.throw({message:__("Please select a Supplier"), title:__("Mandatory")})
- }
- erpnext.utils.map_current_doc({
- method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
- source_doctype: "Request for Quotation",
- target: me.frm,
- setters: {
- transaction_date: null
- },
- get_query_filters: {
- supplier: me.frm.doc.supplier,
- company: me.frm.doc.company
- },
- get_query_method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_rfq_containing_supplier"
-
- })
- }, __("Get Items From"));
+ this.frm.add_custom_button(
+ __("Request for Quotation"),
+ function () {
+ if (!me.frm.doc.supplier) {
+ frappe.throw({ message: __("Please select a Supplier"), title: __("Mandatory") });
+ }
+ erpnext.utils.map_current_doc({
+ method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
+ source_doctype: "Request for Quotation",
+ target: me.frm,
+ setters: {
+ transaction_date: null,
+ },
+ get_query_filters: {
+ supplier: me.frm.doc.supplier,
+ company: me.frm.doc.company,
+ },
+ get_query_method:
+ "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_rfq_containing_supplier",
+ });
+ },
+ __("Get Items From")
+ );
}
}
make_purchase_order() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
make_quotation() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_quotation",
- frm: cur_frm
- })
-
+ frm: cur_frm,
+ });
}
};
// for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.buying.SupplierQuotationController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.buying.SupplierQuotationController({ frm: cur_frm }));
-cur_frm.fields_dict['items'].grid.get_field('project').get_query =
- function(doc, cdt, cdn) {
- return{
- filters:[
- ['Project', 'status', 'not in', 'Completed, Cancelled']
- ]
- }
- }
+cur_frm.fields_dict["items"].grid.get_field("project").get_query = function (doc, cdt, cdn) {
+ return {
+ filters: [["Project", "status", "not in", "Completed, Cancelled"]],
+ };
+};
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js
index 73685ca..99fe24d 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js
@@ -1,22 +1,22 @@
-frappe.listview_settings['Supplier Quotation'] = {
+frappe.listview_settings["Supplier Quotation"] = {
add_fields: ["supplier", "base_grand_total", "status", "company", "currency"],
- get_indicator: function(doc) {
- if(doc.status==="Ordered") {
+ get_indicator: function (doc) {
+ if (doc.status === "Ordered") {
return [__("Ordered"), "green", "status,=,Ordered"];
- } else if(doc.status==="Rejected") {
+ } else if (doc.status === "Rejected") {
return [__("Lost"), "gray", "status,=,Lost"];
- } else if(doc.status==="Expired") {
+ } else if (doc.status === "Expired") {
return [__("Expired"), "gray", "status,=,Expired"];
}
},
- onload: function(listview) {
- listview.page.add_action_item(__("Purchase Order"), ()=>{
+ onload: function (listview) {
+ listview.page.add_action_item(__("Purchase Order"), () => {
erpnext.bulk_transaction_processing.create(listview, "Supplier Quotation", "Purchase Order");
});
- listview.page.add_action_item(__("Purchase Invoice"), ()=>{
+ listview.page.add_action_item(__("Purchase Invoice"), () => {
erpnext.bulk_transaction_processing.create(listview, "Supplier Quotation", "Purchase Invoice");
});
- }
+ },
};
diff --git a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
index e9d5678..ca806f8 100644
--- a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
+++ b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
@@ -2,55 +2,51 @@
// For license information, please see license.txt
frappe.ui.form.on("Supplier Scorecard", {
- setup: function(frm) {
- if (frm.doc.indicator_color !== "") {
- frm.set_indicator_formatter("status", function(doc) {
+ setup: function (frm) {
+ if (frm.doc.indicator_color !== "") {
+ frm.set_indicator_formatter("status", function (doc) {
return doc.indicator_color.toLowerCase();
});
}
},
- onload: function(frm) {
- if (frm.doc.__unsaved == 1) {
+ onload: function (frm) {
+ if (frm.doc.__unsaved == 1) {
loadAllStandings(frm);
}
},
- load_criteria: function(frm) {
+ load_criteria: function (frm) {
frappe.call({
method: "erpnext.buying.doctype.supplier_scorecard_criteria.supplier_scorecard_criteria.get_criteria_list",
- callback: function(r) {
- frm.set_value('criteria', []);
- for (var i = 0; i < r.message.length; i++)
- {
+ callback: function (r) {
+ frm.set_value("criteria", []);
+ for (var i = 0; i < r.message.length; i++) {
var row = frm.add_child("criteria");
row.criteria_name = r.message[i].name;
frm.script_manager.trigger("criteria_name", row.doctype, row.name);
}
refresh_field("criteria");
- }
+ },
});
- }
-
+ },
});
frappe.ui.form.on("Supplier Scorecard Scoring Standing", {
-
- standing_name: function(frm, cdt, cdn) {
+ standing_name: function (frm, cdt, cdn) {
var d = frappe.get_doc(cdt, cdn);
if (d.standing_name) {
return frm.call({
method: "erpnext.buying.doctype.supplier_scorecard_standing.supplier_scorecard_standing.get_scoring_standing",
child: d,
args: {
- standing_name: d.standing_name
- }
+ standing_name: d.standing_name,
+ },
});
}
- }
+ },
});
frappe.ui.form.on("Supplier Scorecard Scoring Criteria", {
-
- criteria_name: function(frm, cdt, cdn) {
+ criteria_name: function (frm, cdt, cdn) {
var d = frappe.get_doc(cdt, cdn);
if (d.criteria_name) {
return frm.call({
@@ -58,36 +54,34 @@
args: {
fieldname: "weight",
doctype: "Supplier Scorecard Criteria",
- filters: {name: d.criteria_name}
+ filters: { name: d.criteria_name },
},
- callback: function(r) {
- if(r.message){
+ callback: function (r) {
+ if (r.message) {
d.weight = r.message.weight;
- frm.refresh_field('criteria', 'weight');
+ frm.refresh_field("criteria", "weight");
}
- }
+ },
});
}
- }
+ },
});
-var loadAllStandings = function(frm) {
+var loadAllStandings = function (frm) {
frappe.call({
method: "erpnext.buying.doctype.supplier_scorecard_standing.supplier_scorecard_standing.get_standings_list",
- callback: function(r) {
- for (var j = 0; j < frm.doc.standings.length; j++)
- {
- if(!Object.prototype.hasOwnProperty.call(frm.doc.standings[j], "standing_name")) {
+ callback: function (r) {
+ for (var j = 0; j < frm.doc.standings.length; j++) {
+ if (!Object.prototype.hasOwnProperty.call(frm.doc.standings[j], "standing_name")) {
frm.get_field("standings").grid.grid_rows[j].remove();
}
}
- for (var i = 0; i < r.message.length; i++)
- {
+ for (var i = 0; i < r.message.length; i++) {
var new_row = frm.add_child("standings");
new_row.standing_name = r.message[i].name;
frm.script_manager.trigger("standing_name", new_row.doctype, new_row.name);
}
refresh_field("standings");
- }
+ },
});
};
diff --git a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js
index edf0b04..87f43ab 100644
--- a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js
+++ b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js
@@ -1,16 +1,13 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.listview_settings["Supplier Scorecard"] = {
add_fields: ["indicator_color", "status"],
- get_indicator: function(doc) {
-
+ get_indicator: function (doc) {
if (doc.indicator_color) {
return [__(doc.status), doc.indicator_color.toLowerCase(), "status,=," + doc.status];
} else {
return [__("Unknown"), "gray", "status,=,''"];
}
},
-
-}
+};
diff --git a/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js b/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js
index 2186cd8..70a0c0b 100644
--- a/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js
+++ b/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js
@@ -2,5 +2,5 @@
// For license information, please see license.txt
frappe.ui.form.on("Supplier Scorecard Criteria", {
- refresh: function() {}
+ refresh: function () {},
});
diff --git a/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js b/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js
index 62079cc..3b6f543 100644
--- a/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js
+++ b/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js
@@ -2,12 +2,12 @@
// For license information, please see license.txt
frappe.ui.form.on("Supplier Scorecard Period", {
- onload: function(frm) {
+ onload: function (frm) {
let criteria_grid = frm.get_field("criteria").grid;
criteria_grid.toggle_enable("criteria_name", false);
criteria_grid.toggle_enable("weight", false);
criteria_grid.toggle_display("max_score", true);
criteria_grid.toggle_display("formula", true);
criteria_grid.toggle_display("score", true);
- }
+ },
});
diff --git a/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js b/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js
index 22756e7..9bdd670 100644
--- a/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js
+++ b/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js
@@ -1,9 +1,6 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.ui.form.on("Supplier Scorecard Standing", {
- refresh: function() {
-
- }
+ refresh: function () {},
});
diff --git a/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js b/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js
index b3b4321..4423cab 100644
--- a/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js
+++ b/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js
@@ -2,7 +2,5 @@
// For license information, please see license.txt
frappe.ui.form.on("Supplier Scorecard Variable", {
- refresh: function() {
-
- }
+ refresh: function () {},
});
diff --git a/erpnext/buying/report/procurement_tracker/procurement_tracker.js b/erpnext/buying/report/procurement_tracker/procurement_tracker.js
index 7e4822c..ada528b 100644
--- a/erpnext/buying/report/procurement_tracker/procurement_tracker.js
+++ b/erpnext/buying/report/procurement_tracker/procurement_tracker.js
@@ -1,9 +1,8 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Procurement Tracker"] = {
- "filters": [
+ filters: [
{
fieldname: "company",
label: __("Company"),
@@ -30,10 +29,10 @@
default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
},
{
- fieldname:"to_date",
+ fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
},
- ]
-}
+ ],
+};
diff --git a/erpnext/buying/report/purchase_analytics/purchase_analytics.js b/erpnext/buying/report/purchase_analytics/purchase_analytics.js
index 250b334..23a1880 100644
--- a/erpnext/buying/report/purchase_analytics/purchase_analytics.js
+++ b/erpnext/buying/report/purchase_analytics/purchase_analytics.js
@@ -1,49 +1,48 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Purchase Analytics"] = {
- "filters": [
+ filters: [
{
fieldname: "tree_type",
label: __("Tree Type"),
fieldtype: "Select",
- options: ["Supplier Group","Supplier","Item Group","Item"],
+ options: ["Supplier Group", "Supplier", "Item Group", "Item"],
default: "Supplier",
- reqd: 1
+ reqd: 1,
},
{
fieldname: "doc_type",
label: __("based_on"),
fieldtype: "Select",
- options: ["Purchase Order","Purchase Receipt","Purchase Invoice"],
+ options: ["Purchase Order", "Purchase Receipt", "Purchase Invoice"],
default: "Purchase Invoice",
- reqd: 1
+ reqd: 1,
},
{
fieldname: "value_quantity",
label: __("Value Or Qty"),
fieldtype: "Select",
options: [
- { "value": "Value", "label": __("Value") },
- { "value": "Quantity", "label": __("Quantity") },
+ { value: "Value", label: __("Value") },
+ { value: "Quantity", label: __("Quantity") },
],
default: "Value",
- reqd: 1
+ reqd: 1,
},
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- reqd: 1
+ reqd: 1,
},
{
- fieldname:"to_date",
+ fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- reqd: 1
+ reqd: 1,
},
{
fieldname: "company",
@@ -51,22 +50,21 @@
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
- reqd: 1
+ reqd: 1,
},
{
fieldname: "range",
label: __("Range"),
fieldtype: "Select",
options: [
- { "value": "Weekly", "label": __("Weekly") },
- { "value": "Monthly", "label": __("Monthly") },
- { "value": "Quarterly", "label": __("Quarterly") },
- { "value": "Yearly", "label": __("Yearly") }
+ { value: "Weekly", label: __("Weekly") },
+ { value: "Monthly", label: __("Monthly") },
+ { value: "Quarterly", label: __("Quarterly") },
+ { value: "Yearly", label: __("Yearly") },
],
default: "Monthly",
- reqd: 1
- }
-
+ reqd: 1,
+ },
],
get_datatable_options(options) {
return Object.assign(options, {
@@ -75,34 +73,26 @@
onCheckRow: function (data) {
if (!data) return;
- const data_doctype = $(
- data[2].html
- )[0].attributes.getNamedItem("data-doctype").value;
+ const data_doctype = $(data[2].html)[0].attributes.getNamedItem("data-doctype").value;
const tree_type = frappe.query_report.filters[0].value;
if (data_doctype != tree_type) return;
let row_name = data[2].content;
let length = data.length;
- let row_values = '';
+ let row_values = "";
if (tree_type == "Supplier") {
- row_values = data
- .slice(4, length - 1)
- .map(function (column) {
- return column.content;
- });
+ row_values = data.slice(4, length - 1).map(function (column) {
+ return column.content;
+ });
} else if (tree_type == "Item") {
- row_values = data
- .slice(5, length - 1)
- .map(function (column) {
- return column.content;
- });
+ row_values = data.slice(5, length - 1).map(function (column) {
+ return column.content;
+ });
} else {
- row_values = data
- .slice(3, length - 1)
- .map(function (column) {
- return column.content;
- });
+ row_values = data.slice(3, length - 1).map(function (column) {
+ return column.content;
+ });
}
let entry = {
@@ -113,13 +103,13 @@
let raw_data = frappe.query_report.chart.data;
let new_datasets = raw_data.datasets;
- let element_found = new_datasets.some((element, index, array)=>{
- if(element.name == row_name){
- array.splice(index, 1)
- return true
+ let element_found = new_datasets.some((element, index, array) => {
+ if (element.name == row_name) {
+ array.splice(index, 1);
+ return true;
}
- return false
- })
+ return false;
+ });
if (!element_found) {
new_datasets.push(entry);
@@ -128,12 +118,14 @@
labels: raw_data.labels,
datasets: new_datasets,
};
- const new_options = Object.assign({}, frappe.query_report.chart_options, {data: new_data});
+ const new_options = Object.assign({}, frappe.query_report.chart_options, {
+ data: new_data,
+ });
frappe.query_report.render_chart(new_options);
frappe.query_report.raw_chart_data = new_data;
},
},
});
- }
-}
+ },
+};
diff --git a/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js b/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js
index 3bf4f2b..8575633 100644
--- a/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js
+++ b/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js
@@ -1,80 +1,79 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Purchase Order Analysis"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "width": "80",
- "options": "Company",
- "reqd": 1,
- "default": frappe.defaults.get_default("company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ width: "80",
+ options: "Company",
+ reqd: 1,
+ default: frappe.defaults.get_default("company"),
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "width": "80",
- "reqd": 1,
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ width: "80",
+ reqd: 1,
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "width": "80",
- "reqd": 1,
- "default": frappe.datetime.get_today()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ width: "80",
+ reqd: 1,
+ default: frappe.datetime.get_today(),
},
{
- "fieldname":"project",
- "label": __("Project"),
- "fieldtype": "Link",
- "width": "80",
- "options": "Project"
+ fieldname: "project",
+ label: __("Project"),
+ fieldtype: "Link",
+ width: "80",
+ options: "Project",
},
{
- "fieldname": "name",
- "label": __("Purchase Order"),
- "fieldtype": "Link",
- "width": "80",
- "options": "Purchase Order",
- "get_query": () =>{
+ fieldname: "name",
+ label: __("Purchase Order"),
+ fieldtype: "Link",
+ width: "80",
+ options: "Purchase Order",
+ get_query: () => {
return {
- filters: { "docstatus": 1 }
- }
- }
+ filters: { docstatus: 1 },
+ };
+ },
},
{
- "fieldname": "status",
- "label": __("Status"),
- "fieldtype": "MultiSelectList",
- "width": "80",
- get_data: function(txt) {
- let status = ["To Pay", "To Bill", "To Receive", "To Receive and Bill", "Completed"]
- let options = []
- for (let option of status){
+ fieldname: "status",
+ label: __("Status"),
+ fieldtype: "MultiSelectList",
+ width: "80",
+ get_data: function (txt) {
+ let status = ["To Pay", "To Bill", "To Receive", "To Receive and Bill", "Completed"];
+ let options = [];
+ for (let option of status) {
options.push({
- "value": option,
- "label": __(option),
- "description": ""
- })
+ value: option,
+ label: __(option),
+ description: "",
+ });
}
- return options
- }
+ return options;
+ },
},
{
- "fieldname": "group_by_po",
- "label": __("Group by Purchase Order"),
- "fieldtype": "Check",
- "default": 0
- }
+ fieldname: "group_by_po",
+ label: __("Group by Purchase Order"),
+ fieldtype: "Check",
+ default: 0,
+ },
],
- "formatter": function (value, row, column, data, default_formatter) {
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
let format_fields = ["received_qty", "billed_amount"];
@@ -82,5 +81,5 @@
value = "<span style='color:green'>" + value + "</span>";
}
return value;
- }
+ },
};
diff --git a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
index 90919dc..366fff1 100644
--- a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
+++ b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
@@ -1,8 +1,8 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function () {
frappe.query_reports["Purchase Order Trends"] = {
- filters: erpnext.get_purchase_trends_filters()
- }
+ filters: erpnext.get_purchase_trends_filters(),
+ };
});
diff --git a/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js b/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js
index cb05109..039ac2c 100644
--- a/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js
+++ b/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js
@@ -1,76 +1,75 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Requested Items to Order and Receive"] = {
- "filters": [
+ filters: [
{
- "fieldname": "company",
- "label": __("Company"),
- "fieldtype": "Link",
- "width": "80",
- "options": "Company",
- "reqd": 1,
- "default": frappe.defaults.get_default("company")
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ width: "80",
+ options: "Company",
+ reqd: 1,
+ default: frappe.defaults.get_default("company"),
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "width": "80",
- "reqd": 1,
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ width: "80",
+ reqd: 1,
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "width": "80",
- "reqd": 1,
- "default": frappe.datetime.get_today()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ width: "80",
+ reqd: 1,
+ default: frappe.datetime.get_today(),
},
{
- "fieldname": "material_request",
- "label": __("Material Request"),
- "fieldtype": "Link",
- "width": "80",
- "options": "Material Request",
- "get_query": () => {
+ fieldname: "material_request",
+ label: __("Material Request"),
+ fieldtype: "Link",
+ width: "80",
+ options: "Material Request",
+ get_query: () => {
return {
filters: {
- "docstatus": 1,
- "material_request_type": "Purchase",
- "per_received": ["<", 100]
- }
- }
- }
+ docstatus: 1,
+ material_request_type: "Purchase",
+ per_received: ["<", 100],
+ },
+ };
+ },
},
{
- "fieldname": "item_code",
- "label": __("Item"),
- "fieldtype": "Link",
- "width": "80",
- "options": "Item",
- "get_query": () => {
+ fieldname: "item_code",
+ label: __("Item"),
+ fieldtype: "Link",
+ width: "80",
+ options: "Item",
+ get_query: () => {
return {
- query: "erpnext.controllers.queries.item_query"
- }
- }
+ query: "erpnext.controllers.queries.item_query",
+ };
+ },
},
{
- "fieldname": "group_by_mr",
- "label": __("Group by Material Request"),
- "fieldtype": "Check",
- "default": 0
- }
+ fieldname: "group_by_mr",
+ label: __("Group by Material Request"),
+ fieldtype: "Check",
+ default: 0,
+ },
],
- "formatter": function (value, row, column, data, default_formatter) {
+ formatter: function (value, row, column, data, default_formatter) {
value = default_formatter(value, row, column, data);
if (column.fieldname == "ordered_qty" && data && data.ordered_qty > 0) {
value = "<span style='color:green'>" + value + "</span>";
}
return value;
- }
+ },
};
diff --git a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js
index 800b8ab..8606fae 100644
--- a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js
+++ b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js
@@ -1,42 +1,41 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Subcontract Order Summary"] = {
- "filters": [
+ filters: [
{
label: __("Company"),
fieldname: "company",
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
- reqd: 1
+ reqd: 1,
},
{
label: __("From Date"),
fieldname: "from_date",
fieldtype: "Date",
default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- reqd: 1
+ reqd: 1,
},
{
label: __("To Date"),
fieldname: "to_date",
fieldtype: "Date",
default: frappe.datetime.get_today(),
- reqd: 1
+ reqd: 1,
},
{
label: __("Order Type"),
fieldname: "order_type",
fieldtype: "Select",
options: ["Purchase Order", "Subcontracting Order"],
- default: "Subcontracting Order"
+ default: "Subcontracting Order",
},
{
label: __("Subcontract Order"),
fieldname: "name",
- fieldtype: "Data"
- }
- ]
-};
\ No newline at end of file
+ fieldtype: "Data",
+ },
+ ],
+};
diff --git a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js
index 35be2a9..f20d249 100644
--- a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js
+++ b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js
@@ -1,36 +1,35 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Subcontracted Item To Be Received"] = {
- "filters": [
+ filters: [
{
label: __("Order Type"),
fieldname: "order_type",
fieldtype: "Select",
options: ["Purchase Order", "Subcontracting Order"],
- default: "Subcontracting Order"
+ default: "Subcontracting Order",
},
{
fieldname: "supplier",
label: __("Supplier"),
fieldtype: "Link",
options: "Supplier",
- reqd: 1
+ reqd: 1,
},
{
- fieldname:"from_date",
+ fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- reqd: 1
+ reqd: 1,
},
{
- fieldname:"to_date",
+ fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.datetime.get_today(),
- reqd: 1
+ reqd: 1,
},
- ]
+ ],
};
diff --git a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js
index 33b26dc..999fae5 100644
--- a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js
+++ b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js
@@ -1,36 +1,35 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Subcontracted Raw Materials To Be Transferred"] = {
- "filters": [
+ filters: [
{
label: __("Order Type"),
fieldname: "order_type",
fieldtype: "Select",
options: ["Purchase Order", "Subcontracting Order"],
- default: "Subcontracting Order"
+ default: "Subcontracting Order",
},
{
fieldname: "supplier",
label: __("Supplier"),
fieldtype: "Link",
options: "Supplier",
- reqd: 1
+ reqd: 1,
},
{
- fieldname:"from_date",
+ fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
- reqd: 1
+ reqd: 1,
},
{
- fieldname:"to_date",
+ fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.datetime.get_today(),
- reqd: 1
+ reqd: 1,
},
- ]
-}
+ ],
+};
diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js
index 579c0a6..c109abd 100644
--- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js
+++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js
@@ -9,23 +9,23 @@
options: "Company",
fieldname: "company",
default: frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ reqd: 1,
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "width": "80",
- "reqd": 1,
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ width: "80",
+ reqd: 1,
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "width": "80",
- "reqd": 1,
- "default": frappe.datetime.get_today()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ width: "80",
+ reqd: 1,
+ default: frappe.datetime.get_today(),
},
{
default: "",
@@ -34,34 +34,34 @@
fieldname: "item_code",
fieldtype: "Link",
get_query: () => {
- let quote = frappe.query_report.get_filter_value('supplier_quotation');
+ let quote = frappe.query_report.get_filter_value("supplier_quotation");
if (quote != "") {
return {
query: "erpnext.stock.doctype.quality_inspection.quality_inspection.item_query",
filters: {
- "from": "Supplier Quotation Item",
- "parent": quote
- }
- }
+ from: "Supplier Quotation Item",
+ parent: quote,
+ },
+ };
}
- }
+ },
},
{
fieldname: "supplier",
label: __("Supplier"),
fieldtype: "MultiSelectList",
- get_data: function(txt) {
- return frappe.db.get_link_options('Supplier', txt);
- }
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Supplier", txt);
+ },
},
{
fieldtype: "MultiSelectList",
label: __("Supplier Quotation"),
fieldname: "supplier_quotation",
default: "",
- get_data: function(txt) {
- return frappe.db.get_link_options('Supplier Quotation', txt, {'docstatus': ["<", 2]});
- }
+ get_data: function (txt) {
+ return frappe.db.get_link_options("Supplier Quotation", txt, { docstatus: ["<", 2] });
+ },
},
{
fieldtype: "Link",
@@ -70,37 +70,36 @@
fieldname: "request_for_quotation",
default: "",
get_query: () => {
- return { filters: { "docstatus": ["<", 2] } }
- }
+ return { filters: { docstatus: ["<", 2] } };
+ },
},
{
- "fieldname":"group_by",
- "label": __("Group by"),
- "fieldtype": "Select",
- "options": [__("Group by Supplier"), __("Group by Item")],
- "default": __("Group by Supplier")
+ fieldname: "group_by",
+ label: __("Group by"),
+ fieldtype: "Select",
+ options: [__("Group by Supplier"), __("Group by Item")],
+ default: __("Group by Supplier"),
},
{
fieldtype: "Check",
label: __("Include Expired"),
fieldname: "include_expired",
- default: 0
- }
+ default: 0,
+ },
],
formatter: (value, row, column, data, default_formatter) => {
value = default_formatter(value, row, column, data);
- if(column.fieldname === "valid_till" && data.valid_till){
- if(frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 1){
+ if (column.fieldname === "valid_till" && data.valid_till) {
+ if (frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 1) {
value = `<div style="color:red">${value}</div>`;
- }
- else if (frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 7){
+ } else if (frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 7) {
value = `<div style="color:darkorange">${value}</div>`;
}
}
- if(column.fieldname === "price_per_unit" && data.price_per_unit && data.min && data.min === 1){
+ if (column.fieldname === "price_per_unit" && data.price_per_unit && data.min && data.min === 1) {
value = `<div style="color:green">${value}</div>`;
}
return value;
@@ -108,48 +107,53 @@
onload: (report) => {
// Create a button for setting the default supplier
- report.page.add_inner_button(__("Select Default Supplier"), () => {
- let reporter = frappe.query_reports["Supplier Quotation Comparison"];
+ report.page.add_inner_button(
+ __("Select Default Supplier"),
+ () => {
+ let reporter = frappe.query_reports["Supplier Quotation Comparison"];
- //Always make a new one so that the latest values get updated
- reporter.make_default_supplier_dialog(report);
- }, __("Tools"));
-
+ //Always make a new one so that the latest values get updated
+ reporter.make_default_supplier_dialog(report);
+ },
+ __("Tools")
+ );
},
make_default_supplier_dialog: (report) => {
// Get the name of the item to change
- if(!report.data) return;
+ if (!report.data) return;
let filters = report.get_values();
let item_code = filters.item_code;
// Get a list of the suppliers (with a blank as well) for the user to select
- let suppliers = $.map(report.data, (row, idx)=>{ return row.supplier_name })
+ let suppliers = $.map(report.data, (row, idx) => {
+ return row.supplier_name;
+ });
// Create a dialog window for the user to pick their supplier
let dialog = new frappe.ui.Dialog({
- title: __('Select Default Supplier'),
+ title: __("Select Default Supplier"),
fields: [
{
reqd: 1,
- label: 'Supplier',
- fieldtype: 'Link',
- options: 'Supplier',
- fieldname: 'supplier',
+ label: "Supplier",
+ fieldtype: "Link",
+ options: "Supplier",
+ fieldname: "supplier",
get_query: () => {
return {
filters: {
- 'name': ['in', suppliers]
- }
- }
- }
- }
- ]
+ name: ["in", suppliers],
+ },
+ };
+ },
+ },
+ ],
});
dialog.set_primary_action(__("Set Default Supplier"), () => {
let values = dialog.get_values();
- if(values) {
+ if (values) {
// Set the default_supplier field of the appropriate Item to the selected supplier
frappe.call({
method: "frappe.client.set_value",
@@ -163,10 +167,10 @@
callback: (r) => {
frappe.msgprint(__("Successfully Set Supplier"));
dialog.hide();
- }
+ },
});
}
});
dialog.show();
- }
-}
+ },
+};
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index a3db196..c543dfc 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -1864,7 +1864,7 @@
(ple.against_voucher_type == self.doctype)
& (ple.against_voucher_no == self.name)
& (ple.party == party)
- & (ple.docstatus == 1)
+ & (ple.delinked == 0)
& (ple.company == self.company)
)
.run(as_dict=True)
@@ -1880,7 +1880,10 @@
advance_paid, precision=self.precision("advance_paid"), currency=advance.account_currency
)
- frappe.db.set_value(self.doctype, self.name, "party_account_currency", advance.account_currency)
+ if advance.account_currency:
+ frappe.db.set_value(
+ self.doctype, self.name, "party_account_currency", advance.account_currency
+ )
if advance.account_currency == self.currency:
order_total = self.get("rounded_total") or self.grand_total
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 91ee53a..8211857 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -559,7 +559,7 @@
{
"incoming_rate": incoming_rate,
"recalculate_rate": 1
- if (self.is_subcontracted and (d.bom or d.fg_item)) or d.from_warehouse
+ if (self.is_subcontracted and (d.bom or d.get("fg_item"))) or d.from_warehouse
else 0,
}
)
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index c46ef50..0d64188 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -352,7 +352,9 @@
ifelse = CustomFunction("IF", ["condition", "then", "else"])
if filters and filters.get("customer"):
- qb_filter_and_conditions.append(proj.customer == filters.get("customer"))
+ qb_filter_and_conditions.append(
+ (proj.customer == filters.get("customer")) | proj.customer.isnull() | proj.customer == ""
+ )
qb_filter_and_conditions.append(proj.status.notin(["Completed", "Cancelled"]))
@@ -439,9 +441,21 @@
filtered_batches = get_filterd_batches(batches)
+ if filters.get("is_inward"):
+ filtered_batches.extend(get_empty_batches(filters))
+
return filtered_batches
+def get_empty_batches(filters):
+ return frappe.get_all(
+ "Batch",
+ fields=["name", "batch_qty"],
+ filters={"item": filters.get("item_code"), "batch_qty": 0.0},
+ as_list=1,
+ )
+
+
def get_filterd_batches(data):
batches = OrderedDict()
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index a67fbdc..a3fbdda 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -159,9 +159,6 @@
row.serial_no = clean_serial_no_string(row.serial_no)
def make_bundle_using_old_serial_batch_fields(self, table_name=None):
- from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
- from erpnext.stock.serial_batch_bundle import SerialBatchCreation
-
if self.get("_action") == "update_after_submit":
return
@@ -190,58 +187,78 @@
if row.use_serial_batch_fields and (
not row.serial_and_batch_bundle and not row.get("rejected_serial_and_batch_bundle")
):
- if self.doctype == "Stock Reconciliation":
- qty = row.qty
- type_of_transaction = "Inward"
- warehouse = row.warehouse
- elif table_name == "packed_items":
- qty = row.qty
- warehouse = row.warehouse
- type_of_transaction = "Outward"
- if self.is_return:
- type_of_transaction = "Inward"
- else:
- qty = row.stock_qty if self.doctype != "Stock Entry" else row.transfer_qty
- type_of_transaction = get_type_of_transaction(self, row)
- warehouse = (
- row.warehouse if self.doctype != "Stock Entry" else row.s_warehouse or row.t_warehouse
- )
+ bundle_details = {
+ "item_code": row.item_code,
+ "posting_date": self.posting_date,
+ "posting_time": self.posting_time,
+ "voucher_type": self.doctype,
+ "voucher_no": self.name,
+ "voucher_detail_no": row.name,
+ "company": self.company,
+ "is_rejected": 1 if row.get("rejected_warehouse") else 0,
+ "use_serial_batch_fields": row.use_serial_batch_fields,
+ "do_not_submit": True,
+ }
- sn_doc = SerialBatchCreation(
- {
- "item_code": row.item_code,
- "warehouse": warehouse,
- "posting_date": self.posting_date,
- "posting_time": self.posting_time,
- "voucher_type": self.doctype,
- "voucher_no": self.name,
- "voucher_detail_no": row.name,
- "qty": qty,
- "type_of_transaction": type_of_transaction,
- "company": self.company,
- "is_rejected": 1 if row.get("rejected_warehouse") else 0,
- "serial_nos": get_serial_nos(row.serial_no) if row.serial_no else None,
- "batches": frappe._dict({row.batch_no: qty}) if row.batch_no else None,
- "batch_no": row.batch_no,
- "use_serial_batch_fields": row.use_serial_batch_fields,
- "do_not_submit": True,
- }
- ).make_serial_and_batch_bundle()
+ if row.qty:
+ self.update_bundle_details(bundle_details, table_name, row)
+ self.create_serial_batch_bundle(bundle_details, row)
- if sn_doc.is_rejected:
- row.rejected_serial_and_batch_bundle = sn_doc.name
- row.db_set(
- {
- "rejected_serial_and_batch_bundle": sn_doc.name,
- }
- )
- else:
- row.serial_and_batch_bundle = sn_doc.name
- row.db_set(
- {
- "serial_and_batch_bundle": sn_doc.name,
- }
- )
+ if row.get("rejected_qty"):
+ self.update_bundle_details(bundle_details, table_name, row, is_rejected=True)
+ self.create_serial_batch_bundle(bundle_details, row)
+
+ def update_bundle_details(self, bundle_details, table_name, row, is_rejected=False):
+ from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
+
+ # Since qty field is different for different doctypes
+ qty = row.get("qty")
+ warehouse = row.get("warehouse")
+
+ if table_name == "packed_items":
+ type_of_transaction = "Inward"
+ if not self.is_return:
+ type_of_transaction = "Outward"
+ else:
+ type_of_transaction = get_type_of_transaction(self, row)
+
+ if hasattr(row, "stock_qty"):
+ qty = row.stock_qty
+
+ if self.doctype == "Stock Entry":
+ qty = row.transfer_qty
+ warehouse = row.s_warehouse or row.t_warehouse
+
+ serial_nos = row.serial_no
+ if is_rejected:
+ serial_nos = row.get("rejected_serial_no")
+ type_of_transaction = "Inward" if not self.is_return else "Outward"
+ qty = row.get("rejected_qty")
+ warehouse = row.get("rejected_warehouse")
+
+ bundle_details.update(
+ {
+ "qty": qty,
+ "is_rejected": is_rejected,
+ "type_of_transaction": type_of_transaction,
+ "warehouse": warehouse,
+ "batches": frappe._dict({row.batch_no: qty}) if row.batch_no else None,
+ "serial_nos": get_serial_nos(serial_nos) if serial_nos else None,
+ "batch_no": row.batch_no,
+ }
+ )
+
+ def create_serial_batch_bundle(self, bundle_details, row):
+ from erpnext.stock.serial_batch_bundle import SerialBatchCreation
+
+ sn_doc = SerialBatchCreation(bundle_details).make_serial_and_batch_bundle()
+
+ field = "serial_and_batch_bundle"
+ if bundle_details.get("is_rejected"):
+ field = "rejected_serial_and_batch_bundle"
+
+ row.set(field, sn_doc.name)
+ row.db_set({field: sn_doc.name})
def validate_serial_nos_and_batches_with_bundle(self, row):
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py
index eac35b0..e66fe8b 100644
--- a/erpnext/controllers/subcontracting_controller.py
+++ b/erpnext/controllers/subcontracting_controller.py
@@ -859,6 +859,7 @@
item,
{
"warehouse": item.rejected_warehouse,
+ "serial_and_batch_bundle": item.get("rejected_serial_and_batch_bundle"),
"actual_qty": flt(item.rejected_qty) * flt(item.conversion_factor),
"incoming_rate": 0.0,
},
diff --git a/erpnext/crm/doctype/appointment/appointment.js b/erpnext/crm/doctype/appointment/appointment.js
index ca38121..54aa9a6 100644
--- a/erpnext/crm/doctype/appointment/appointment.js
+++ b/erpnext/crm/doctype/appointment/appointment.js
@@ -1,26 +1,26 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Appointment', {
- refresh: function(frm) {
- if(frm.doc.lead){
- frm.add_custom_button(frm.doc.lead,()=>{
+frappe.ui.form.on("Appointment", {
+ refresh: function (frm) {
+ if (frm.doc.lead) {
+ frm.add_custom_button(frm.doc.lead, () => {
frappe.set_route("Form", "Lead", frm.doc.lead);
});
}
- if(frm.doc.calendar_event){
- frm.add_custom_button(__(frm.doc.calendar_event),()=>{
+ if (frm.doc.calendar_event) {
+ frm.add_custom_button(__(frm.doc.calendar_event), () => {
frappe.set_route("Form", "Event", frm.doc.calendar_event);
});
}
},
- onload: function(frm){
- frm.set_query("appointment_with", function(){
+ onload: function (frm) {
+ frm.set_query("appointment_with", function () {
return {
- filters : {
- "name": ["in", ["Customer", "Lead"]]
- }
+ filters: {
+ name: ["in", ["Customer", "Lead"]],
+ },
};
});
- }
+ },
});
diff --git a/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js b/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js
index 0c64eb8..255e665 100644
--- a/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js
+++ b/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js
@@ -1,10 +1,14 @@
-frappe.ui.form.on('Appointment Booking Settings', 'validate',check_times);
+frappe.ui.form.on("Appointment Booking Settings", "validate", check_times);
function check_times(frm) {
$.each(frm.doc.availability_of_slots || [], function (i, d) {
- let from_time = Date.parse('01/01/2019 ' + d.from_time);
- let to_time = Date.parse('01/01/2019 ' + d.to_time);
+ let from_time = Date.parse("01/01/2019 " + d.from_time);
+ let to_time = Date.parse("01/01/2019 " + d.to_time);
if (from_time > to_time) {
- frappe.throw(__('In row {0} of Appointment Booking Slots: "To Time" must be later than "From Time".', [i + 1]));
+ frappe.throw(
+ __('In row {0} of Appointment Booking Slots: "To Time" must be later than "From Time".', [
+ i + 1,
+ ])
+ );
}
});
}
diff --git a/erpnext/crm/doctype/campaign/campaign.js b/erpnext/crm/doctype/campaign/campaign.js
index cac45c6..9e4a0a9 100644
--- a/erpnext/crm/doctype/campaign/campaign.js
+++ b/erpnext/crm/doctype/campaign/campaign.js
@@ -1,17 +1,25 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Campaign', {
- refresh: function(frm) {
+frappe.ui.form.on("Campaign", {
+ refresh: function (frm) {
erpnext.toggle_naming_series();
if (frm.is_new()) {
- frm.toggle_display("naming_series", frappe.boot.sysdefaults.campaign_naming_by=="Naming Series");
+ frm.toggle_display(
+ "naming_series",
+ frappe.boot.sysdefaults.campaign_naming_by == "Naming Series"
+ );
} else {
- cur_frm.add_custom_button(__("View Leads"), function() {
- frappe.route_options = {"source": "Campaign", "campaign_name": frm.doc.name};
- frappe.set_route("List", "Lead");
- }, "fa fa-list", true);
+ cur_frm.add_custom_button(
+ __("View Leads"),
+ function () {
+ frappe.route_options = { source: "Campaign", campaign_name: frm.doc.name };
+ frappe.set_route("List", "Lead");
+ },
+ "fa fa-list",
+ true
+ );
}
- }
+ },
});
diff --git a/erpnext/crm/doctype/competitor/competitor.js b/erpnext/crm/doctype/competitor/competitor.js
index a5b617d..abd5934 100644
--- a/erpnext/crm/doctype/competitor/competitor.js
+++ b/erpnext/crm/doctype/competitor/competitor.js
@@ -1,8 +1,7 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Competitor', {
+frappe.ui.form.on("Competitor", {
// refresh: function(frm) {
-
// }
});
diff --git a/erpnext/crm/doctype/contract/contract.js b/erpnext/crm/doctype/contract/contract.js
index 7848de7..8d44c22 100644
--- a/erpnext/crm/doctype/contract/contract.js
+++ b/erpnext/crm/doctype/contract/contract.js
@@ -5,12 +5,12 @@
contract_template: function (frm) {
if (frm.doc.contract_template) {
frappe.call({
- method: 'erpnext.crm.doctype.contract_template.contract_template.get_contract_template',
+ method: "erpnext.crm.doctype.contract_template.contract_template.get_contract_template",
args: {
template_name: frm.doc.contract_template,
- doc: frm.doc
+ doc: frm.doc,
},
- callback: function(r) {
+ callback: function (r) {
if (r && r.message) {
let contract_template = r.message.contract_template;
frm.set_value("contract_terms", r.message.contract_terms);
@@ -18,15 +18,15 @@
if (frm.doc.requires_fulfilment) {
// Populate the fulfilment terms table from a contract template, if any
- r.message.contract_template.fulfilment_terms.forEach(element => {
+ r.message.contract_template.fulfilment_terms.forEach((element) => {
let d = frm.add_child("fulfilment_terms");
d.requirement = element.requirement;
});
frm.refresh_field("fulfilment_terms");
}
}
- }
+ },
});
}
- }
+ },
});
diff --git a/erpnext/crm/doctype/contract/contract_list.js b/erpnext/crm/doctype/contract/contract_list.js
index 7d56096..e1f8c22 100644
--- a/erpnext/crm/doctype/contract/contract_list.js
+++ b/erpnext/crm/doctype/contract/contract_list.js
@@ -1,4 +1,4 @@
-frappe.listview_settings['Contract'] = {
+frappe.listview_settings["Contract"] = {
add_fields: ["status"],
get_indicator: function (doc) {
if (doc.status == "Unsigned") {
diff --git a/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js b/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js
index f0525b1..bdc3fcc 100644
--- a/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js
+++ b/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Contract Fulfilment Checklist', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Contract Fulfilment Checklist", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/crm/doctype/contract_template/contract_template.js b/erpnext/crm/doctype/contract_template/contract_template.js
index 4f7c9a8..5044bbe 100644
--- a/erpnext/crm/doctype/contract_template/contract_template.js
+++ b/erpnext/crm/doctype/contract_template/contract_template.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Contract Template', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Contract Template", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/crm/doctype/crm_settings/crm_settings.js b/erpnext/crm/doctype/crm_settings/crm_settings.js
index c6569d8..0fb695a 100644
--- a/erpnext/crm/doctype/crm_settings/crm_settings.js
+++ b/erpnext/crm/doctype/crm_settings/crm_settings.js
@@ -1,8 +1,7 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('CRM Settings', {
+frappe.ui.form.on("CRM Settings", {
// refresh: function(frm) {
-
// }
});
diff --git a/erpnext/crm/doctype/email_campaign/email_campaign.js b/erpnext/crm/doctype/email_campaign/email_campaign.js
index b0e9353..7b090a0 100644
--- a/erpnext/crm/doctype/email_campaign/email_campaign.js
+++ b/erpnext/crm/doctype/email_campaign/email_campaign.js
@@ -1,8 +1,8 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Email Campaign', {
- email_campaign_for: function(frm) {
- frm.set_value('recipient', '');
- }
+frappe.ui.form.on("Email Campaign", {
+ email_campaign_for: function (frm) {
+ frm.set_value("recipient", "");
+ },
});
diff --git a/erpnext/crm/doctype/email_campaign/email_campaign.py b/erpnext/crm/doctype/email_campaign/email_campaign.py
index 17cf0e4..0ad19a4 100644
--- a/erpnext/crm/doctype/email_campaign/email_campaign.py
+++ b/erpnext/crm/doctype/email_campaign/email_campaign.py
@@ -144,3 +144,4 @@
for entry in email_campaigns:
email_campaign = frappe.get_doc("Email Campaign", entry.name)
email_campaign.update_status()
+ email_campaign.save()
diff --git a/erpnext/crm/doctype/email_campaign/email_campaign_list.js b/erpnext/crm/doctype/email_campaign/email_campaign_list.js
index adc399d..3020921 100644
--- a/erpnext/crm/doctype/email_campaign/email_campaign_list.js
+++ b/erpnext/crm/doctype/email_campaign/email_campaign_list.js
@@ -1,11 +1,11 @@
-frappe.listview_settings['Email Campaign'] = {
- get_indicator: function(doc) {
+frappe.listview_settings["Email Campaign"] = {
+ get_indicator: function (doc) {
var colors = {
- "Unsubscribed": "red",
- "Scheduled": "blue",
+ Unsubscribed: "red",
+ Scheduled: "blue",
"In Progress": "orange",
- "Completed": "green"
+ Completed: "green",
};
return [__(doc.status), colors[doc.status], "status,=," + doc.status];
- }
+ },
};
diff --git a/erpnext/crm/doctype/lead/lead.js b/erpnext/crm/doctype/lead/lead.js
index b1799ce..0b6cdf2 100644
--- a/erpnext/crm/doctype/lead/lead.js
+++ b/erpnext/crm/doctype/lead/lead.js
@@ -5,41 +5,45 @@
cur_frm.email_field = "email_id";
erpnext.LeadController = class LeadController extends frappe.ui.form.Controller {
- setup () {
+ setup() {
this.frm.make_methods = {
- 'Customer': this.make_customer,
- 'Quotation': this.make_quotation,
- 'Opportunity': this.make_opportunity
+ Customer: this.make_customer,
+ Quotation: this.make_quotation,
+ Opportunity: this.make_opportunity,
};
// For avoiding integration issues.
- this.frm.set_df_property('first_name', 'reqd', true);
+ this.frm.set_df_property("first_name", "reqd", true);
}
- onload () {
+ onload() {
this.frm.set_query("customer", function (doc, cdt, cdn) {
- return { query: "erpnext.controllers.queries.customer_query" }
+ return { query: "erpnext.controllers.queries.customer_query" };
});
this.frm.set_query("lead_owner", function (doc, cdt, cdn) {
- return { query: "frappe.core.doctype.user.user.user_query" }
+ return { query: "frappe.core.doctype.user.user.user_query" };
});
}
- refresh () {
+ refresh() {
var me = this;
let doc = this.frm.doc;
erpnext.toggle_naming_series();
if (!this.frm.is_new() && doc.__onload && !doc.__onload.is_customer) {
this.frm.add_custom_button(__("Customer"), this.make_customer, __("Create"));
- this.frm.add_custom_button(__("Opportunity"), function() {
- me.frm.trigger("make_opportunity");
- }, __("Create"));
+ this.frm.add_custom_button(
+ __("Opportunity"),
+ function () {
+ me.frm.trigger("make_opportunity");
+ },
+ __("Create")
+ );
this.frm.add_custom_button(__("Quotation"), this.make_quotation, __("Create"));
if (!doc.__onload.linked_prospects.length) {
this.frm.add_custom_button(__("Prospect"), this.make_prospect, __("Create"));
- this.frm.add_custom_button(__('Add to Prospect'), this.add_lead_to_prospect, __('Action'));
+ this.frm.add_custom_button(__("Add to Prospect"), this.add_lead_to_prospect, __("Action"));
}
}
@@ -53,51 +57,55 @@
this.show_activities();
}
- add_lead_to_prospect () {
+ add_lead_to_prospect() {
let me = this;
- frappe.prompt([
- {
- fieldname: 'prospect',
- label: __('Prospect'),
- fieldtype: 'Link',
- options: 'Prospect',
- reqd: 1
- }
- ],
- function(data) {
- frappe.call({
- method: 'erpnext.crm.doctype.lead.lead.add_lead_to_prospect',
- args: {
- 'lead': me.frm.doc.name,
- 'prospect': data.prospect
+ frappe.prompt(
+ [
+ {
+ fieldname: "prospect",
+ label: __("Prospect"),
+ fieldtype: "Link",
+ options: "Prospect",
+ reqd: 1,
},
- callback: function(r) {
- if (!r.exc) {
- me.frm.reload_doc();
- }
- },
- freeze: true,
- freeze_message: __('Adding Lead to Prospect...')
- });
- }, __('Add Lead to Prospect'), __('Add'));
+ ],
+ function (data) {
+ frappe.call({
+ method: "erpnext.crm.doctype.lead.lead.add_lead_to_prospect",
+ args: {
+ lead: me.frm.doc.name,
+ prospect: data.prospect,
+ },
+ callback: function (r) {
+ if (!r.exc) {
+ me.frm.reload_doc();
+ }
+ },
+ freeze: true,
+ freeze_message: __("Adding Lead to Prospect..."),
+ });
+ },
+ __("Add Lead to Prospect"),
+ __("Add")
+ );
}
- make_customer () {
+ make_customer() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_customer",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
- make_quotation () {
+ make_quotation() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_quotation",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
- make_prospect () {
- frappe.model.with_doctype("Prospect", function() {
+ make_prospect() {
+ frappe.model.with_doctype("Prospect", function () {
let prospect = frappe.model.get_new_doc("Prospect");
prospect.company_name = cur_frm.doc.company_name;
prospect.no_of_employees = cur_frm.doc.no_of_employees;
@@ -109,14 +117,14 @@
prospect.prospect_owner = cur_frm.doc.lead_owner;
prospect.notes = cur_frm.doc.notes;
- let leads_row = frappe.model.add_child(prospect, 'leads');
+ let leads_row = frappe.model.add_child(prospect, "leads");
leads_row.lead = cur_frm.doc.name;
frappe.set_route("Form", "Prospect", prospect.name);
});
}
- company_name () {
+ company_name() {
if (!this.frm.doc.lead_name) {
this.frm.set_value("lead_name", this.frm.doc.company_name);
}
@@ -145,86 +153,91 @@
}
};
-
extend_cscript(cur_frm.cscript, new erpnext.LeadController({ frm: cur_frm }));
frappe.ui.form.on("Lead", {
- make_opportunity: async function(frm) {
- let existing_prospect = (await frappe.db.get_value("Prospect Lead",
- {
- "lead": frm.doc.name
- },
- "name", null, "Prospect"
- )).message.name;
+ make_opportunity: async function (frm) {
+ let existing_prospect = (
+ await frappe.db.get_value(
+ "Prospect Lead",
+ {
+ lead: frm.doc.name,
+ },
+ "name",
+ null,
+ "Prospect"
+ )
+ ).message.name;
if (!existing_prospect) {
var fields = [
{
- "label": "Create Prospect",
- "fieldname": "create_prospect",
- "fieldtype": "Check",
- "default": 1
+ label: "Create Prospect",
+ fieldname: "create_prospect",
+ fieldtype: "Check",
+ default: 1,
},
{
- "label": "Prospect Name",
- "fieldname": "prospect_name",
- "fieldtype": "Data",
- "default": frm.doc.company_name,
- "depends_on": "create_prospect"
- }
+ label: "Prospect Name",
+ fieldname: "prospect_name",
+ fieldtype: "Data",
+ default: frm.doc.company_name,
+ depends_on: "create_prospect",
+ },
];
}
- let existing_contact = (await frappe.db.get_value("Contact",
- {
- "first_name": frm.doc.first_name || frm.doc.lead_name,
- "last_name": frm.doc.last_name
- },
- "name"
- )).message.name;
+ let existing_contact = (
+ await frappe.db.get_value(
+ "Contact",
+ {
+ first_name: frm.doc.first_name || frm.doc.lead_name,
+ last_name: frm.doc.last_name,
+ },
+ "name"
+ )
+ ).message.name;
if (!existing_contact) {
- fields.push(
- {
- "label": "Create Contact",
- "fieldname": "create_contact",
- "fieldtype": "Check",
- "default": "1"
- }
- );
+ fields.push({
+ label: "Create Contact",
+ fieldname: "create_contact",
+ fieldtype: "Check",
+ default: "1",
+ });
}
if (fields) {
var d = new frappe.ui.Dialog({
- title: __('Create Opportunity'),
+ title: __("Create Opportunity"),
fields: fields,
- primary_action: function() {
+ primary_action: function () {
var data = d.get_values();
frappe.call({
- method: 'create_prospect_and_contact',
+ method: "create_prospect_and_contact",
doc: frm.doc,
args: {
data: data,
},
freeze: true,
- callback: function(r) {
+ callback: function (r) {
if (!r.exc) {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_opportunity",
- frm: frm
+ frm: frm,
});
}
d.hide();
- }
+ },
});
},
- primary_action_label: __('Create')
+ primary_action_label: __("Create"),
});
d.show();
} else {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_opportunity",
- frm: frm
+ frm: frm,
});
}
- }
-});
\ No newline at end of file
+ },
+});
diff --git a/erpnext/crm/doctype/lead/lead_list.js b/erpnext/crm/doctype/lead/lead_list.js
index dbeaf60..9741525 100644
--- a/erpnext/crm/doctype/lead/lead_list.js
+++ b/erpnext/crm/doctype/lead/lead_list.js
@@ -1,28 +1,42 @@
-frappe.listview_settings['Lead'] = {
- onload: function(listview) {
+frappe.listview_settings["Lead"] = {
+ onload: function (listview) {
if (frappe.boot.user.can_create.includes("Prospect")) {
- listview.page.add_action_item(__("Create Prospect"), function() {
- frappe.model.with_doctype("Prospect", function() {
+ listview.page.add_action_item(__("Create Prospect"), function () {
+ frappe.model.with_doctype("Prospect", function () {
let prospect = frappe.model.get_new_doc("Prospect");
let leads = listview.get_checked_items();
- frappe.db.get_value("Lead", leads[0].name, ["company_name", "no_of_employees", "industry", "market_segment", "territory", "fax", "website", "lead_owner"], (r) => {
- prospect.company_name = r.company_name;
- prospect.no_of_employees = r.no_of_employees;
- prospect.industry = r.industry;
- prospect.market_segment = r.market_segment;
- prospect.territory = r.territory;
- prospect.fax = r.fax;
- prospect.website = r.website;
- prospect.prospect_owner = r.lead_owner;
+ frappe.db.get_value(
+ "Lead",
+ leads[0].name,
+ [
+ "company_name",
+ "no_of_employees",
+ "industry",
+ "market_segment",
+ "territory",
+ "fax",
+ "website",
+ "lead_owner",
+ ],
+ (r) => {
+ prospect.company_name = r.company_name;
+ prospect.no_of_employees = r.no_of_employees;
+ prospect.industry = r.industry;
+ prospect.market_segment = r.market_segment;
+ prospect.territory = r.territory;
+ prospect.fax = r.fax;
+ prospect.website = r.website;
+ prospect.prospect_owner = r.lead_owner;
- leads.forEach(function(lead) {
- let lead_prospect_row = frappe.model.add_child(prospect, 'leads');
- lead_prospect_row.lead = lead.name;
- });
- frappe.set_route("Form", "Prospect", prospect.name);
- });
+ leads.forEach(function (lead) {
+ let lead_prospect_row = frappe.model.add_child(prospect, "leads");
+ lead_prospect_row.lead = lead.name;
+ });
+ frappe.set_route("Form", "Prospect", prospect.name);
+ }
+ );
});
});
}
- }
+ },
};
diff --git a/erpnext/crm/doctype/lead_source/lead_source.js b/erpnext/crm/doctype/lead_source/lead_source.js
index 3cbe649..5efc750 100644
--- a/erpnext/crm/doctype/lead_source/lead_source.js
+++ b/erpnext/crm/doctype/lead_source/lead_source.js
@@ -1,8 +1,7 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Lead Source', {
+frappe.ui.form.on("Lead Source", {
// refresh: function(frm) {
-
// }
});
diff --git a/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js b/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js
index 08fbdad..c3081f8 100644
--- a/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js
+++ b/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Lost Reason Detail', {
- refresh: function() {
-
- }
+frappe.ui.form.on("Lost Reason Detail", {
+ refresh: function () {},
});
diff --git a/erpnext/crm/doctype/market_segment/market_segment.js b/erpnext/crm/doctype/market_segment/market_segment.js
index 94ffdee..b089c52 100644
--- a/erpnext/crm/doctype/market_segment/market_segment.js
+++ b/erpnext/crm/doctype/market_segment/market_segment.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Market Segment', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Market Segment", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js
index 0b485bb..1c8a80a 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.js
+++ b/erpnext/crm/doctype/opportunity/opportunity.js
@@ -4,38 +4,37 @@
erpnext.pre_sales.set_as_lost("Opportunity");
erpnext.sales_common.setup_selling_controller();
-
frappe.ui.form.on("Opportunity", {
- setup: function(frm) {
+ setup: function (frm) {
frm.custom_make_buttons = {
- 'Quotation': 'Quotation',
- 'Supplier Quotation': 'Supplier Quotation'
+ Quotation: "Quotation",
+ "Supplier Quotation": "Supplier Quotation",
};
- frm.set_query("opportunity_from", function() {
- return{
- "filters": {
- "name": ["in", ["Customer", "Lead", "Prospect"]],
- }
- }
+ frm.set_query("opportunity_from", function () {
+ return {
+ filters: {
+ name: ["in", ["Customer", "Lead", "Prospect"]],
+ },
+ };
});
frm.email_field = "contact_email";
},
- validate: function(frm) {
+ validate: function (frm) {
if (frm.doc.status == "Lost" && !frm.doc.lost_reasons.length) {
- frm.trigger('set_as_lost_dialog');
+ frm.trigger("set_as_lost_dialog");
frappe.throw(__("Lost Reasons are required in case opportunity is Lost."));
}
},
- onload_post_render: function(frm) {
+ onload_post_render: function (frm) {
frm.get_field("items").grid.set_multiple_add("item_code", "qty");
},
- party_name: function(frm) {
- frm.trigger('set_contact_link');
+ party_name: function (frm) {
+ frm.trigger("set_contact_link");
if (frm.doc.opportunity_from == "Customer") {
erpnext.utils.get_party_details(frm);
@@ -43,75 +42,86 @@
erpnext.utils.map_current_doc({
method: "erpnext.crm.doctype.lead.lead.make_opportunity",
source_name: frm.doc.party_name,
- frm: frm
+ frm: frm,
});
}
},
- status:function(frm){
- if (frm.doc.status == "Lost"){
- frm.trigger('set_as_lost_dialog');
+ status: function (frm) {
+ if (frm.doc.status == "Lost") {
+ frm.trigger("set_as_lost_dialog");
}
-
},
- customer_address: function(frm, cdt, cdn) {
- erpnext.utils.get_address_display(frm, 'customer_address', 'address_display', false);
+ customer_address: function (frm, cdt, cdn) {
+ erpnext.utils.get_address_display(frm, "customer_address", "address_display", false);
},
contact_person: erpnext.utils.get_contact_details,
- opportunity_from: function(frm) {
- frm.trigger('setup_opportunity_from');
+ opportunity_from: function (frm) {
+ frm.trigger("setup_opportunity_from");
frm.set_value("party_name", "");
},
- setup_opportunity_from: function(frm) {
- frm.trigger('setup_queries');
+ setup_opportunity_from: function (frm) {
+ frm.trigger("setup_queries");
frm.trigger("set_dynamic_field_label");
},
- refresh: function(frm) {
+ refresh: function (frm) {
var doc = frm.doc;
- frm.trigger('setup_opportunity_from');
+ frm.trigger("setup_opportunity_from");
erpnext.toggle_naming_series();
- if(!frm.is_new() && doc.status!=="Lost") {
- if(doc.items){
- frm.add_custom_button(__('Supplier Quotation'),
- function() {
- frm.trigger("make_supplier_quotation")
- }, __('Create'));
+ if (!frm.is_new() && doc.status !== "Lost") {
+ if (doc.items) {
+ frm.add_custom_button(
+ __("Supplier Quotation"),
+ function () {
+ frm.trigger("make_supplier_quotation");
+ },
+ __("Create")
+ );
- frm.add_custom_button(__('Request For Quotation'),
- function() {
- frm.trigger("make_request_for_quotation")
- }, __('Create'));
+ frm.add_custom_button(
+ __("Request For Quotation"),
+ function () {
+ frm.trigger("make_request_for_quotation");
+ },
+ __("Create")
+ );
}
if (frm.doc.opportunity_from != "Customer") {
- frm.add_custom_button(__('Customer'),
- function() {
- frm.trigger("make_customer")
- }, __('Create'));
+ frm.add_custom_button(
+ __("Customer"),
+ function () {
+ frm.trigger("make_customer");
+ },
+ __("Create")
+ );
}
- frm.add_custom_button(__('Quotation'),
- function() {
- frm.trigger("create_quotation")
- }, __('Create'));
+ frm.add_custom_button(
+ __("Quotation"),
+ function () {
+ frm.trigger("create_quotation");
+ },
+ __("Create")
+ );
}
- if(!frm.doc.__islocal && frm.perm[0].write && frm.doc.docstatus==0) {
- if(frm.doc.status==="Open") {
- frm.add_custom_button(__("Close"), function() {
+ if (!frm.doc.__islocal && frm.perm[0].write && frm.doc.docstatus == 0) {
+ if (frm.doc.status === "Open") {
+ frm.add_custom_button(__("Close"), function () {
frm.set_value("status", "Closed");
frm.save();
});
} else {
- frm.add_custom_button(__("Reopen"), function() {
- frm.set_value("lost_reasons",[])
+ frm.add_custom_button(__("Reopen"), function () {
+ frm.set_value("lost_reasons", []);
frm.set_value("status", "Open");
frm.save();
});
@@ -126,141 +136,149 @@
}
if (frm.doc.opportunity_from && frm.doc.party_name) {
- frm.trigger('set_contact_link');
+ frm.trigger("set_contact_link");
}
},
- set_contact_link: function(frm) {
- if(frm.doc.opportunity_from == "Customer" && frm.doc.party_name) {
- frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Customer'}
- } else if(frm.doc.opportunity_from == "Lead" && frm.doc.party_name) {
- frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Lead'}
+ set_contact_link: function (frm) {
+ if (frm.doc.opportunity_from == "Customer" && frm.doc.party_name) {
+ frappe.dynamic_link = { doc: frm.doc, fieldname: "party_name", doctype: "Customer" };
+ } else if (frm.doc.opportunity_from == "Lead" && frm.doc.party_name) {
+ frappe.dynamic_link = { doc: frm.doc, fieldname: "party_name", doctype: "Lead" };
} else if (frm.doc.opportunity_from == "Prospect" && frm.doc.party_name) {
- frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Prospect'}
+ frappe.dynamic_link = { doc: frm.doc, fieldname: "party_name", doctype: "Prospect" };
}
},
- currency: function(frm) {
+ currency: function (frm) {
let company_currency = erpnext.get_currency(frm.doc.company);
if (company_currency != frm.doc.company) {
frappe.call({
method: "erpnext.setup.utils.get_exchange_rate",
args: {
from_currency: frm.doc.currency,
- to_currency: company_currency
+ to_currency: company_currency,
},
- callback: function(r) {
+ callback: function (r) {
if (r.message) {
- frm.set_value('conversion_rate', flt(r.message));
- frm.set_df_property('conversion_rate', 'description', '1 ' + frm.doc.currency
- + ' = [?] ' + company_currency);
+ frm.set_value("conversion_rate", flt(r.message));
+ frm.set_df_property(
+ "conversion_rate",
+ "description",
+ "1 " + frm.doc.currency + " = [?] " + company_currency
+ );
}
- }
+ },
});
} else {
- frm.set_value('conversion_rate', 1.0);
- frm.set_df_property('conversion_rate', 'hidden', 1);
- frm.set_df_property('conversion_rate', 'description', '');
+ frm.set_value("conversion_rate", 1.0);
+ frm.set_df_property("conversion_rate", "hidden", 1);
+ frm.set_df_property("conversion_rate", "description", "");
}
- frm.trigger('opportunity_amount');
- frm.trigger('set_dynamic_field_label');
+ frm.trigger("opportunity_amount");
+ frm.trigger("set_dynamic_field_label");
},
- opportunity_amount: function(frm) {
- frm.set_value('base_opportunity_amount', flt(frm.doc.opportunity_amount) * flt(frm.doc.conversion_rate));
+ opportunity_amount: function (frm) {
+ frm.set_value(
+ "base_opportunity_amount",
+ flt(frm.doc.opportunity_amount) * flt(frm.doc.conversion_rate)
+ );
},
- set_dynamic_field_label: function(frm){
+ set_dynamic_field_label: function (frm) {
if (frm.doc.opportunity_from) {
frm.set_df_property("party_name", "label", frm.doc.opportunity_from);
}
- frm.trigger('change_grid_labels');
- frm.trigger('change_form_labels');
+ frm.trigger("change_grid_labels");
+ frm.trigger("change_form_labels");
},
- make_supplier_quotation: function(frm) {
+ make_supplier_quotation: function (frm) {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.opportunity.opportunity.make_supplier_quotation",
- frm: frm
- })
+ frm: frm,
+ });
},
- make_request_for_quotation: function(frm) {
+ make_request_for_quotation: function (frm) {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation",
- frm: frm
- })
+ frm: frm,
+ });
},
- change_form_labels: function(frm) {
+ change_form_labels: function (frm) {
let company_currency = erpnext.get_currency(frm.doc.company);
frm.set_currency_labels(["base_opportunity_amount", "base_total"], company_currency);
frm.set_currency_labels(["opportunity_amount", "total"], frm.doc.currency);
// toggle fields
- frm.toggle_display(["conversion_rate", "base_opportunity_amount", "base_total"],
- frm.doc.currency != company_currency);
+ frm.toggle_display(
+ ["conversion_rate", "base_opportunity_amount", "base_total"],
+ frm.doc.currency != company_currency
+ );
},
- change_grid_labels: function(frm) {
+ change_grid_labels: function (frm) {
let company_currency = erpnext.get_currency(frm.doc.company);
frm.set_currency_labels(["base_rate", "base_amount"], company_currency, "items");
frm.set_currency_labels(["rate", "amount"], frm.doc.currency, "items");
let item_grid = frm.fields_dict.items.grid;
- $.each(["base_rate", "base_amount"], function(i, fname) {
- if(frappe.meta.get_docfield(item_grid.doctype, fname))
+ $.each(["base_rate", "base_amount"], function (i, fname) {
+ if (frappe.meta.get_docfield(item_grid.doctype, fname))
item_grid.set_column_disp(fname, frm.doc.currency != company_currency);
});
frm.refresh_fields();
},
- calculate_total: function(frm) {
- let total = 0, base_total = 0;
- frm.doc.items.forEach(item => {
+ calculate_total: function (frm) {
+ let total = 0,
+ base_total = 0;
+ frm.doc.items.forEach((item) => {
total += item.amount;
base_total += item.base_amount;
- })
+ });
frm.set_value({
- 'total': flt(total),
- 'base_total': flt(base_total)
+ total: flt(total),
+ base_total: flt(base_total),
});
},
});
frappe.ui.form.on("Opportunity Item", {
- calculate: function(frm, cdt, cdn) {
+ calculate: function (frm, cdt, cdn) {
let row = frappe.get_doc(cdt, cdn);
frappe.model.set_value(cdt, cdn, "amount", flt(row.qty) * flt(row.rate));
frappe.model.set_value(cdt, cdn, "base_rate", flt(frm.doc.conversion_rate) * flt(row.rate));
frappe.model.set_value(cdt, cdn, "base_amount", flt(frm.doc.conversion_rate) * flt(row.amount));
frm.trigger("calculate_total");
},
- qty: function(frm, cdt, cdn) {
+ qty: function (frm, cdt, cdn) {
frm.trigger("calculate", cdt, cdn);
},
- rate: function(frm, cdt, cdn) {
+ rate: function (frm, cdt, cdn) {
frm.trigger("calculate", cdt, cdn);
- }
-})
+ },
+});
// TODO commonify this code
erpnext.crm.Opportunity = class Opportunity extends frappe.ui.form.Controller {
onload() {
-
- if(!this.frm.doc.status) {
- this.frm.set_value('status', 'Open');
+ if (!this.frm.doc.status) {
+ this.frm.set_value("status", "Open");
}
- if(!this.frm.doc.company && frappe.defaults.get_user_default("Company")) {
- this.frm.set_value('company', frappe.defaults.get_user_default("Company"));
+ if (!this.frm.doc.company && frappe.defaults.get_user_default("Company")) {
+ this.frm.set_value("company", frappe.defaults.get_user_default("Company"));
}
- if(!this.frm.doc.currency) {
- this.frm.set_value('currency', frappe.defaults.get_user_default("Currency"));
+ if (!this.frm.doc.currency) {
+ this.frm.set_value("currency", frappe.defaults.get_user_default("Currency"));
}
this.setup_queries();
- this.frm.trigger('currency');
+ this.frm.trigger("currency");
}
refresh() {
@@ -271,28 +289,27 @@
setup_queries() {
var me = this;
- me.frm.set_query('customer_address', erpnext.queries.address_query);
+ me.frm.set_query("customer_address", erpnext.queries.address_query);
- this.frm.set_query("item_code", "items", function() {
+ this.frm.set_query("item_code", "items", function () {
return {
query: "erpnext.controllers.queries.item_query",
- filters: {'is_sales_item': 1}
+ filters: { is_sales_item: 1 },
};
});
- me.frm.set_query('contact_person', erpnext.queries['contact_query'])
+ me.frm.set_query("contact_person", erpnext.queries["contact_query"]);
if (me.frm.doc.opportunity_from == "Lead") {
- me.frm.set_query('party_name', erpnext.queries['lead']);
- }
- else if (me.frm.doc.opportunity_from == "Customer") {
- me.frm.set_query('party_name', erpnext.queries['customer']);
+ me.frm.set_query("party_name", erpnext.queries["lead"]);
+ } else if (me.frm.doc.opportunity_from == "Customer") {
+ me.frm.set_query("party_name", erpnext.queries["customer"]);
} else if (me.frm.doc.opportunity_from == "Prospect") {
- me.frm.set_query('party_name', function() {
+ me.frm.set_query("party_name", function () {
return {
filters: {
- "company": me.frm.doc.company
- }
+ company: me.frm.doc.company,
+ },
};
});
}
@@ -301,15 +318,15 @@
create_quotation() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.opportunity.opportunity.make_quotation",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
make_customer() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.opportunity.opportunity.make_customer",
- frm: cur_frm
- })
+ frm: cur_frm,
+ });
}
show_notes() {
@@ -331,22 +348,22 @@
}
};
-extend_cscript(cur_frm.cscript, new erpnext.crm.Opportunity({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.crm.Opportunity({ frm: cur_frm }));
-cur_frm.cscript.item_code = function(doc, cdt, cdn) {
+cur_frm.cscript.item_code = function (doc, cdt, cdn) {
var d = locals[cdt][cdn];
if (d.item_code) {
return frappe.call({
method: "erpnext.crm.doctype.opportunity.opportunity.get_item_details",
- args: {"item_code":d.item_code},
- callback: function(r, rt) {
- if(r.message) {
- $.each(r.message, function(k, v) {
+ args: { item_code: d.item_code },
+ callback: function (r, rt) {
+ if (r.message) {
+ $.each(r.message, function (k, v) {
frappe.model.set_value(cdt, cdn, k, v);
});
- refresh_field('image_view', d.name, 'items');
+ refresh_field("image_view", d.name, "items");
}
- }
- })
+ },
+ });
}
-}
+};
diff --git a/erpnext/crm/doctype/opportunity/opportunity_list.js b/erpnext/crm/doctype/opportunity/opportunity_list.js
index 24b0514..5028ae1 100644
--- a/erpnext/crm/doctype/opportunity/opportunity_list.js
+++ b/erpnext/crm/doctype/opportunity/opportunity_list.js
@@ -1,31 +1,31 @@
-frappe.listview_settings['Opportunity'] = {
+frappe.listview_settings["Opportunity"] = {
add_fields: ["customer_name", "opportunity_type", "opportunity_from", "status"],
- get_indicator: function(doc) {
+ get_indicator: function (doc) {
var indicator = [__(doc.status), frappe.utils.guess_colour(doc.status), "status,=," + doc.status];
- if(doc.status=="Quotation") {
+ if (doc.status == "Quotation") {
indicator[1] = "green";
}
return indicator;
},
- onload: function(listview) {
+ onload: function (listview) {
var method = "erpnext.crm.doctype.opportunity.opportunity.set_multiple_status";
- listview.page.add_menu_item(__("Set as Open"), function() {
- listview.call_for_selected_items(method, {"status": "Open"});
+ listview.page.add_menu_item(__("Set as Open"), function () {
+ listview.call_for_selected_items(method, { status: "Open" });
});
- listview.page.add_menu_item(__("Set as Closed"), function() {
- listview.call_for_selected_items(method, {"status": "Closed"});
+ listview.page.add_menu_item(__("Set as Closed"), function () {
+ listview.call_for_selected_items(method, { status: "Closed" });
});
- if(listview.page.fields_dict.opportunity_from) {
- listview.page.fields_dict.opportunity_from.get_query = function() {
+ if (listview.page.fields_dict.opportunity_from) {
+ listview.page.fields_dict.opportunity_from.get_query = function () {
return {
- "filters": {
- "name": ["in", ["Customer", "Lead"]],
- }
+ filters: {
+ name: ["in", ["Customer", "Lead"]],
+ },
};
};
}
- }
+ },
};
diff --git a/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js b/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js
index 877dd59..3f08355 100644
--- a/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js
+++ b/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Opportunity Lost Reason', {
- refresh: function() {
-
- }
+frappe.ui.form.on("Opportunity Lost Reason", {
+ refresh: function () {},
});
diff --git a/erpnext/crm/doctype/opportunity_type/opportunity_type.js b/erpnext/crm/doctype/opportunity_type/opportunity_type.js
index 174625e..18213ad 100644
--- a/erpnext/crm/doctype/opportunity_type/opportunity_type.js
+++ b/erpnext/crm/doctype/opportunity_type/opportunity_type.js
@@ -1,8 +1,6 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Opportunity Type', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Opportunity Type", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/crm/doctype/prospect/prospect.js b/erpnext/crm/doctype/prospect/prospect.js
index c1a7ff5..1bf7f26 100644
--- a/erpnext/crm/doctype/prospect/prospect.js
+++ b/erpnext/crm/doctype/prospect/prospect.js
@@ -1,23 +1,31 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Prospect', {
- refresh (frm) {
+frappe.ui.form.on("Prospect", {
+ refresh(frm) {
if (!frm.is_new() && frappe.boot.user.can_create.includes("Customer")) {
- frm.add_custom_button(__("Customer"), function() {
- frappe.model.open_mapped_doc({
- method: "erpnext.crm.doctype.prospect.prospect.make_customer",
- frm: frm
- });
- }, __("Create"));
+ frm.add_custom_button(
+ __("Customer"),
+ function () {
+ frappe.model.open_mapped_doc({
+ method: "erpnext.crm.doctype.prospect.prospect.make_customer",
+ frm: frm,
+ });
+ },
+ __("Create")
+ );
}
if (!frm.is_new() && frappe.boot.user.can_create.includes("Opportunity")) {
- frm.add_custom_button(__("Opportunity"), function() {
- frappe.model.open_mapped_doc({
- method: "erpnext.crm.doctype.prospect.prospect.make_opportunity",
- frm: frm
- });
- }, __("Create"));
+ frm.add_custom_button(
+ __("Opportunity"),
+ function () {
+ frappe.model.open_mapped_doc({
+ method: "erpnext.crm.doctype.prospect.prospect.make_opportunity",
+ frm: frm,
+ });
+ },
+ __("Create")
+ );
}
if (!frm.is_new()) {
@@ -29,7 +37,7 @@
frm.trigger("show_activities");
},
- show_notes (frm) {
+ show_notes(frm) {
const crm_notes = new erpnext.utils.CRMNotes({
frm: frm,
notes_wrapper: $(frm.fields_dict.notes_html.wrapper),
@@ -37,7 +45,7 @@
crm_notes.refresh();
},
- show_activities (frm) {
+ show_activities(frm) {
const crm_activities = new erpnext.utils.CRMActivities({
frm: frm,
open_activities_wrapper: $(frm.fields_dict.open_activities_html.wrapper),
@@ -45,6 +53,5 @@
form_wrapper: $(frm.wrapper),
});
crm_activities.refresh();
- }
-
+ },
});
diff --git a/erpnext/crm/doctype/sales_stage/sales_stage.js b/erpnext/crm/doctype/sales_stage/sales_stage.js
index 0447f78..c6811665 100644
--- a/erpnext/crm/doctype/sales_stage/sales_stage.js
+++ b/erpnext/crm/doctype/sales_stage/sales_stage.js
@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('Sales Stage', {
- refresh: function(frm) {
-
- }
+frappe.ui.form.on("Sales Stage", {
+ refresh: function (frm) {},
});
diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
index 0c4e7f2..a1e51f0 100644
--- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
+++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
@@ -1,18 +1,18 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.query_reports["Campaign Efficiency"] = {
- "filters": [
+ filters: [
{
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
},
{
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- }
- ]
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ },
+ ],
};
diff --git a/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js b/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js
index 4bf8247..efaea49 100644
--- a/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js
+++ b/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js
@@ -1,43 +1,44 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["First Response Time for Opportunity"] = {
- "filters": [
+ filters: [
{
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "reqd": 1,
- "default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.add_days(frappe.datetime.nowdate(), -30),
},
{
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "reqd": 1,
- "default": frappe.datetime.nowdate()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.nowdate(),
},
],
get_chart_data: function (_columns, result) {
return {
data: {
- labels: result.map(d => d.creation_date),
- datasets: [{
- name: "First Response Time",
- values: result.map(d => d.first_response_time)
- }]
+ labels: result.map((d) => d.creation_date),
+ datasets: [
+ {
+ name: "First Response Time",
+ values: result.map((d) => d.first_response_time),
+ },
+ ],
},
type: "line",
tooltipOptions: {
- formatTooltipY: d => {
+ formatTooltipY: (d) => {
let duration_options = {
hide_days: 0,
- hide_seconds: 0
+ hide_seconds: 0,
};
return frappe.utils.get_formatted_duration(d, duration_options);
- }
- }
- }
- }
+ },
+ },
+ };
+ },
};
diff --git a/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js b/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js
index d7ff9ad..0019337 100644
--- a/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js
+++ b/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js
@@ -1,22 +1,21 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Lead Conversion Time"] = {
- "filters": [
+ filters: [
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- 'reqd': 1,
- "default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.add_days(frappe.datetime.nowdate(), -30),
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- 'reqd': 1,
- "default":frappe.datetime.nowdate()
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.nowdate(),
},
- ]
+ ],
};
diff --git a/erpnext/crm/report/lead_details/lead_details.js b/erpnext/crm/report/lead_details/lead_details.js
index 66611f6..feecc07 100644
--- a/erpnext/crm/report/lead_details/lead_details.js
+++ b/erpnext/crm/report/lead_details/lead_details.js
@@ -1,52 +1,51 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Lead Details"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -12),
- "reqd": 1
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
+ reqd: 1,
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname":"status",
- "label": __("Status"),
- "fieldtype": "Select",
+ fieldname: "status",
+ label: __("Status"),
+ fieldtype: "Select",
options: [
- { "value": "Lead", "label": __("Lead") },
- { "value": "Open", "label": __("Open") },
- { "value": "Replied", "label": __("Replied") },
- { "value": "Opportunity", "label": __("Opportunity") },
- { "value": "Quotation", "label": __("Quotation") },
- { "value": "Lost Quotation", "label": __("Lost Quotation") },
- { "value": "Interested", "label": __("Interested") },
- { "value": "Converted", "label": __("Converted") },
- { "value": "Do Not Contact", "label": __("Do Not Contact") },
+ { value: "Lead", label: __("Lead") },
+ { value: "Open", label: __("Open") },
+ { value: "Replied", label: __("Replied") },
+ { value: "Opportunity", label: __("Opportunity") },
+ { value: "Quotation", label: __("Quotation") },
+ { value: "Lost Quotation", label: __("Lost Quotation") },
+ { value: "Interested", label: __("Interested") },
+ { value: "Converted", label: __("Converted") },
+ { value: "Do Not Contact", label: __("Do Not Contact") },
],
},
{
- "fieldname":"territory",
- "label": __("Territory"),
- "fieldtype": "Link",
- "options": "Territory",
- }
- ]
+ fieldname: "territory",
+ label: __("Territory"),
+ fieldtype: "Link",
+ options: "Territory",
+ },
+ ],
};
diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js
index 6fc52a1..bd64641 100644
--- a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js
+++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js
@@ -1,17 +1,18 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
- frappe.query_reports["Lead Owner Efficiency"] = {
- "filters": [
- {
- "fieldname": "from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
- },
- {
- "fieldname": "to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
- }
- ]};
+frappe.query_reports["Lead Owner Efficiency"] = {
+ filters: [
+ {
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+ },
+ {
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+ },
+ ],
+};
diff --git a/erpnext/crm/report/lost_opportunity/lost_opportunity.js b/erpnext/crm/report/lost_opportunity/lost_opportunity.js
index 8d59239..7932afe 100644
--- a/erpnext/crm/report/lost_opportunity/lost_opportunity.js
+++ b/erpnext/crm/report/lost_opportunity/lost_opportunity.js
@@ -1,61 +1,60 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Lost Opportunity"] = {
- "filters": [
+ filters: [
{
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company"),
+ reqd: 1,
},
{
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.add_months(frappe.datetime.get_today(), -12),
- "reqd": 1
+ fieldname: "from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
+ reqd: 1,
},
{
- "fieldname":"to_date",
- "label": __("To Date"),
- "fieldtype": "Date",
- "default": frappe.datetime.get_today(),
- "reqd": 1
+ fieldname: "to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today(),
+ reqd: 1,
},
{
- "fieldname":"lost_reason",
- "label": __("Lost Reason"),
- "fieldtype": "Link",
- "options": "Opportunity Lost Reason"
+ fieldname: "lost_reason",
+ label: __("Lost Reason"),
+ fieldtype: "Link",
+ options: "Opportunity Lost Reason",
},
{
- "fieldname":"territory",
- "label": __("Territory"),
- "fieldtype": "Link",
- "options": "Territory"
+ fieldname: "territory",
+ label: __("Territory"),
+ fieldtype: "Link",
+ options: "Territory",
},
{
- "fieldname":"opportunity_from",
- "label": __("Opportunity From"),
- "fieldtype": "Link",
- "options": "DocType",
- "get_query": function() {
+ fieldname: "opportunity_from",
+ label: __("Opportunity From"),
+ fieldtype: "Link",
+ options: "DocType",
+ get_query: function () {
return {
- "filters": {
- "name": ["in", ["Customer", "Lead"]],
- }
- }
- }
+ filters: {
+ name: ["in", ["Customer", "Lead"]],
+ },
+ };
+ },
},
{
- "fieldname":"party_name",
- "label": __("Party"),
- "fieldtype": "Dynamic Link",
- "options": "opportunity_from"
+ fieldname: "party_name",
+ label: __("Party"),
+ fieldtype: "Dynamic Link",
+ options: "opportunity_from",
},
- ]
+ ],
};
diff --git a/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js b/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js
index 0aa2143..36361e5 100644
--- a/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js
+++ b/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js
@@ -1,28 +1,26 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Opportunity Summary by Sales Stage"] = {
- "filters": [
+ filters: [
{
fieldname: "based_on",
label: __("Based On"),
fieldtype: "Select",
options: "Opportunity Owner\nSource\nOpportunity Type",
- default: "Opportunity Owner"
+ default: "Opportunity Owner",
},
{
fieldname: "data_based_on",
label: __("Data Based On"),
fieldtype: "Select",
options: "Number\nAmount",
- default: "Number"
+ default: "Number",
},
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
-
},
{
fieldname: "to_date",
@@ -33,14 +31,14 @@
fieldname: "status",
label: __("Status"),
fieldtype: "MultiSelectList",
- get_data: function() {
+ get_data: function () {
return [
- {value: "Open", description: "Status"},
- {value: "Converted", description: "Status"},
- {value: "Quotation", description: "Status"},
- {value: "Replied", description: "Status"}
- ]
- }
+ { value: "Open", description: "Status" },
+ { value: "Converted", description: "Status" },
+ { value: "Quotation", description: "Status" },
+ { value: "Replied", description: "Status" },
+ ];
+ },
},
{
fieldname: "opportunity_source",
@@ -59,7 +57,7 @@
label: __("Company"),
fieldtype: "Link",
options: "Company",
- default: frappe.defaults.get_user_default("Company")
- }
- ]
+ default: frappe.defaults.get_user_default("Company"),
+ },
+ ],
};
diff --git a/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
index 6f37719..d625941 100644
--- a/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
+++ b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
@@ -2,24 +2,24 @@
// For license information, please see license.txt
frappe.query_reports["Prospects Engaged But Not Converted"] = {
- "filters": [
+ filters: [
{
- "fieldname": "lead",
- "label": __("Lead"),
- "fieldtype": "Link",
- "options": "Lead"
+ fieldname: "lead",
+ label: __("Lead"),
+ fieldtype: "Link",
+ options: "Lead",
},
{
- "fieldname": "no_of_interaction",
- "label": __("Number of Interaction"),
- "fieldtype": "Int",
- "default": 1
+ fieldname: "no_of_interaction",
+ label: __("Number of Interaction"),
+ fieldtype: "Int",
+ default: 1,
},
{
- "fieldname": "lead_age",
- "label": __("Minimum Lead Age (Days)"),
- "fieldtype": "Int",
- "default": 60
+ fieldname: "lead_age",
+ label: __("Minimum Lead Age (Days)"),
+ fieldtype: "Int",
+ default: 60,
},
- ]
-}
+ ],
+};
diff --git a/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js b/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js
index 3111121..df035c1 100644
--- a/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js
+++ b/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js
@@ -1,70 +1,69 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-
frappe.query_reports["Sales Pipeline Analytics"] = {
- "filters": [
+ filters: [
{
fieldname: "pipeline_by",
label: __("Pipeline By"),
fieldtype: "Select",
options: "Owner\nSales Stage",
- default: "Owner"
+ default: "Owner",
},
{
fieldname: "from_date",
label: __("From Date"),
- fieldtype: "Date"
+ fieldtype: "Date",
},
{
fieldname: "to_date",
label: __("To Date"),
- fieldtype: "Date"
+ fieldtype: "Date",
},
{
fieldname: "range",
label: __("Range"),
fieldtype: "Select",
options: "Monthly\nQuarterly",
- default: "Monthly"
+ default: "Monthly",
},
{
fieldname: "assigned_to",
label: __("Assigned To"),
fieldtype: "Link",
- options: "User"
+ options: "User",
},
{
fieldname: "status",
label: __("Status"),
fieldtype: "Select",
- options: "Open\nQuotation\nConverted\nReplied"
+ options: "Open\nQuotation\nConverted\nReplied",
},
{
fieldname: "based_on",
label: __("Based On"),
fieldtype: "Select",
options: "Number\nAmount",
- default: "Number"
+ default: "Number",
},
{
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
- default: frappe.defaults.get_user_default("Company")
+ default: frappe.defaults.get_user_default("Company"),
},
{
fieldname: "opportunity_source",
label: __("Opportunity Source"),
fieldtype: "Link",
- options: "Lead Source"
+ options: "Lead Source",
},
{
fieldname: "opportunity_type",
label: __("Opportunity Type"),
fieldtype: "Link",
- options: "Opportunity Type"
+ options: "Opportunity Type",
},
- ]
+ ],
};
diff --git a/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js b/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js
index 015e943..fc3bf80 100644
--- a/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js
+++ b/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js
@@ -3,20 +3,20 @@
frappe.provide("erpnext.integrations");
-frappe.ui.form.on('Plaid Settings', {
+frappe.ui.form.on("Plaid Settings", {
enabled: function (frm) {
- frm.toggle_reqd('plaid_client_id', frm.doc.enabled);
- frm.toggle_reqd('plaid_secret', frm.doc.enabled);
- frm.toggle_reqd('plaid_env', frm.doc.enabled);
+ frm.toggle_reqd("plaid_client_id", frm.doc.enabled);
+ frm.toggle_reqd("plaid_secret", frm.doc.enabled);
+ frm.toggle_reqd("plaid_env", frm.doc.enabled);
},
refresh: function (frm) {
if (frm.doc.enabled) {
- frm.add_custom_button(__('Link a new bank account'), () => {
+ frm.add_custom_button(__("Link a new bank account"), () => {
new erpnext.integrations.plaidLink(frm);
});
- frm.add_custom_button(__('Reset Plaid Link'), () => {
+ frm.add_custom_button(__("Reset Plaid Link"), () => {
new erpnext.integrations.plaidLink(frm);
});
@@ -29,20 +29,23 @@
frappe.msgprint({
title: __("Sync Started"),
- message: __("The sync has started in the background, please check the {0} list for new records.", [bank_transaction_link]),
- alert: 1
+ message: __(
+ "The sync has started in the background, please check the {0} list for new records.",
+ [bank_transaction_link]
+ ),
+ alert: 1,
});
- }
+ },
});
}).addClass("btn-primary");
}
- }
+ },
});
erpnext.integrations.plaidLink = class plaidLink {
constructor(parent) {
this.frm = parent;
- this.plaidUrl = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';
+ this.plaidUrl = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
this.init_config();
}
@@ -55,9 +58,9 @@
}
async get_link_token() {
- const token = await this.frm.call("get_link_token").then(resp => resp.message);
+ const token = await this.frm.call("get_link_token").then((resp) => resp.message);
if (!token) {
- frappe.throw(__('Cannot retrieve link token. Check Error Log for more information'));
+ frappe.throw(__("Cannot retrieve link token. Check Error Log for more information"));
}
return token;
}
@@ -84,55 +87,74 @@
resolve();
return;
}
- const el = document.createElement('script');
- el.type = 'text/javascript';
+ const el = document.createElement("script");
+ el.type = "text/javascript";
el.async = true;
el.src = src;
- el.addEventListener('load', resolve);
- el.addEventListener('error', reject);
- el.addEventListener('abort', reject);
+ el.addEventListener("load", resolve);
+ el.addEventListener("error", reject);
+ el.addEventListener("abort", reject);
document.head.appendChild(el);
});
}
onScriptLoaded(me) {
- me.linkHandler = Plaid.create({ // eslint-disable-line no-undef
+ me.linkHandler = Plaid.create({
+ // eslint-disable-line no-undef
clientName: me.client_name,
product: me.product,
env: me.plaid_env,
token: me.token,
- onSuccess: me.plaid_success
+ onSuccess: me.plaid_success,
});
}
onScriptError(error) {
- frappe.msgprint(__("There was an issue connecting to Plaid's authentication server. Check browser console for more information"));
+ frappe.msgprint(
+ __(
+ "There was an issue connecting to Plaid's authentication server. Check browser console for more information"
+ )
+ );
console.log(error);
}
plaid_success(token, response) {
const me = this;
- frappe.prompt({
- fieldtype: "Link",
- options: "Company",
- label: __("Company"),
- fieldname: "company",
- reqd: 1
- }, (data) => {
- me.company = data.company;
- frappe.xcall('erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_institution', {
- token: token,
- response: response
- }).then((result) => {
- frappe.xcall('erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_bank_accounts', {
- response: response,
- bank: result,
- company: me.company
- });
- }).then(() => {
- frappe.show_alert({ message: __("Bank accounts added"), indicator: 'green' });
- });
- }, __("Select a company"), __("Continue"));
+ frappe.prompt(
+ {
+ fieldtype: "Link",
+ options: "Company",
+ label: __("Company"),
+ fieldname: "company",
+ reqd: 1,
+ },
+ (data) => {
+ me.company = data.company;
+ frappe
+ .xcall(
+ "erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_institution",
+ {
+ token: token,
+ response: response,
+ }
+ )
+ .then((result) => {
+ frappe.xcall(
+ "erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_bank_accounts",
+ {
+ response: response,
+ bank: result,
+ company: me.company,
+ }
+ );
+ })
+ .then(() => {
+ frappe.show_alert({ message: __("Bank accounts added"), indicator: "green" });
+ });
+ },
+ __("Select a company"),
+ __("Continue")
+ );
}
};
diff --git a/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js b/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js
index bfffcc5..f9364ed 100644
--- a/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js
+++ b/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js
@@ -1,71 +1,77 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-frappe.ui.form.on('QuickBooks Migrator', {
- connect: function(frm) {
+frappe.ui.form.on("QuickBooks Migrator", {
+ connect: function (frm) {
// OAuth requires user intervention to provide application access permissionsto requested scope
// Here we open a new window and redirect user to the authorization url.
// After user grants us permission to access. We will set authorization details on this doc which will force refresh.
- window.open(frm.doc.authorization_url)
+ window.open(frm.doc.authorization_url);
},
- fetch_data: function(frm) {
- frm.call("migrate")
+ fetch_data: function (frm) {
+ frm.call("migrate");
},
- onload: function(frm) {
- frm.trigger("set_indicator")
- var domain = frappe.urllib.get_base_url()
- var redirect_url = `${domain}/api/method/erpnext.erpnext_integrations.doctype.quickbooks_migrator.quickbooks_migrator.callback`
+ onload: function (frm) {
+ frm.trigger("set_indicator");
+ var domain = frappe.urllib.get_base_url();
+ var redirect_url = `${domain}/api/method/erpnext.erpnext_integrations.doctype.quickbooks_migrator.quickbooks_migrator.callback`;
if (frm.doc.redirect_url != redirect_url) {
- frm.set_value("redirect_url", redirect_url)
+ frm.set_value("redirect_url", redirect_url);
}
// Instead of changing percentage width and message of single progress bar
// Show a different porgress bar for every action after some time remove the finished progress bar
- // Former approach causes the progress bar to dance back and forth.
- frm.trigger("set_indicator")
- frappe.realtime.on("quickbooks_progress_update", function (data) {
- frm.dashboard.show_progress(data.message, (data.count / data.total) * 100, data.message)
+ // Former approach causes the progress bar to dance back and forth.
+ frm.trigger("set_indicator");
+ frappe.realtime.on("quickbooks_progress_update", function (data) {
+ frm.dashboard.show_progress(data.message, (data.count / data.total) * 100, data.message);
if (data.count == data.total) {
- window.setTimeout( function(message) {frm.dashboard.hide_progress(message)}, 1500, data.messsage)
+ window.setTimeout(
+ function (message) {
+ frm.dashboard.hide_progress(message);
+ },
+ 1500,
+ data.messsage
+ );
}
- })
+ });
},
- refresh: function(frm) {
- frm.trigger("set_indicator")
+ refresh: function (frm) {
+ frm.trigger("set_indicator");
if (!frm.doc.access_token) {
// Unset access_token signifies that we don't have enough information to connect to quickbooks api and fetch data
if (frm.doc.authorization_url) {
frm.add_custom_button(__("Connect to Quickbooks"), function () {
- frm.trigger("connect")
+ frm.trigger("connect");
});
}
}
if (frm.doc.access_token) {
// If we have access_token that means we also have refresh_token we don't need user intervention anymore
// All we need now is a Company from erpnext
- frm.remove_custom_button(__("Connect to Quickbooks"))
+ frm.remove_custom_button(__("Connect to Quickbooks"));
- frm.toggle_display("company_settings", 1)
- frm.set_df_property("company", "reqd", 1)
+ frm.toggle_display("company_settings", 1);
+ frm.set_df_property("company", "reqd", 1);
if (frm.doc.company) {
- frm.add_custom_button(__("Fetch Data"), function () {
- frm.trigger("fetch_data")
+ frm.add_custom_button(__("Fetch Data"), function () {
+ frm.trigger("fetch_data");
});
}
}
},
- set_indicator: function(frm) {
+ set_indicator: function (frm) {
var indicator_map = {
"Connecting to QuickBooks": [__("Connecting to QuickBooks"), "orange"],
"Connected to QuickBooks": [__("Connected to QuickBooks"), "green"],
"In Progress": [__("In Progress"), "orange"],
- "Complete": [__("Complete"), "green"],
- "Failed": [__("Failed"), "red"],
- }
+ Complete: [__("Complete"), "green"],
+ Failed: [__("Failed"), "red"],
+ };
if (frm.doc.status) {
- var indicator = indicator_map[frm.doc.status]
- var label = indicator[0]
- var color = indicator[1]
- frm.page.set_indicator(label, color)
+ var indicator = indicator_map[frm.doc.status];
+ var label = indicator[0];
+ var color = indicator[1];
+ frm.page.set_indicator(label, color);
}
},
});
diff --git a/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js b/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js
index af06b34..556c332 100644
--- a/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js
+++ b/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js
@@ -16,24 +16,29 @@
frm.dashboard.show_progress(data.title, (data.count / data.total) * 100, data.message);
let error_occurred = data.count === -1;
if (data.count == data.total || error_occurred) {
- window.setTimeout((title) => {
- frm.dashboard.hide_progress(title);
- frm.reload_doc();
- if (error_occurred) {
- frappe.msgprint({
- message: __("An error has occurred during {0}. Check {1} for more details",
- [
- repl("<a href='/app/tally-migration/%(tally_document)s' class='variant-click'>%(tally_document)s</a>", {
- tally_document: frm.docname
- }),
- "<a href='/app/error-log' class='variant-click'>Error Log</a>"
- ]
- ),
- title: __("Tally Migration Error"),
- indicator: "red"
- });
- }
- }, 2000, data.title);
+ window.setTimeout(
+ (title) => {
+ frm.dashboard.hide_progress(title);
+ frm.reload_doc();
+ if (error_occurred) {
+ frappe.msgprint({
+ message: __("An error has occurred during {0}. Check {1} for more details", [
+ repl(
+ "<a href='/app/tally-migration/%(tally_document)s' class='variant-click'>%(tally_document)s</a>",
+ {
+ tally_document: frm.docname,
+ }
+ ),
+ "<a href='/app/error-log' class='variant-click'>Error Log</a>",
+ ]),
+ title: __("Tally Migration Error"),
+ indicator: "red",
+ });
+ }
+ },
+ 2000,
+ data.title
+ );
}
});
},
@@ -43,10 +48,10 @@
erpnext.tally_migration.failed_import_log = JSON.parse(frm.doc.failed_import_log);
erpnext.tally_migration.fixed_errors_log = JSON.parse(frm.doc.fixed_errors_log);
- ["default_round_off_account", "default_warehouse", "default_cost_center"].forEach(account => {
- frm.toggle_reqd(account, frm.doc.is_master_data_imported === 1)
- frm.toggle_enable(account, frm.doc.is_day_book_data_processed != 1)
- })
+ ["default_round_off_account", "default_warehouse", "default_cost_center"].forEach((account) => {
+ frm.toggle_reqd(account, frm.doc.is_master_data_imported === 1);
+ frm.toggle_enable(account, frm.doc.is_day_book_data_processed != 1);
+ });
if (frm.doc.master_data && !frm.doc.is_master_data_imported) {
if (frm.doc.is_master_data_processed) {
@@ -74,27 +79,27 @@
},
erpnext_company: function (frm) {
- frappe.db.exists("Company", frm.doc.erpnext_company).then(exists => {
+ frappe.db.exists("Company", frm.doc.erpnext_company).then((exists) => {
if (exists) {
frappe.msgprint(
- __("Company {0} already exists. Continuing will overwrite the Company and Chart of Accounts", [frm.doc.erpnext_company]),
+ __(
+ "Company {0} already exists. Continuing will overwrite the Company and Chart of Accounts",
+ [frm.doc.erpnext_company]
+ )
);
}
});
},
add_button: function (frm, label, method) {
- frm.add_custom_button(
- label,
- () => {
- frm.call({
- doc: frm.doc,
- method: method,
- freeze: true
- });
- frm.reload_doc();
- }
- );
+ frm.add_custom_button(label, () => {
+ frm.call({
+ doc: frm.doc,
+ method: method,
+ freeze: true,
+ });
+ frm.reload_doc();
+ });
},
render_html_table(frm, shown_logs, hidden_logs, field) {
@@ -102,23 +107,26 @@
frm.toggle_display(field, true);
} else {
frm.toggle_display(field, false);
- return
+ return;
}
let rows = erpnext.tally_migration.get_html_rows(shown_logs, field);
let rows_head, table_caption;
- let table_footer = (hidden_logs && (hidden_logs.length > 0)) ? `<tr class="text-muted">
+ let table_footer =
+ hidden_logs && hidden_logs.length > 0
+ ? `<tr class="text-muted">
<td colspan="4">And ${hidden_logs.length} more others</td>
- </tr>`: "";
+ </tr>`
+ : "";
if (field === "fixed_error_log_preview") {
rows_head = `<th width="75%">${__("Meta Data")}</th>
- <th width="10%">${__("Unresolve")}</th>`
- table_caption = "Resolved Issues"
+ <th width="10%">${__("Unresolve")}</th>`;
+ table_caption = "Resolved Issues";
} else {
rows_head = `<th width="75%">${__("Error Message")}</th>
- <th width="10%">${__("Create")}</th>`
- table_caption = "Error Log"
+ <th width="10%">${__("Create")}</th>`;
+ table_caption = "Error Log";
}
frm.get_field(field).$wrapper.html(`
@@ -144,7 +152,7 @@
summary[row.doc.doctype] = 1;
}
}
- return summary
+ return summary;
}, {});
console.table(summary);
},
@@ -177,7 +185,7 @@
let hidden_logs = completed_log.slice(20);
frm.events.render_html_table(frm, logs, hidden_logs, "fixed_error_log_preview");
- }
+ },
});
erpnext.tally_migration.getError = (traceback) => {
@@ -186,31 +194,33 @@
let message;
if (is_multiline) {
- let exc_error_idx = traceback.trim().lastIndexOf("\n") + 1
- let error_line = traceback.substr(exc_error_idx)
- let split_str_idx = (error_line.indexOf(':') > 0) ? error_line.indexOf(':') + 1 : 0;
+ let exc_error_idx = traceback.trim().lastIndexOf("\n") + 1;
+ let error_line = traceback.substr(exc_error_idx);
+ let split_str_idx = error_line.indexOf(":") > 0 ? error_line.indexOf(":") + 1 : 0;
message = error_line.slice(split_str_idx).trim();
} else {
message = traceback;
}
- return message
-}
+ return message;
+};
erpnext.tally_migration.cleanDoc = (obj) => {
/* Strips all null and empty values of your JSON object */
let temp = obj;
- $.each(temp, function(key, value){
- if (value === "" || value === null){
+ $.each(temp, function (key, value) {
+ if (value === "" || value === null) {
delete obj[key];
- } else if (Object.prototype.toString.call(value) === '[object Object]') {
+ } else if (Object.prototype.toString.call(value) === "[object Object]") {
erpnext.tally_migration.cleanDoc(value);
} else if ($.isArray(value)) {
- $.each(value, function (k,v) { erpnext.tally_migration.cleanDoc(v); });
+ $.each(value, function (k, v) {
+ erpnext.tally_migration.cleanDoc(v);
+ });
}
});
return temp;
-}
+};
erpnext.tally_migration.unresolve = (document) => {
/* Mark document migration as unresolved ie. move to failed error log */
@@ -218,9 +228,9 @@
let failed_log = erpnext.tally_migration.failed_import_log;
let fixed_log = erpnext.tally_migration.fixed_errors_log;
- let modified_fixed_log = fixed_log.filter(row => {
+ let modified_fixed_log = fixed_log.filter((row) => {
if (!frappe.utils.deep_equal(erpnext.tally_migration.cleanDoc(row.doc), document)) {
- return row
+ return row;
}
});
@@ -231,7 +241,7 @@
frm.dirty();
frm.save();
-}
+};
erpnext.tally_migration.resolve = (document) => {
/* Mark document migration as resolved ie. move to fixed error log */
@@ -239,9 +249,9 @@
let failed_log = erpnext.tally_migration.failed_import_log;
let fixed_log = erpnext.tally_migration.fixed_errors_log;
- let modified_failed_log = failed_log.filter(row => {
+ let modified_failed_log = failed_log.filter((row) => {
if (!frappe.utils.deep_equal(erpnext.tally_migration.cleanDoc(row.doc), document)) {
- return row
+ return row;
}
});
fixed_log.push({ doc: document, exc: `Solved on ${Date()}` });
@@ -251,27 +261,27 @@
frm.dirty();
frm.save();
-}
+};
erpnext.tally_migration.create_new_doc = (document) => {
/* Mark as resolved and create new document */
erpnext.tally_migration.resolve(document);
return frappe.call({
type: "POST",
- method: 'erpnext.erpnext_integrations.doctype.tally_migration.tally_migration.new_doc',
+ method: "erpnext.erpnext_integrations.doctype.tally_migration.tally_migration.new_doc",
args: {
- document
+ document,
},
freeze: true,
- callback: function(r) {
- if(!r.exc) {
+ callback: function (r) {
+ if (!r.exc) {
frappe.model.sync(r.message);
frappe.get_doc(r.message.doctype, r.message.name).__run_link_triggers = true;
frappe.set_route("Form", r.message.doctype, r.message.name);
}
- }
+ },
});
-}
+};
erpnext.tally_migration.get_html_rows = (logs, field) => {
let index = 0;
@@ -304,14 +314,18 @@
</div>`;
let create_button = `
- <button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.create_new_doc(${JSON.stringify(doc)})'>
+ <button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.create_new_doc(${JSON.stringify(
+ doc
+ )})'>
${__("Create Document")}
- </button>`
+ </button>`;
let mark_as_unresolved = `
- <button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.unresolve(${JSON.stringify(doc)})'>
+ <button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.unresolve(${JSON.stringify(
+ doc
+ )})'>
${__("Mark as unresolved")}
- </button>`
+ </button>`;
if (field === "fixed_error_log_preview") {
return `<tr>
@@ -343,7 +357,8 @@
</td>
</tr>`;
}
- }).join("");
+ })
+ .join("");
- return rows
-}
+ return rows;
+};
diff --git a/erpnext/locale/de.po b/erpnext/locale/de.po
index e1be2f8..813c307 100644
--- a/erpnext/locale/de.po
+++ b/erpnext/locale/de.po
@@ -3,7 +3,7 @@
"Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: info@erpnext.com\n"
"POT-Creation-Date: 2024-01-29 18:13+0053\n"
-"PO-Revision-Date: 2024-02-22 19:45\n"
+"PO-Revision-Date: 2024-03-06 14:36\n"
"Last-Translator: info@erpnext.com\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
@@ -295,7 +295,12 @@
"- Issue of raw-material to shop material\n"
"- Progress on each Workstation via Job Card\n"
"- Manufactured Quantity against Work Order\n"
-msgstr ""
+msgstr "# Erstellen Sie einen Arbeitsauftrag\n\n"
+"Ein Arbeitsauftrag oder ein Job wird von der Produktionsleitung an die Fertigungsabteilung erteilt, um die Herstellung einer bestimmten Menge eines Artikels zu veranlassen. Ein Arbeitsauftrag enthält Details über den Produktionsartikel, seine Stückliste, die zu produzierenden Mengen und die Vorgänge.\n\n"
+"Über den Arbeitsauftrag können Sie verschiedene Produktionsstatus verfolgen, wie z. B.:\n\n"
+"- Ausgabe des Rohmaterials an das Fertigungsmaterial\n"
+"- Fortschritt an jedem Arbeitsplatz über die Jobkarte\n"
+"- Gefertigte Menge im Arbeitsauftrag\n"
#. Description of the Onboarding Step 'Create an Item'
#: setup/onboarding_step/create_an_item/create_an_item.json
@@ -336,7 +341,9 @@
msgid "# Financial Statements\n\n"
"In ERPNext, you can get crucial financial reports like [Balance Sheet] and [Profit and Loss] statements with a click of a button. You can run in the report for a different period and plot analytics charts premised on statement data. For more reports, check sections like Financial Statements, General Ledger, and Profitability reports.\n\n"
"<b>[Check Accounting reports](https://docs.erpnext.com/docs/v13/user/manual/en/accounts/accounting-reports)</b>"
-msgstr ""
+msgstr "# Finanzberichte\n\n"
+"In ERPNext können Sie mit einem Klick wichtige Finanzberichte wie [Bilanz] und [Gewinn- und Verlustrechnungen] abrufen. Sie können den Bericht für einen beliebigen Zeitraum ausführen und Diagramme basierend auf den Daten erstellen. Weitere Berichte finden Sie in den Abschnitten „Finanzberichte“, „Hauptbuch“ und „Rentabilitätsberichte“.\n\n"
+"<b>[Buchhaltungsberichte prüfen](https://docs.erpnext.com/docs/v13/user/manual/en/accounts/accounting-reports)</b>"
#. Description of the Onboarding Step 'Review Fixed Asset Accounts'
#: assets/onboarding_step/fixed_asset_accounts/fixed_asset_accounts.json
@@ -5489,7 +5496,7 @@
#: accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.json
msgctxt "Process Payment Reconciliation Log"
msgid "All allocations have been successfully reconciled"
-msgstr ""
+msgstr "Alle Zuweisungen wurden erfolgreich abgeglichen"
#: support/doctype/issue/issue.js:97
msgid "All communications including and above this shall be moved into the new Issue"
@@ -5742,7 +5749,7 @@
#: manufacturing/doctype/manufacturing_settings/manufacturing_settings.json
msgctxt "Manufacturing Settings"
msgid "Allow Excess Material Transfer"
-msgstr ""
+msgstr "Transfer von überschüssigem Material zulassen"
#. Label of a Check field in DocType 'POS Payment Method'
#: accounts/doctype/pos_payment_method/pos_payment_method.json
@@ -5854,7 +5861,7 @@
#: buying/doctype/supplier/supplier.json
msgctxt "Supplier"
msgid "Allow Purchase Invoice Creation Without Purchase Receipt"
-msgstr ""
+msgstr "Erstellen von Eingangsrechnungen ohne Eingangsbeleg zulassen"
#. Label of a Check field in DocType 'Item Variant Settings'
#: stock/doctype/item_variant_settings/item_variant_settings.json
@@ -5998,7 +6005,7 @@
#: manufacturing/doctype/manufacturing_settings/manufacturing_settings.json
msgctxt "Manufacturing Settings"
msgid "Allow transferring raw materials even after the Required Quantity is fulfilled"
-msgstr ""
+msgstr "Rohstoffübertragung auch nach Erfüllung der erforderlichen Menge erlauben"
#. Label of a Check field in DocType 'Repost Allowed Types'
#: accounts/doctype/repost_allowed_types/repost_allowed_types.json
@@ -7562,7 +7569,7 @@
#: accounts/doctype/journal_entry/journal_entry.json
msgctxt "Journal Entry"
msgid "Apply Tax Withholding Amount "
-msgstr ""
+msgstr "Quellensteuerbetrag anwenden"
#. Label of a Check field in DocType 'Accounting Dimension Filter'
#: accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.json
@@ -8748,7 +8755,7 @@
#: buying/doctype/buying_settings/buying_settings.json
msgctxt "Buying Settings"
msgid "Auto Create Subcontracting Order"
-msgstr ""
+msgstr "Unterauftrag automatisch erstellen"
#. Label of a Check field in DocType 'Fiscal Year'
#: accounts/doctype/fiscal_year/fiscal_year.json
@@ -10085,13 +10092,13 @@
#. Name of a DocType
#: accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.json
msgid "Bank Reconciliation Tool"
-msgstr ""
+msgstr "Bankabstimmungswerkzeug"
#. Label of a Link in the Accounting Workspace
#: accounts/workspace/accounting/accounting.json
msgctxt "Bank Reconciliation Tool"
msgid "Bank Reconciliation Tool"
-msgstr ""
+msgstr "Bankabstimmungswerkzeug"
#. Name of a DocType
#: accounts/doctype/bank_statement_import/bank_statement_import.json
@@ -11114,11 +11121,11 @@
#. Name of a DocType
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
msgid "Bisect Accounting Statements"
-msgstr ""
+msgstr "Buchhaltungsberichte teilen"
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js:9
msgid "Bisect Left"
-msgstr ""
+msgstr "Links teilen"
#. Name of a DocType
#: accounts/doctype/bisect_nodes/bisect_nodes.json
@@ -11127,27 +11134,27 @@
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js:13
msgid "Bisect Right"
-msgstr ""
+msgstr "Rechts teilen"
#. Label of a Heading field in DocType 'Bisect Accounting Statements'
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
msgctxt "Bisect Accounting Statements"
msgid "Bisecting From"
-msgstr ""
+msgstr "Teilen ab"
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js:61
msgid "Bisecting Left ..."
-msgstr ""
+msgstr "Teile links ..."
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js:71
msgid "Bisecting Right ..."
-msgstr ""
+msgstr "Teile rechts ..."
#. Label of a Heading field in DocType 'Bisect Accounting Statements'
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
msgctxt "Bisect Accounting Statements"
msgid "Bisecting To"
-msgstr ""
+msgstr "Teilen bis"
#: setup/setup_wizard/operations/install_fixtures.py:236
msgid "Black"
@@ -11688,7 +11695,7 @@
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js:20
msgid "Build Tree"
-msgstr ""
+msgstr "Baum erstellen"
#: manufacturing/report/work_order_stock_report/work_order_stock_report.py:155
msgid "Buildable Qty"
@@ -12053,7 +12060,7 @@
#: telephony/doctype/call_log/call_log.js:8
msgid "Callback"
-msgstr ""
+msgstr "Rückruf"
#. Name of a DocType
#. Label of a Card Break in the CRM Workspace
@@ -16685,7 +16692,7 @@
#: stock/doctype/stock_settings/stock_settings.json
msgctxt "Stock Settings"
msgid "Control Historical Stock Transactions"
-msgstr ""
+msgstr "Historische Lagerbewegungen überprüfen"
#: public/js/utils.js:684
msgid "Conversion Factor"
@@ -16896,23 +16903,23 @@
#: manufacturing/doctype/job_card/job_card.js:146
msgid "Corrective Job Card"
-msgstr ""
+msgstr "Nacharbeitsauftrag"
#: manufacturing/doctype/job_card/job_card.js:151
msgid "Corrective Operation"
-msgstr ""
+msgstr "Nacharbeit"
#. Label of a Tab Break field in DocType 'Job Card'
#: manufacturing/doctype/job_card/job_card.json
msgctxt "Job Card"
msgid "Corrective Operation"
-msgstr ""
+msgstr "Nacharbeit"
#. Label of a Currency field in DocType 'Work Order'
#: manufacturing/doctype/work_order/work_order.json
msgctxt "Work Order"
msgid "Corrective Operation Cost"
-msgstr ""
+msgstr "Nacharbeitskosten"
#. Label of a Select field in DocType 'Quality Action'
#: quality_management/doctype/quality_action/quality_action.json
@@ -17540,7 +17547,7 @@
#: buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.py:46
#: buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.py:50
msgid "Could not find path for "
-msgstr ""
+msgstr "Konnte keinen Pfad finden für "
#: accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py:128
#: accounts/report/financial_statements.py:236
@@ -18267,7 +18274,7 @@
#: subcontracting/doctype/subcontracting_order/subcontracting_order.js:226
msgid "Creating Subcontracting Receipt ..."
-msgstr ""
+msgstr "Erstelle Unterauftragsbeleg ..."
#: setup/doctype/employee/employee.js:85
msgid "Creating User..."
@@ -21473,7 +21480,7 @@
#: stock/doctype/item/item.json
msgctxt "Item"
msgid "Default Purchase Unit of Measure"
-msgstr "Standard Maßeinheit Verkauf"
+msgstr "Standard Maßeinheit Einkauf"
#. Label of a Data field in DocType 'CRM Settings'
#: crm/doctype/crm_settings/crm_settings.json
@@ -27364,7 +27371,7 @@
#: stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:195
#: stock/report/stock_ledger_variance/stock_ledger_variance.py:119
msgid "FIFO/LIFO Queue"
-msgstr ""
+msgstr "FIFO/LIFO-Warteschlange"
#: erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js:62
#: manufacturing/doctype/bom_creator/bom_creator_list.js:13
@@ -27752,13 +27759,13 @@
#: accounts/doctype/payment_reconciliation/payment_reconciliation.json
msgctxt "Payment Reconciliation"
msgid "Filter on Invoice"
-msgstr ""
+msgstr "Nach Rechnung filtern"
#. Label of a Data field in DocType 'Payment Reconciliation'
#: accounts/doctype/payment_reconciliation/payment_reconciliation.json
msgctxt "Payment Reconciliation"
msgid "Filter on Payment"
-msgstr ""
+msgstr "Nach Zahlung filtern"
#: accounts/doctype/payment_entry/payment_entry.js:696
#: public/js/bank_reconciliation_tool/dialog_manager.js:192
@@ -27811,7 +27818,7 @@
#: manufacturing/doctype/bom_creator/bom_creator.json
msgctxt "BOM Creator"
msgid "Final Product"
-msgstr ""
+msgstr "Endprodukt"
#. Name of a DocType
#: accounts/doctype/finance_book/finance_book.json
@@ -28103,7 +28110,7 @@
#. Title of an Onboarding Step
#: manufacturing/onboarding_step/create_product/create_product.json
msgid "Finished Items"
-msgstr ""
+msgstr "Fertigerzeugnisse"
#. Label of a Time field in DocType 'Project'
#: projects/doctype/project/project.json
@@ -30658,7 +30665,7 @@
#: selling/doctype/quotation_item/quotation_item.json
msgctxt "Quotation Item"
msgid "Has Alternative Item"
-msgstr ""
+msgstr "Hat alternativen Artikel"
#. Label of a Check field in DocType 'Item'
#: stock/doctype/item/item.json
@@ -30862,7 +30869,7 @@
#: stock/stock_ledger.py:1669
msgid "Here are the options to proceed:"
-msgstr ""
+msgstr "Hier sind die Optionen für das weitere Vorgehen:"
#. Description of the 'Family Background' (Small Text) field in DocType
#. 'Employee'
@@ -30879,7 +30886,7 @@
#: setup/doctype/employee/employee.js:122
msgid "Here, you can select a senior of this Employee. Based on this, Organization Chart will be populated."
-msgstr ""
+msgstr "Hier können Sie einen Vorgesetzten dieses Mitarbeiters auswählen. Auf dieser Grundlage wird das Organigramm erstellt."
#: setup/doctype/holiday_list/holiday_list.js:75
msgid "Here, your weekly offs are pre-populated based on the previous selections. You can add more rows to also add public and national holidays individually."
@@ -34107,7 +34114,7 @@
#: accounts/doctype/sales_invoice/sales_invoice.json
msgctxt "Sales Invoice"
msgid "Is Cash or Non Trade Discount"
-msgstr ""
+msgstr "Ist Skonto bzw. kein Handelsrabatt "
#. Label of a Check field in DocType 'Share Balance'
#: accounts/doctype/share_balance/share_balance.json
@@ -34155,7 +34162,7 @@
#: manufacturing/doctype/operation/operation.json
msgctxt "Operation"
msgid "Is Corrective Operation"
-msgstr ""
+msgstr "Ist Nacharbeit"
#. Label of a Check field in DocType 'Pricing Rule'
#: accounts/doctype/pricing_rule/pricing_rule.json
@@ -34375,7 +34382,7 @@
#: assets/doctype/asset/asset.json
msgctxt "Asset"
msgid "Is Fully Depreciated"
-msgstr ""
+msgstr "Ist vollständig abgeschrieben"
#: accounts/doctype/account/account_tree.js:110
#: accounts/doctype/cost_center/cost_center_tree.js:23
@@ -43332,7 +43339,7 @@
#: telephony/doctype/call_log/call_log.py:119
msgid "No employee was scheduled for call popup"
-msgstr ""
+msgstr "Es war kein Mitarbeiter für das Anruf-Popup eingeplant"
#: accounts/doctype/payment_entry/payment_entry.js:1064
msgid "No gain or loss in the exchange rate"
@@ -43458,7 +43465,7 @@
#: accounts/doctype/payment_reconciliation/payment_reconciliation.py:677
msgid "No records found in Allocation table"
-msgstr ""
+msgstr "Keine Datensätze in der Zuteilungstabelle gefunden"
#: accounts/doctype/payment_reconciliation/payment_reconciliation.py:579
msgid "No records found in the Invoices table"
@@ -43466,7 +43473,7 @@
#: accounts/doctype/payment_reconciliation/payment_reconciliation.py:582
msgid "No records found in the Payments table"
-msgstr ""
+msgstr "Keine Datensätze in der Zahlungstabelle gefunden"
#. Description of the 'Stock Frozen Up To' (Date) field in DocType 'Stock
#. Settings'
@@ -49463,7 +49470,7 @@
#: stock/doctype/stock_ledger_entry/stock_ledger_entry.py:321
msgid "Please contact any of the following users to {} this transaction."
-msgstr ""
+msgstr "Bitte kontaktieren Sie einen der folgenden Benutzer, um diese Transaktion zu {}."
#: selling/doctype/customer/customer.py:531
msgid "Please contact your administrator to extend the credit limits for {0}."
@@ -49529,7 +49536,7 @@
#: accounts/doctype/sales_invoice/sales_invoice.py:871
msgid "Please ensure {} account is a Balance Sheet account."
-msgstr ""
+msgstr "Bitte stellen Sie sicher, dass das Konto {} ein Bilanzkonto ist."
#: accounts/doctype/purchase_invoice/purchase_invoice.py:366
msgid "Please ensure {} account is a Balance Sheet account. You can change the parent account to a Balance Sheet account or select a different account."
@@ -50914,7 +50921,7 @@
#: buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:246
msgid "Price ({0})"
-msgstr ""
+msgstr "Preis ({0})"
#. Label of a Section Break field in DocType 'Pricing Rule'
#: accounts/doctype/pricing_rule/pricing_rule.json
@@ -51314,7 +51321,7 @@
#: buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:253
msgid "Price Per Unit ({0})"
-msgstr ""
+msgstr "Preis pro Einheit ({0})"
#: selling/page/point_of_sale/pos_controller.js:553
msgid "Price is not set for the item."
@@ -52110,7 +52117,7 @@
#: stock/doctype/putaway_rule/putaway_rule.py:60
msgid "Priority cannot be lesser than 1."
-msgstr ""
+msgstr "Die Priorität kann nicht kleiner als 1 sein."
#: support/doctype/service_level_agreement/service_level_agreement.py:755
msgid "Priority has been changed to {0}."
@@ -52668,7 +52675,7 @@
#. Title of an Onboarding Step
#: manufacturing/onboarding_step/production_planning/production_planning.json
msgid "Production Planning"
-msgstr ""
+msgstr "Produktionsplanung"
#. Name of a report
#. Label of a Link in the Manufacturing Workspace
@@ -52685,17 +52692,17 @@
#. Subtitle of the Module Onboarding 'Buying'
#: buying/module_onboarding/buying/buying.json
msgid "Products, Purchases, Analysis, and more."
-msgstr ""
+msgstr "Produkte, Einkäufe, Analysen und mehr."
#. Subtitle of the Module Onboarding 'Manufacturing'
#: manufacturing/module_onboarding/manufacturing/manufacturing.json
msgid "Products, Raw Materials, BOM, Work Order, and more."
-msgstr ""
+msgstr "Produkte, Rohmaterialien, Stücklisten, Arbeitsaufträge und mehr."
#. Subtitle of the Module Onboarding 'Selling'
#: selling/module_onboarding/selling/selling.json
msgid "Products, Sales, Analysis, and more."
-msgstr ""
+msgstr "Produkte, Vertrieb, Analyse und mehr."
#. Label of a Tab Break field in DocType 'Employee'
#: setup/doctype/employee/employee.json
@@ -52736,13 +52743,13 @@
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
msgctxt "Bisect Accounting Statements"
msgid "Profit and Loss Summary"
-msgstr ""
+msgstr "Gewinn und Verlust Zusammenfassung"
#. Label of a Float field in DocType 'Bisect Nodes'
#: accounts/doctype/bisect_nodes/bisect_nodes.json
msgctxt "Bisect Nodes"
msgid "Profit and Loss Summary"
-msgstr ""
+msgstr "Gewinn und Verlust Zusammenfassung"
#: accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:132
#: accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:133
@@ -52774,11 +52781,11 @@
#: projects/doctype/task/task.py:143
#, python-format
msgid "Progress % for a task cannot be more than 100."
-msgstr ""
+msgstr "Der prozentuale Fortschritt für eine Aufgabe darf nicht mehr als 100 betragen."
#: projects/report/delayed_tasks_summary/delayed_tasks_summary.py:94
msgid "Progress (%)"
-msgstr ""
+msgstr "Fortschritt (%)"
#. Name of a DocType
#: accounts/doctype/sales_invoice/sales_invoice.js:973
@@ -53142,7 +53149,7 @@
#: templates/pages/projects.html:114
msgid "Project Progress:"
-msgstr ""
+msgstr "Projektfortschritt:"
#: projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py:47
msgid "Project Start Date"
@@ -56765,7 +56772,7 @@
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.py:226
msgid "Reached Root"
-msgstr ""
+msgstr "Oberste Ebene erreicht"
#. Label of a Check field in DocType 'POS Field'
#: accounts/doctype/pos_field/pos_field.json
@@ -56842,7 +56849,7 @@
#: stock/doctype/quality_inspection_reading/quality_inspection_reading.json
msgctxt "Quality Inspection Reading"
msgid "Reading Value"
-msgstr ""
+msgstr "Abgelesener Wert"
#. Label of a Table field in DocType 'Quality Inspection'
#: stock/doctype/quality_inspection/quality_inspection.json
@@ -57256,15 +57263,15 @@
#: accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.json
msgctxt "Process Payment Reconciliation Log"
msgid "Reconciliation Error Log"
-msgstr ""
+msgstr "Abstimmungsfehlerprotokoll"
#: accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_dashboard.py:9
msgid "Reconciliation Logs"
-msgstr ""
+msgstr "Abstimmungsprotokolle"
#: accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js:13
msgid "Reconciliation Progress"
-msgstr ""
+msgstr "Abstimmungsfortschritt"
#. Label of a HTML field in DocType 'Call Log'
#: telephony/doctype/call_log/call_log.json
@@ -58745,7 +58752,7 @@
#: accounts/doctype/currency_exchange_settings/currency_exchange_settings.json
msgctxt "Currency Exchange Settings"
msgid "Request Parameters"
-msgstr ""
+msgstr "Anfrageparameter"
#: accounts/doctype/pos_invoice/pos_invoice.js:269
msgid "Request Timeout"
@@ -59071,13 +59078,13 @@
#: stock/report/reserved_stock/reserved_stock.js:121
msgid "Reservation Based On"
-msgstr ""
+msgstr "Reservierung basierend auf"
#. Label of a Select field in DocType 'Stock Reservation Entry'
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.json
msgctxt "Stock Reservation Entry"
msgid "Reservation Based On"
-msgstr ""
+msgstr "Reservierung basierend auf"
#: selling/doctype/sales_order/sales_order.js:68
#: stock/doctype/pick_list/pick_list.js:110
@@ -59086,19 +59093,19 @@
#: selling/doctype/sales_order/sales_order.js:322
msgid "Reserve Stock"
-msgstr ""
+msgstr "Reservierter Bestand"
#. Label of a Check field in DocType 'Sales Order'
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "Reserve Stock"
-msgstr ""
+msgstr "Reservierter Bestand"
#. Label of a Check field in DocType 'Sales Order Item'
#: selling/doctype/sales_order_item/sales_order_item.json
msgctxt "Sales Order Item"
msgid "Reserve Stock"
-msgstr ""
+msgstr "Reservierter Bestand"
#. Label of a Link field in DocType 'Purchase Order Item Supplied'
#: buying/doctype/purchase_order_item_supplied/purchase_order_item_supplied.json
@@ -59137,7 +59144,7 @@
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:133
msgid "Reserved Qty ({0}) cannot be a fraction. To allow this, disable '{1}' in UOM {3}."
-msgstr ""
+msgstr "Die reservierte Menge ({0}) darf kein Bruchteil sein. Um dies zu ermöglichen, deaktivieren Sie '{1}' in UOM {3}."
#. Label of a Float field in DocType 'Bin'
#: stock/doctype/bin/bin.json
@@ -59155,17 +59162,17 @@
#: stock/doctype/bin/bin.json
msgctxt "Bin"
msgid "Reserved Qty for Production Plan"
-msgstr ""
+msgstr "Reservierte Menge für Produktionsplan"
#. Label of a Float field in DocType 'Bin'
#: stock/doctype/bin/bin.json
msgctxt "Bin"
msgid "Reserved Qty for Subcontract"
-msgstr ""
+msgstr "Reservierte Menge für Unterauftrag"
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:497
msgid "Reserved Qty should be greater than Delivered Qty."
-msgstr ""
+msgstr "Die reservierte Menge sollte größer sein als die gelieferte Menge."
#: stock/report/item_shortage_report/item_shortage_report.py:116
msgid "Reserved Quantity"
@@ -59177,7 +59184,7 @@
#: stock/stock_ledger.py:1982
msgid "Reserved Serial No."
-msgstr ""
+msgstr "Reservierte Seriennr."
#. Name of a report
#: selling/doctype/sales_order/sales_order.js:79
@@ -59196,23 +59203,23 @@
#: stock/stock_ledger.py:2012
msgid "Reserved Stock for Batch"
-msgstr ""
+msgstr "Reservierter Bestand für Charge"
#: stock/report/stock_projected_qty/stock_projected_qty.py:192
msgid "Reserved for POS Transactions"
-msgstr ""
+msgstr "Für Kassentransaktionen reserviert"
#: stock/report/stock_projected_qty/stock_projected_qty.py:171
msgid "Reserved for Production"
-msgstr ""
+msgstr "Für die Produktion reserviert"
#: stock/report/stock_projected_qty/stock_projected_qty.py:178
msgid "Reserved for Production Plan"
-msgstr ""
+msgstr "Für Produktionsplan reserviert"
#: stock/report/stock_projected_qty/stock_projected_qty.py:185
msgid "Reserved for Sub Contracting"
-msgstr ""
+msgstr "Für Unteraufträge reserviert"
#: stock/page/stock_balance/stock_balance.js:53
msgid "Reserved for manufacturing"
@@ -59238,7 +59245,7 @@
#: erpnext_integrations/doctype/plaid_settings/plaid_settings.js:19
msgid "Reset Plaid Link"
-msgstr ""
+msgstr "Plaid-Link zurücksetzen"
#: support/doctype/issue/issue.js:39
msgid "Reset Service Level Agreement"
@@ -60274,11 +60281,11 @@
#: stock/doctype/stock_reconciliation/stock_reconciliation.py:428
msgid "Row #"
-msgstr ""
+msgstr "Zeile #"
#: stock/doctype/stock_reconciliation/stock_reconciliation.py:334
msgid "Row # {0}:"
-msgstr ""
+msgstr "Zeile # {0}:"
#: controllers/sales_and_purchase_return.py:181
msgid "Row # {0}: Cannot return more than {1} for Item {2}"
@@ -60304,15 +60311,15 @@
#: stock/doctype/item/item.py:480
msgid "Row #{0}: A reorder entry already exists for warehouse {1} with reorder type {2}."
-msgstr ""
+msgstr "Zeile #{0}: Für das Lager {1} mit dem Nachbestellungstyp {2} ist bereits ein Nachbestellungseintrag vorhanden."
#: stock/doctype/quality_inspection/quality_inspection.py:235
msgid "Row #{0}: Acceptance Criteria Formula is incorrect."
-msgstr ""
+msgstr "Zeile #{0}: Die Formel für die Akzeptanzkriterien ist falsch."
#: stock/doctype/quality_inspection/quality_inspection.py:215
msgid "Row #{0}: Acceptance Criteria Formula is required."
-msgstr ""
+msgstr "Zeile #{0}: Die Formel für die Akzeptanzkriterien ist erforderlich."
#: controllers/subcontracting_controller.py:72
#: subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:413
@@ -60446,7 +60453,7 @@
#: controllers/stock_controller.py:336
msgid "Row #{0}: Expense Account not set for the Item {1}. {2}"
-msgstr ""
+msgstr "Zeile #{0}: Aufwandskonto für den Artikel nicht festgelegt {1}. {2}"
#: buying/doctype/purchase_order/purchase_order.py:378
msgid "Row #{0}: Finished Good Item Qty can not be zero"
@@ -60474,7 +60481,7 @@
#: accounts/doctype/tax_withholding_category/tax_withholding_category.py:44
msgid "Row #{0}: From Date cannot be before To Date"
-msgstr ""
+msgstr "Zeile #{0}: Von-Datum kann nicht vor Bis-Datum liegen"
#: public/js/utils/barcode_scanner.js:489
msgid "Row #{0}: Item added"
@@ -60526,7 +60533,7 @@
#: manufacturing/doctype/production_plan/production_plan.py:892
msgid "Row #{0}: Please select Item Code in Assembly Items"
-msgstr ""
+msgstr "Zeile #{0}: Bitte wählen Sie den Artikelcode in den Baugruppenartikeln aus"
#: manufacturing/doctype/production_plan/production_plan.py:895
msgid "Row #{0}: Please select the BOM No in Assembly Items"
@@ -60546,7 +60553,7 @@
#: public/js/utils/barcode_scanner.js:487
msgid "Row #{0}: Qty increased by {1}"
-msgstr ""
+msgstr "Zeile #{0}: Menge erhöht um {1}"
#: assets/doctype/asset_capitalization/asset_capitalization.py:264
#: assets/doctype/asset_capitalization/asset_capitalization.py:306
@@ -60555,7 +60562,7 @@
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:301
msgid "Row #{0}: Qty should be less than or equal to Available Qty to Reserve (Actual Qty - Reserved Qty) {1} for Iem {2} against Batch {3} in Warehouse {4}."
-msgstr ""
+msgstr "Zeile #{0}: Die Menge sollte kleiner oder gleich der verfügbaren Menge zum Reservieren sein (Ist-Menge – reservierte Menge) {1} für Artikel {2} der Charge {3} im Lager {4}."
#: controllers/accounts_controller.py:1018
#: controllers/accounts_controller.py:3166
@@ -60564,15 +60571,15 @@
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1017
msgid "Row #{0}: Quantity to reserve for the Item {1} should be greater than 0."
-msgstr ""
+msgstr "Zeile #{0}: Die zu reservierende Menge für den Artikel {1} sollte größer als 0 sein."
#: utilities/transaction_base.py:113 utilities/transaction_base.py:119
msgid "Row #{0}: Rate must be same as {1}: {2} ({3} / {4})"
-msgstr ""
+msgstr "Zeile #{0}: Einzelpreis muss gleich sein wie {1}: {2} ({3} / {4})"
#: controllers/buying_controller.py:470
msgid "Row #{0}: Received Qty must be equal to Accepted + Rejected Qty for Item {1}"
-msgstr ""
+msgstr "Zeile #{0}: Die erhaltene Menge muss gleich der angenommenen + abgelehnten Menge für Artikel {1} sein"
#: accounts/doctype/payment_entry/payment_entry.js:1016
msgid "Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry"
@@ -60588,7 +60595,7 @@
#: subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:387
msgid "Row #{0}: Rejected Qty cannot be set for Scrap Item {1}."
-msgstr ""
+msgstr "Zeile #{0}: Die abgelehnte Menge kann nicht für den Ausschussartikel {1} festgelegt werden."
#: controllers/subcontracting_controller.py:65
msgid "Row #{0}: Rejected Warehouse is mandatory for the rejected Item {1}"
@@ -60600,7 +60607,7 @@
#: subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:382
msgid "Row #{0}: Scrap Item Qty cannot be zero"
-msgstr ""
+msgstr "Zeile #{0}: Die Menge des Ausschussartikels darf nicht Null sein"
#: controllers/selling_controller.py:212
msgid "Row #{0}: Selling rate for item {1} is lower than its {2}.\n"
@@ -60619,7 +60626,7 @@
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:264
msgid "Row #{0}: Serial No {1} is already selected."
-msgstr ""
+msgstr "Zeile #{0}: Die Seriennummer {1} ist bereits ausgewählt."
#: controllers/accounts_controller.py:395
msgid "Row #{0}: Service End Date cannot be before Invoice Posting Date"
@@ -60639,7 +60646,7 @@
#: stock/doctype/quality_inspection/quality_inspection.py:120
msgid "Row #{0}: Status is mandatory"
-msgstr ""
+msgstr "Zeile #{0}: Status ist obligatorisch"
#: accounts/doctype/journal_entry/journal_entry.py:381
msgid "Row #{0}: Status must be {1} for Invoice Discounting {2}"
@@ -60647,7 +60654,7 @@
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:273
msgid "Row #{0}: Stock cannot be reserved for Item {1} against a disabled Batch {2}."
-msgstr ""
+msgstr "Zeile #{0}: Der Bestand kann nicht für Artikel {1} für eine deaktivierte Charge {2} reserviert werden."
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:962
msgid "Row #{0}: Stock cannot be reserved for a non-stock Item {1}"
@@ -60655,23 +60662,23 @@
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:975
msgid "Row #{0}: Stock cannot be reserved in group warehouse {1}."
-msgstr ""
+msgstr "Zeile #{0}: Bestand kann nicht im Gruppenlager {1} reserviert werden."
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:989
msgid "Row #{0}: Stock is already reserved for the Item {1}."
-msgstr ""
+msgstr "Zeile #{0}: Für den Artikel {1} ist bereits ein Lagerbestand reserviert."
#: stock/doctype/delivery_note/delivery_note.py:605
msgid "Row #{0}: Stock is reserved for item {1} in warehouse {2}."
-msgstr ""
+msgstr "Zeile #{0}: Der Bestand ist für den Artikel {1} im Lager {2} reserviert."
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:285
msgid "Row #{0}: Stock not available to reserve for Item {1} against Batch {2} in Warehouse {3}."
-msgstr ""
+msgstr "Zeile #{0}: Bestand nicht verfügbar für Artikel {1} von Charge {2} im Lager {3}."
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1003
msgid "Row #{0}: Stock not available to reserve for the Item {1} in Warehouse {2}."
-msgstr ""
+msgstr "Zeile #{0}: Kein Bestand für den Artikel {1} im Lager {2} verfügbar."
#: controllers/stock_controller.py:110
msgid "Row #{0}: The batch {1} has already expired."
@@ -60679,7 +60686,7 @@
#: accounts/doctype/sales_invoice/sales_invoice.py:1687
msgid "Row #{0}: The following Serial Nos are not present in Delivery Note {1}:"
-msgstr ""
+msgstr "Zeile #{0}: Die folgenden Seriennummern sind nicht im Lieferschein {1} enthalten:"
#: manufacturing/doctype/workstation/workstation.py:116
msgid "Row #{0}: Timings conflicts with row {1}"
@@ -60691,11 +60698,11 @@
#: accounts/doctype/sales_invoice/sales_invoice.py:1402
msgid "Row #{0}: You must select an Asset for Item {1}."
-msgstr ""
+msgstr "Zeile #{0}: Sie müssen einen Vermögensgegenstand für Artikel {1} auswählen."
#: accounts/doctype/sales_invoice/sales_invoice.py:1696
msgid "Row #{0}: {1} Serial numbers required for Item {2}. You have provided {3}."
-msgstr ""
+msgstr "Zeile #{0}: {1} Seriennummern erforderlich für Artikel {2}. Sie haben {3} angegeben."
#: controllers/buying_controller.py:483 public/js/controllers/buying.js:208
msgid "Row #{0}: {1} can not be negative for item {2}"
@@ -60715,7 +60722,7 @@
#: buying/utils.py:106
msgid "Row #{1}: Warehouse is mandatory for stock Item {0}"
-msgstr ""
+msgstr "Zeile #{1}: Lager ist obligatorisch für Artikel {0}"
#: assets/doctype/asset_category/asset_category.py:65
msgid "Row #{}: Currency of {} - {} doesn't matches company currency."
@@ -60735,7 +60742,7 @@
#: accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py:99
msgid "Row #{}: Original Invoice {} of return invoice {} is {}."
-msgstr ""
+msgstr "Zeile #{}: Originalrechnung {} der Rechnungskorrektur {} ist {}."
#: accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py:87
msgid "Row #{}: POS Invoice {} has been {}"
@@ -60787,7 +60794,7 @@
#: accounts/doctype/purchase_invoice/purchase_invoice.py:433
msgid "Row No {0}: Warehouse is required. Please set a Default Warehouse for Item {1} and Company {2}"
-msgstr ""
+msgstr "Zeile Nr. {0}: Lager ist erforderlich. Bitte legen Sie ein Standardlager für Artikel {1} und Unternehmen {2} fest"
#: manufacturing/doctype/job_card/job_card.py:599
msgid "Row {0} : Operation is required against the raw material item {1}"
@@ -60803,11 +60810,11 @@
#: stock/doctype/stock_entry/stock_entry.py:1159
msgid "Row {0}# Item {1} not found in 'Raw Materials Supplied' table in {2} {3}"
-msgstr ""
+msgstr "Zeile {0}# Artikel {1} wurde in der Tabelle „Gelieferte Rohstoffe“ in {2} {3} nicht gefunden"
#: subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:190
msgid "Row {0}: Accepted Qty and Rejected Qty can't be zero at the same time."
-msgstr ""
+msgstr "Zeile {0}: Die akzeptierte Menge und die abgelehnte Menge können nicht gleichzeitig Null sein."
#: accounts/doctype/journal_entry/journal_entry.py:509
msgid "Row {0}: Account {1} and Party Type {2} have different account types"
@@ -60815,7 +60822,7 @@
#: controllers/accounts_controller.py:2536
msgid "Row {0}: Account {1} is a Group Account"
-msgstr ""
+msgstr "Zeile {0}: Konto {1} ist eine Kontogruppe"
#: projects/doctype/timesheet/timesheet.py:117
msgid "Row {0}: Activity Type is mandatory."
@@ -60851,7 +60858,7 @@
#: controllers/accounts_controller.py:2549
msgid "Row {0}: Cost Center {1} does not belong to Company {2}"
-msgstr ""
+msgstr "Zeile {0}: Die Kostenstelle {1} gehört nicht zum Unternehmen {2}"
#: stock/doctype/landed_cost_voucher/landed_cost_voucher.py:116
msgid "Row {0}: Cost center is required for an item {1}"
@@ -60945,11 +60952,11 @@
#: controllers/buying_controller.py:400 controllers/selling_controller.py:479
msgid "Row {0}: Item rate has been updated as per valuation rate since its an internal stock transfer"
-msgstr ""
+msgstr "Zeile {0}: Der Einzelpreis wurde gemäß dem Bewertungskurs aktualisiert, da es sich um eine interne Umlagerung handelt"
#: controllers/subcontracting_controller.py:98
msgid "Row {0}: Item {1} must be a stock item."
-msgstr ""
+msgstr "Zeile {0}: Artikel {1} muss ein Lagerartikel sein."
#: controllers/subcontracting_controller.py:103
msgid "Row {0}: Item {1} must be a subcontracted item."
@@ -60961,7 +60968,7 @@
#: stock/doctype/packing_slip/packing_slip.py:148
msgid "Row {0}: Packing Slip is already created for Item {1}."
-msgstr ""
+msgstr "Zeile {0}: Für den Artikel {1} wurde bereits ein Packzettel erstellt."
#: accounts/doctype/journal_entry/journal_entry.py:687
msgid "Row {0}: Party / Account does not match with {1} / {2} in {3} {4}"
@@ -60973,7 +60980,7 @@
#: accounts/doctype/payment_terms_template/payment_terms_template.py:47
msgid "Row {0}: Payment Term is mandatory"
-msgstr ""
+msgstr "Zeile {0}: Zahlungsbedingung ist obligatorisch"
#: accounts/doctype/journal_entry/journal_entry.py:554
msgid "Row {0}: Payment against Sales/Purchase Order should always be marked as advance"
@@ -60989,15 +60996,15 @@
#: controllers/subcontracting_controller.py:118
msgid "Row {0}: Please select a BOM for Item {1}."
-msgstr ""
+msgstr "Zeile {0}: Bitte wählen Sie eine Stückliste für Artikel {1}."
#: controllers/subcontracting_controller.py:111
msgid "Row {0}: Please select an active BOM for Item {1}."
-msgstr ""
+msgstr "Zeile {0}: Bitte wählen Sie eine aktive Stückliste für Artikel {1}."
#: controllers/subcontracting_controller.py:115
msgid "Row {0}: Please select an valid BOM for Item {1}."
-msgstr ""
+msgstr "Zeile {0}: Bitte wählen Sie eine gültige Stückliste für Artikel {1}."
#: regional/italy/utils.py:310
msgid "Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges"
@@ -61017,19 +61024,19 @@
#: stock/doctype/landed_cost_voucher/landed_cost_voucher.py:93
msgid "Row {0}: Purchase Invoice {1} has no stock impact."
-msgstr ""
+msgstr "Zeile {0}: Eingangsrechnung {1} hat keine Auswirkungen auf den Bestand."
#: stock/doctype/packing_slip/packing_slip.py:154
msgid "Row {0}: Qty cannot be greater than {1} for the Item {2}."
-msgstr ""
+msgstr "Zeile {0}: Die Menge darf für den Artikel {2} nicht größer als {1} sein."
#: stock/doctype/stock_entry/stock_entry.py:407
msgid "Row {0}: Qty in Stock UOM can not be zero."
-msgstr ""
+msgstr "Zeile {0}: Menge in Lager-ME kann nicht Null sein."
#: stock/doctype/packing_slip/packing_slip.py:125
msgid "Row {0}: Qty must be greater than 0."
-msgstr ""
+msgstr "Zeile {0}: Menge muss größer als 0 sein."
#: stock/doctype/stock_entry/stock_entry.py:762
msgid "Row {0}: Quantity not available for {4} in warehouse {1} at posting time of the entry ({2} {3})"
@@ -61177,7 +61184,7 @@
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json
msgctxt "Serial and Batch Bundle"
msgid "SABB-.########"
-msgstr ""
+msgstr "SABB-.########"
#. Option for the 'Naming Series' (Select) field in DocType 'Campaign'
#: crm/doctype/campaign/campaign.json
@@ -61219,7 +61226,7 @@
#: support/doctype/service_level_agreement/service_level_agreement.json
msgctxt "Service Level Agreement"
msgid "SLA Fulfilled On"
-msgstr ""
+msgstr "SLA erfüllt am"
#. Name of a DocType
#: support/doctype/sla_fulfilled_on_status/sla_fulfilled_on_status.json
@@ -61230,7 +61237,7 @@
#: support/doctype/service_level_agreement/service_level_agreement.json
msgctxt "Service Level Agreement"
msgid "SLA Paused On"
-msgstr ""
+msgstr "SLA pausiert am"
#: public/js/utils.js:1015
msgid "SLA is on hold since {0}"
@@ -61242,7 +61249,7 @@
#: support/doctype/service_level_agreement/service_level_agreement.js:32
msgid "SLA will be applied on every {0}"
-msgstr ""
+msgstr "SLA wird alle {0} angewendet"
#. Name of a DocType
#: selling/doctype/sms_center/sms_center.json
@@ -62734,7 +62741,7 @@
#: public/js/utils/serial_no_batch_selector.js:151
msgid "Scan Batch No"
-msgstr ""
+msgstr "Chargennummer scannen"
#. Label of a Check field in DocType 'Pick List'
#: stock/doctype/pick_list/pick_list.json
@@ -62750,15 +62757,15 @@
#: public/js/utils/serial_no_batch_selector.js:136
msgid "Scan Serial No"
-msgstr ""
+msgstr "Seriennummer scannen"
#: public/js/utils/barcode_scanner.js:172
msgid "Scan barcode for item {0}"
-msgstr ""
+msgstr "Barcode für Artikel {0} scannen"
#: stock/doctype/stock_reconciliation/stock_reconciliation.js:94
msgid "Scan mode enabled, existing quantity will not be fetched."
-msgstr ""
+msgstr "Scanmodus aktiviert, vorhandene Menge wird nicht abgerufen."
#. Label of a Attach field in DocType 'Cheque Print Template'
#: accounts/doctype/cheque_print_template/cheque_print_template.json
@@ -62768,7 +62775,7 @@
#: public/js/utils/barcode_scanner.js:238
msgid "Scanned Quantity"
-msgstr ""
+msgstr "Gescannte Menge"
#. Label of a Section Break field in DocType 'Maintenance Schedule'
#: maintenance/doctype/maintenance_schedule/maintenance_schedule.json
@@ -62837,7 +62844,7 @@
#: manufacturing/doctype/job_card/job_card.json
msgctxt "Job Card"
msgid "Scheduled Time Logs"
-msgstr ""
+msgstr "Geplante Zeitprotokolle"
#: accounts/doctype/bank_statement_import/bank_statement_import.py:84
#: accounts/doctype/ledger_merge/ledger_merge.py:39
@@ -62856,7 +62863,7 @@
#: accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py:549
msgid "Scheduler is inactive. Cannot enqueue job."
-msgstr ""
+msgstr "Zeitplaner ist inaktiv. Aufgabe kann nicht eingereiht werden."
#: accounts/doctype/bank_statement_import/bank_statement_import.py:84
#: accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py:232
@@ -62865,7 +62872,7 @@
#: accounts/doctype/ledger_merge/ledger_merge.py:39
msgid "Scheduler is inactive. Cannot merge accounts."
-msgstr ""
+msgstr "Zeitplaner ist inaktiv. Konten können nicht zusammengeführt werden."
#. Label of a Table field in DocType 'Maintenance Schedule'
#: maintenance/doctype/maintenance_schedule/maintenance_schedule.json
@@ -62877,7 +62884,7 @@
#: stock/doctype/stock_reposting_settings/stock_reposting_settings.json
msgctxt "Stock Reposting Settings"
msgid "Scheduling"
-msgstr ""
+msgstr "Zeitplan"
#. Label of a Small Text field in DocType 'Employee Education'
#: setup/doctype/employee_education/employee_education.json
@@ -63269,7 +63276,7 @@
#: public/js/bank_reconciliation_tool/dialog_manager.js:248
msgid "Select Vouchers to Match"
-msgstr ""
+msgstr "Passende Belege auswählen"
#: public/js/stock_analytics.js:46
msgid "Select Warehouse..."
@@ -63289,7 +63296,7 @@
#: buying/doctype/supplier/supplier.js:160
msgid "Select a Customer"
-msgstr ""
+msgstr "Wählen Sie einen Kunden"
#: support/doctype/service_level_agreement/service_level_agreement.py:111
msgid "Select a Default Priority."
@@ -63309,7 +63316,7 @@
#: stock/doctype/item/item.js:809
msgid "Select an Item Group."
-msgstr ""
+msgstr "Wählen Sie eine Artikelgruppe."
#: accounts/report/general_ledger/general_ledger.py:31
msgid "Select an account to print in account currency"
@@ -63358,16 +63365,16 @@
#: manufacturing/doctype/work_order/work_order.js:807
msgid "Select the Item to be manufactured."
-msgstr ""
+msgstr "Wählen Sie den Artikel, der hergestellt werden soll."
#: manufacturing/doctype/bom/bom.js:725
msgid "Select the Item to be manufactured. The Item name, UoM, Company, and Currency will be fetched automatically."
-msgstr ""
+msgstr "Wählen Sie den Artikel, der hergestellt werden soll. Der Name des Artikels, die ME, das Unternehmen und die Währung werden automatisch abgerufen."
#: manufacturing/doctype/production_plan/production_plan.js:294
#: manufacturing/doctype/production_plan/production_plan.js:305
msgid "Select the Warehouse"
-msgstr ""
+msgstr "Wählen Sie das Lager aus"
#: accounts/doctype/bank_guarantee/bank_guarantee.py:47
msgid "Select the customer or supplier."
@@ -63375,11 +63382,11 @@
#: www/book_appointment/index.html:16
msgid "Select the date and your timezone"
-msgstr ""
+msgstr "Wählen Sie das Datum und Ihre Zeitzone"
#: manufacturing/doctype/bom/bom.js:740
msgid "Select the raw materials (Items) required to manufacture the Item"
-msgstr ""
+msgstr "Wählen Sie die Rohstoffe (Artikel) aus, die zur Herstellung des Artikels benötigt werden"
#: manufacturing/doctype/bom/bom.js:338
msgid "Select variant item code for the template item {0}"
@@ -63546,13 +63553,13 @@
#: buying/doctype/request_for_quotation/request_for_quotation.json
msgctxt "Request for Quotation"
msgid "Send Attached Files"
-msgstr ""
+msgstr "Angehängte Dateien senden"
#. Label of a Check field in DocType 'Request for Quotation'
#: buying/doctype/request_for_quotation/request_for_quotation.json
msgctxt "Request for Quotation"
msgid "Send Document Print"
-msgstr ""
+msgstr "Ausdruck der Anfrage senden"
#. Label of a Check field in DocType 'Request for Quotation Supplier'
#: buying/doctype/request_for_quotation_supplier/request_for_quotation_supplier.json
@@ -63562,7 +63569,7 @@
#: accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js:11
msgid "Send Emails"
-msgstr ""
+msgstr "E-Mails senden"
#: buying/doctype/request_for_quotation/request_for_quotation.js:46
msgid "Send Emails to Suppliers"
@@ -63661,19 +63668,19 @@
#: telephony/doctype/incoming_call_settings/incoming_call_settings.json
msgctxt "Incoming Call Settings"
msgid "Sequential"
-msgstr ""
+msgstr "Sequentiell"
#. Label of a Tab Break field in DocType 'Stock Settings'
#: stock/doctype/stock_settings/stock_settings.json
msgctxt "Stock Settings"
msgid "Serial & Batch Item"
-msgstr ""
+msgstr "Serien- und Chargenartikel"
#. Label of a Section Break field in DocType 'Stock Settings'
#: stock/doctype/stock_settings/stock_settings.json
msgctxt "Stock Settings"
msgid "Serial & Batch Item Settings"
-msgstr ""
+msgstr "Einstellungen für Serien- und Chargenartikel"
#. Label of a Link field in DocType 'Stock Reconciliation Item'
#: stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json
@@ -63695,7 +63702,7 @@
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json
msgctxt "Serial and Batch Bundle"
msgid "Serial / Batch No"
-msgstr ""
+msgstr "Serien-/Chargennr"
#: public/js/utils.js:124
msgid "Serial / Batch Nos"
@@ -63918,7 +63925,7 @@
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:577
msgid "Serial No is mandatory"
-msgstr ""
+msgstr "Seriennummer ist obligatorisch"
#: selling/doctype/installation_note/installation_note.py:76
msgid "Serial No is mandatory for Item {0}"
@@ -63926,11 +63933,11 @@
#: public/js/utils/serial_no_batch_selector.js:480
msgid "Serial No {0} already exists"
-msgstr ""
+msgstr "Die Seriennummer {0} existiert bereits"
#: public/js/utils/barcode_scanner.js:311
msgid "Serial No {0} already scanned"
-msgstr ""
+msgstr "Seriennummer {0} bereits gescannt"
#: selling/doctype/installation_note/installation_note.py:93
msgid "Serial No {0} does not belong to Delivery Note {1}"
@@ -63951,12 +63958,12 @@
#: public/js/utils/barcode_scanner.js:402
msgid "Serial No {0} has already scanned."
-msgstr ""
+msgstr "Seriennummer {0} wurde bereits gescannt."
#: public/js/utils/barcode_scanner.js:499
#: public/js/utils/barcode_scanner.js:506
msgid "Serial No {0} is already added"
-msgstr ""
+msgstr "Die Seriennummer {0} ist bereits hinzugefügt"
#: maintenance/doctype/maintenance_schedule/maintenance_schedule.py:341
msgid "Serial No {0} is under maintenance contract upto {1}"
@@ -63979,16 +63986,16 @@
#: public/js/utils/serial_no_batch_selector.js:178
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js:48
msgid "Serial Nos"
-msgstr ""
+msgstr "Seriennummern"
#: public/js/utils/serial_no_batch_selector.js:20
#: public/js/utils/serial_no_batch_selector.js:183
msgid "Serial Nos / Batch Nos"
-msgstr ""
+msgstr "Serien-/Chargennummern"
#: accounts/doctype/sales_invoice/sales_invoice.py:1692
msgid "Serial Nos Mismatch"
-msgstr ""
+msgstr "Seriennummern stimmen nicht überein"
#. Label of a Section Break field in DocType 'Item'
#: stock/doctype/item/item.json
@@ -63998,11 +64005,11 @@
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1074
msgid "Serial Nos are created successfully"
-msgstr ""
+msgstr "Seriennummern wurden erfolgreich erstellt"
#: stock/stock_ledger.py:1972
msgid "Serial Nos are reserved in Stock Reservation Entries, you need to unreserve them before proceeding."
-msgstr ""
+msgstr "Seriennummern sind bereits reserviert. Sie müssen die Reservierung aufheben, bevor Sie fortfahren."
#. Label of a Data field in DocType 'Item'
#: stock/doctype/item/item.json
@@ -64014,14 +64021,14 @@
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json
msgctxt "Serial and Batch Bundle"
msgid "Serial and Batch"
-msgstr ""
+msgstr "Seriennummer und Charge"
#. Option for the 'Reservation Based On' (Select) field in DocType 'Stock
#. Reservation Entry'
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.json
msgctxt "Stock Reservation Entry"
msgid "Serial and Batch"
-msgstr ""
+msgstr "Seriennummer und Charge"
#. Name of a DocType
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json
@@ -64667,13 +64674,13 @@
#: accounts/doctype/currency_exchange_settings/currency_exchange_settings.json
msgctxt "Currency Exchange Settings"
msgid "Service Provider"
-msgstr ""
+msgstr "Anbieter"
#. Label of a Data field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Service Provider"
-msgstr ""
+msgstr "Anbieter"
#. Option for the 'Account Type' (Select) field in DocType 'Account'
#: accounts/doctype/account/account.json
@@ -64762,7 +64769,7 @@
#: buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:150
msgid "Set Default Supplier"
-msgstr ""
+msgstr "Standard-Lieferant festlegen"
#. Label of a Button field in DocType 'Payment Entry'
#: accounts/doctype/payment_entry/payment_entry.json
@@ -64835,7 +64842,7 @@
#: projects/doctype/project/project.js:118
#: projects/doctype/project/project.js:132
msgid "Set Project Status"
-msgstr ""
+msgstr "Projektstatus festlegen"
#: projects/doctype/project/project.js:154
msgid "Set Project and all Tasks to status {0}?"
@@ -64923,7 +64930,7 @@
#: selling/doctype/sales_order/sales_order.js:184
msgid "Set Warehouse"
-msgstr ""
+msgstr "Lager festlegen"
#: crm/doctype/opportunity/opportunity_list.js:17
#: support/doctype/issue/issue_list.js:12
@@ -65258,13 +65265,13 @@
#: stock/doctype/delivery_note/delivery_note.js:166
#: stock/doctype/shipment/shipment.json
msgid "Shipment"
-msgstr ""
+msgstr "Sendung"
#. Linked DocType in Incoterm's connections
#: setup/doctype/incoterm/incoterm.json
msgctxt "Incoterm"
msgid "Shipment"
-msgstr ""
+msgstr "Sendung"
#. Label of a Currency field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
@@ -65275,53 +65282,53 @@
#. Name of a DocType
#: stock/doctype/shipment_delivery_note/shipment_delivery_note.json
msgid "Shipment Delivery Note"
-msgstr ""
+msgstr "Lieferschein für die Sendung"
#. Label of a Table field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Shipment Delivery Note"
-msgstr ""
+msgstr "Lieferschein für die Sendung"
#. Label of a Data field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Shipment ID"
-msgstr ""
+msgstr "Sendungs-ID"
#. Label of a Section Break field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Shipment Information"
-msgstr ""
+msgstr "Sendungsinformationen"
#. Name of a DocType
#: stock/doctype/shipment_parcel/shipment_parcel.json
msgid "Shipment Parcel"
-msgstr ""
+msgstr "Versandpaket"
#. Label of a Table field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Shipment Parcel"
-msgstr ""
+msgstr "Versandpaket"
#. Name of a DocType
#: stock/doctype/shipment_parcel_template/shipment_parcel_template.json
msgid "Shipment Parcel Template"
-msgstr ""
+msgstr "Versandpaketvorlage"
#. Label of a Select field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Shipment Type"
-msgstr ""
+msgstr "Sendungstyp"
#. Label of a Section Break field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Shipment details"
-msgstr ""
+msgstr "Sendungsdetails"
#: stock/doctype/delivery_note/delivery_note.py:846
msgid "Shipments"
@@ -65417,19 +65424,19 @@
#: buying/doctype/purchase_order/purchase_order.json
msgctxt "Purchase Order"
msgid "Shipping Address Details"
-msgstr ""
+msgstr "Lieferadressendetails"
#. Label of a Small Text field in DocType 'Subcontracting Order'
#: subcontracting/doctype/subcontracting_order/subcontracting_order.json
msgctxt "Subcontracting Order"
msgid "Shipping Address Details"
-msgstr ""
+msgstr "Lieferadressendetails"
#. Label of a Small Text field in DocType 'Supplier Quotation'
#: buying/doctype/supplier_quotation/supplier_quotation.json
msgctxt "Supplier Quotation"
msgid "Shipping Address Details"
-msgstr ""
+msgstr "Lieferadressendetails"
#. Label of a Link field in DocType 'POS Invoice'
#: accounts/doctype/pos_invoice/pos_invoice.json
@@ -65453,7 +65460,7 @@
#: stock/doctype/purchase_receipt/purchase_receipt.json
msgctxt "Purchase Receipt"
msgid "Shipping Address Template"
-msgstr ""
+msgstr "Vorlage Lieferadresse"
#: accounts/doctype/shipping_rule/shipping_rule.py:130
msgid "Shipping Address does not have country, which is required for this Shipping Rule"
@@ -65838,7 +65845,7 @@
#: stock/utils.py:588
msgid "Show pending entries"
-msgstr ""
+msgstr "Ausstehende Einträge anzeigen"
#: accounts/report/trial_balance/trial_balance.js:93
msgid "Show unclosed fiscal year's P&L balances"
@@ -66282,7 +66289,7 @@
#: accounts/doctype/dunning/dunning.json
msgctxt "Dunning"
msgid "Spacer"
-msgstr ""
+msgstr "Abstandshalter"
#: assets/doctype/asset/asset.js:467 stock/doctype/batch/batch.js:143
#: support/doctype/issue/issue.js:100
@@ -66295,7 +66302,7 @@
#: stock/doctype/batch/batch.js:142
msgid "Split Batch"
-msgstr ""
+msgstr "Charge aufteilen"
#. Description of the 'Book Tax Loss on Early Payment Discount' (Check) field
#. in DocType 'Accounts Settings'
@@ -68160,19 +68167,19 @@
#: manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json
msgctxt "Production Plan Sub Assembly Item"
msgid "Sub Assembly Item Code"
-msgstr ""
+msgstr "Artikelcode der Unterbaugruppe"
#. Label of a Section Break field in DocType 'Production Plan'
#: manufacturing/doctype/production_plan/production_plan.json
msgctxt "Production Plan"
msgid "Sub Assembly Items"
-msgstr ""
+msgstr "Artikel der Unterbaugruppe"
#. Label of a Link field in DocType 'Production Plan'
#: manufacturing/doctype/production_plan/production_plan.json
msgctxt "Production Plan"
msgid "Sub Assembly Warehouse"
-msgstr ""
+msgstr "Unterbaugruppe Lager"
#. Name of a DocType
#: manufacturing/doctype/sub_operation/sub_operation.json
@@ -68222,14 +68229,14 @@
#: stock/doctype/purchase_receipt_item/purchase_receipt_item.json
msgctxt "Purchase Receipt Item"
msgid "Subcontract BOM"
-msgstr ""
+msgstr "Stückliste für Unterauftragnehmer"
#: buying/report/subcontract_order_summary/subcontract_order_summary.js:37
#: buying/report/subcontract_order_summary/subcontract_order_summary.py:128
#: buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py:22
#: buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py:22
msgid "Subcontract Order"
-msgstr ""
+msgstr "Unterauftrag"
#. Name of a report
#: buying/report/subcontract_order_summary/subcontract_order_summary.json
@@ -68302,7 +68309,7 @@
#: buying/doctype/buying_settings/buying_settings.json
msgctxt "Buying Settings"
msgid "Subcontracting Order (Draft) will be auto-created on submission of Purchase Order."
-msgstr ""
+msgstr "Unterauftrag (Entwurf) wird automatisch bei der Buchung der Lieferantenbestellung erstellt."
#. Name of a DocType
#: subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json
@@ -68339,20 +68346,20 @@
#: subcontracting/doctype/subcontracting_order/subcontracting_order.js:188
#: subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json
msgid "Subcontracting Receipt"
-msgstr ""
+msgstr "Unterauftragsbeleg"
#. Label of a Link field in DocType 'Purchase Receipt'
#: stock/doctype/purchase_receipt/purchase_receipt.json
msgctxt "Purchase Receipt"
msgid "Subcontracting Receipt"
-msgstr ""
+msgstr "Unterauftragsbeleg"
#. Option for the 'Reference Type' (Select) field in DocType 'Quality
#. Inspection'
#: stock/doctype/quality_inspection/quality_inspection.json
msgctxt "Quality Inspection"
msgid "Subcontracting Receipt"
-msgstr ""
+msgstr "Unterauftragsbeleg"
#. Name of a DocType
#: subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json
@@ -69580,7 +69587,7 @@
#: buying/doctype/supplier/supplier.json
msgctxt "Supplier"
msgid "Supplier Portal Users"
-msgstr ""
+msgstr "Benutzer des Lieferantenportals"
#. Label of a Link field in DocType 'Supplier'
#: buying/doctype/supplier/supplier.json
@@ -69820,7 +69827,7 @@
#: setup/setup_wizard/operations/install_fixtures.py:251
#: support/workspace/support/support.json
msgid "Support"
-msgstr ""
+msgstr "Hilfe"
#. Name of a report
#: support/report/support_hour_distribution/support_hour_distribution.json
@@ -69882,7 +69889,7 @@
#: erpnext_integrations/doctype/plaid_settings/plaid_settings.js:31
msgid "Sync Started"
-msgstr ""
+msgstr "Synchronisierung gestartet"
#. Label of a Check field in DocType 'Plaid Settings'
#: erpnext_integrations/doctype/plaid_settings/plaid_settings.json
@@ -71906,12 +71913,12 @@
#. Success message of the Module Onboarding 'Buying'
#: buying/module_onboarding/buying/buying.json
msgid "The Buying Module is all set up!"
-msgstr ""
+msgstr "Das Einkaufsmodul ist fertig eingerichtet!"
#. Success message of the Module Onboarding 'CRM'
#: crm/module_onboarding/crm/crm.json
msgid "The CRM Module is all set up!"
-msgstr ""
+msgstr "Das CRM-Modul ist fertig eingerichtet!"
#: crm/doctype/email_campaign/email_campaign.py:71
msgid "The Campaign '{0}' already exists for the {1} '{2}'"
@@ -71927,11 +71934,11 @@
#: accounts/doctype/period_closing_voucher/period_closing_voucher.py:70
msgid "The GL Entries will be cancelled in the background, it can take a few minutes."
-msgstr ""
+msgstr "Die Hauptbucheinträge werden im Hintergrund storniert, dies kann einige Minuten dauern."
#: accounts/doctype/period_closing_voucher/period_closing_voucher.py:176
msgid "The GL Entries will be processed in the background, it can take a few minutes."
-msgstr ""
+msgstr "Die Hauptbucheinträge werden im Hintergrund verarbeitet, dies kann einige Minuten dauern."
#: accounts/doctype/loyalty_program/loyalty_program.py:163
msgid "The Loyalty Program isn't valid for the selected company"
@@ -71956,7 +71963,7 @@
#. Success message of the Module Onboarding 'Selling'
#: selling/module_onboarding/selling/selling.json
msgid "The Selling Module is all set up!"
-msgstr ""
+msgstr "Das Vertriebsmodul ist fertig eingerichtet!"
#: manufacturing/doctype/manufacturing_settings/manufacturing_settings.js:16
msgid "The Stock Entry of type 'Manufacture' is known as backflush. Raw materials being consumed to manufacture finished goods is known as backflushing. <br><br> When creating Manufacture Entry, raw-material items are backflushed based on BOM of production item. If you want raw-material items to be backflushed based on Material Transfer entry made against that Work Order instead, then you can set it under this field."
@@ -71965,7 +71972,7 @@
#. Success message of the Module Onboarding 'Stock'
#: stock/module_onboarding/stock/stock.json
msgid "The Stock Module is all set up!"
-msgstr ""
+msgstr "Das Lagermodul ist fertig eingerichtet!"
#. Description of the 'Closing Account Head' (Link) field in DocType 'Period
#. Closing Voucher'
@@ -71987,11 +71994,11 @@
#: accounts/doctype/dunning/dunning.py:86
msgid "The currency of invoice {} ({}) is different from the currency of this dunning ({})."
-msgstr ""
+msgstr "Die Währung der Rechnung {} ({}) unterscheidet sich von der Währung dieser Mahnung ({})."
#: manufacturing/doctype/work_order/work_order.js:812
msgid "The default BOM for that item will be fetched by the system. You can also change the BOM."
-msgstr ""
+msgstr "Die Standardstückliste für diesen Artikel wird vom System abgerufen. Sie können die Stückliste auch ändern."
#: crm/doctype/appointment_booking_settings/appointment_booking_settings.py:69
msgid "The difference between from time and To Time must be a multiple of Appointment"
@@ -72024,7 +72031,7 @@
#: stock/doctype/putaway_rule/putaway_rule.py:292
msgid "The following Items, having Putaway Rules, could not be accomodated:"
-msgstr ""
+msgstr "Die folgenden Artikel, für die Einlagerungsregeln gelten, konnten nicht untergebracht werden:"
#: assets/doctype/asset/depreciation.py:414
msgid "The following assets have failed to automatically post depreciation entries: {0}"
@@ -75294,7 +75301,7 @@
#: assets/doctype/asset_movement/asset_movement.py:76
msgid "Transferring cannot be done to an Employee. Please enter location where Asset {0} has to be transferred"
-msgstr ""
+msgstr "Die Übertragung kann nicht an einen Mitarbeiter erfolgen. Bitte geben Sie den Ort ein, an den der Vermögensgegenstand {0} übertragen werden soll."
#. Label of a Section Break field in DocType 'Warehouse'
#: stock/doctype/warehouse/warehouse.json
@@ -76420,7 +76427,7 @@
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js:17
msgid "Up"
-msgstr ""
+msgstr "Hoch"
#. Label of a Check field in DocType 'Email Digest'
#: setup/doctype/email_digest/email_digest.json
diff --git a/erpnext/locale/es.po b/erpnext/locale/es.po
index 17a7762..a99d9f5 100644
--- a/erpnext/locale/es.po
+++ b/erpnext/locale/es.po
@@ -3,7 +3,7 @@
"Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: info@erpnext.com\n"
"POT-Creation-Date: 2024-01-29 18:13+0053\n"
-"PO-Revision-Date: 2024-02-02 12:58\n"
+"PO-Revision-Date: 2024-03-05 14:17\n"
"Last-Translator: info@erpnext.com\n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
@@ -30,35 +30,35 @@
#: selling/doctype/quotation/quotation.js:76
msgid " Address"
-msgstr ""
+msgstr " Dirección"
#: accounts/report/item_wise_sales_register/item_wise_sales_register.py:612
msgid " Amount"
-msgstr ""
+msgstr " Importe"
#. Label of a Check field in DocType 'Inventory Dimension'
#: stock/doctype/inventory_dimension/inventory_dimension.json
msgctxt "Inventory Dimension"
msgid " Is Child Table"
-msgstr ""
+msgstr " Es una tabla secundaria"
#: accounts/report/tax_withholding_details/tax_withholding_details.py:186
#: accounts/report/tds_computation_summary/tds_computation_summary.py:107
#: selling/report/sales_analytics/sales_analytics.py:66
msgid " Name"
-msgstr ""
+msgstr " Nombre"
#: public/js/bom_configurator/bom_configurator.bundle.js:108
msgid " Qty"
-msgstr ""
+msgstr " Cant"
#: accounts/report/item_wise_sales_register/item_wise_sales_register.py:603
msgid " Rate"
-msgstr ""
+msgstr " Precio"
#: public/js/bom_configurator/bom_configurator.bundle.js:116
msgid " Raw Material"
-msgstr ""
+msgstr " Materia Prima"
#: public/js/bom_configurator/bom_configurator.bundle.js:127
#: public/js/bom_configurator/bom_configurator.bundle.js:157
@@ -67,7 +67,7 @@
#: projects/doctype/project_update/project_update.py:110
msgid " Summary"
-msgstr ""
+msgstr " Resumen"
#: stock/doctype/item/item.py:235
msgid "\"Customer Provided Item\" cannot be Purchase Item also"
@@ -154,7 +154,12 @@
"- Lead\n"
"- Opportunity\n"
"- Quotation"
-msgstr ""
+msgstr "# Configuración de CRM\n\n"
+"Las funciones del módulo CRM se pueden configurar según las necesidades de su negocio. Configuración de CRM es el lugar donde puede establecer sus preferencias para:\n"
+"- Campaña\n"
+"- Cliente potencial\n"
+"- Oportunidad\n"
+"- Cotización"
#. Description of the Onboarding Step 'Review Chart of Accounts'
#: accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json
@@ -210,7 +215,12 @@
" - Customer’s multiple address and contacts\n"
" - Account Receivables\n"
" - Credit Limit and Credit Period\n"
-msgstr ""
+msgstr "# Crear un cliente\n\n"
+"El Maestro de Clientes es el corazón de sus transacciones de venta. Los Clientes están vinculados en Cotizaciones, Pedidos de Venta, Facturas y Pagos. Los Clientes pueden estar numerados o identificados por su nombre (normalmente lo hará en función del número de clientes que tenga).\n\n"
+"A través del Maestro de Clientes, usted puede rastrear efectivamente elementos esenciales como:\n"
+" - Dirección y contactos múltiples del cliente\n"
+" - Cuentas por cobrar\n"
+" - Límite de crédito y Período de crédito\n"
#. Description of the Onboarding Step 'Setup Your Letterhead'
#: setup/onboarding_step/letterhead/letterhead.json
@@ -268,7 +278,8 @@
#: buying/onboarding_step/create_your_first_purchase_order/create_your_first_purchase_order.json
msgid "# Create first Purchase Order\n\n"
"Purchase Order is at the heart of your buying transactions. In ERPNext, Purchase Order can can be created against a Purchase Material Request (indent) and Supplier Quotation as well. Purchase Orders is also linked to Purchase Receipt and Purchase Invoices, allowing you to keep a birds-eye view on your purchase deals.\n\n"
-msgstr ""
+msgstr "# Crear la primera Orden de Compra\n\n"
+"La Orden de Compra es el corazon de sus transacciones de compra. En ERPNext, la Orden de Compra se puede crear contra una Solicitud de Material de Compra (sangría) y también una Cotización del Proveedor. Las Órdenes de Compra también están vinculadas al Recibo de Compra y a las Facturas de Compra, lo que le permite tener una vista panorámica de sus ofertas de compra.\n\n"
#. Description of the Onboarding Step 'Create Your First Purchase Invoice '
#: accounts/onboarding_step/create_your_first_purchase_invoice/create_your_first_purchase_invoice.json
@@ -454,37 +465,37 @@
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "% Delivered"
-msgstr ""
+msgstr "% Entregado"
#. Label of a Percent field in DocType 'Delivery Note'
#: stock/doctype/delivery_note/delivery_note.json
msgctxt "Delivery Note"
msgid "% Amount Billed"
-msgstr ""
+msgstr "% Importe Facturado"
#. Label of a Percent field in DocType 'Purchase Receipt'
#: stock/doctype/purchase_receipt/purchase_receipt.json
msgctxt "Purchase Receipt"
msgid "% Amount Billed"
-msgstr ""
+msgstr "% Importe Facturado"
#. Label of a Percent field in DocType 'Sales Order'
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "% Amount Billed"
-msgstr ""
+msgstr "% Importe Facturado"
#. Label of a Percent field in DocType 'Timesheet'
#: projects/doctype/timesheet/timesheet.json
msgctxt "Timesheet"
msgid "% Amount Billed"
-msgstr ""
+msgstr "% Importe Facturado"
#. Label of a Percent field in DocType 'Purchase Order'
#: buying/doctype/purchase_order/purchase_order.json
msgctxt "Purchase Order"
msgid "% Billed"
-msgstr ""
+msgstr "% Facturado"
#. Label of a Select field in DocType 'Project'
#: projects/doctype/project/project.json
@@ -496,7 +507,7 @@
#: projects/doctype/project/project.json
msgctxt "Project"
msgid "% Completed"
-msgstr ""
+msgstr "% Completado"
#: manufacturing/doctype/bom/bom.js:755
#, python-format
@@ -932,7 +943,7 @@
#: manufacturing/report/work_order_summary/work_order_summary.py:110
msgid "60-90 Days"
-msgstr ""
+msgstr "60-90 días"
#: accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:121
#: manufacturing/report/work_order_summary/work_order_summary.py:110
@@ -1063,7 +1074,7 @@
#: accounts/doctype/bank_statement_import/bank_statement_import.json
msgctxt "Bank Statement Import"
msgid "<h5 class=\"text-muted uppercase\">Or</h5>"
-msgstr ""
+msgstr "<h5 class=\"text-muted uppercase\">O</h5>"
#. Content of the 'account_no_settings' (HTML) field in DocType 'Cheque Print
#. Template'
@@ -1252,7 +1263,7 @@
#: accounts/doctype/cheque_print_template/cheque_print_template.json
msgctxt "Cheque Print Template"
msgid "A4"
-msgstr ""
+msgstr "A4"
#. Option for the 'Blood Group' (Select) field in DocType 'Employee'
#: setup/doctype/employee/employee.json
@@ -2071,7 +2082,7 @@
#: assets/doctype/asset/asset.py:677
msgid "Account not Found"
-msgstr ""
+msgstr "Cuenta no encontrada"
#: accounts/doctype/account/account.py:360
msgid "Account with child nodes cannot be converted to ledger"
@@ -2096,7 +2107,7 @@
#: accounts/doctype/tax_withholding_category/tax_withholding_category.py:54
msgid "Account {0} added multiple times"
-msgstr ""
+msgstr "Cuenta {0} agregada varias veces"
#: setup/doctype/company/company.py:187
msgid "Account {0} does not belong to company: {1}"
@@ -2168,7 +2179,7 @@
#: accounts/report/general_ledger/general_ledger.py:325
msgid "Account: {0} does not exist"
-msgstr ""
+msgstr "Cuenta {0} no existe"
#: accounts/doctype/payment_entry/payment_entry.py:2098
msgid "Account: {0} is not permitted under Payment Entry"
@@ -3123,12 +3134,12 @@
#: accounts/doctype/ledger_merge/ledger_merge.json
msgctxt "Ledger Merge"
msgid "Accounts to Merge"
-msgstr ""
+msgstr "Cuentas a fusionar"
#. Subtitle of the Module Onboarding 'Accounts'
#: accounts/module_onboarding/accounts/accounts.json
msgid "Accounts, Invoices, Taxation, and more."
-msgstr ""
+msgstr "Cuentas, Facturas, Impuestos y más."
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:33
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:46
@@ -3763,7 +3774,7 @@
#: accounts/doctype/repost_payment_ledger/repost_payment_ledger.json
msgctxt "Repost Payment Ledger"
msgid "Add Manually"
-msgstr ""
+msgstr "Añadir manualmente"
#: projects/doctype/task/task_tree.js:42
msgid "Add Multiple"
@@ -3777,7 +3788,7 @@
#: accounts/doctype/advance_taxes_and_charges/advance_taxes_and_charges.json
msgctxt "Advance Taxes and Charges"
msgid "Add Or Deduct"
-msgstr ""
+msgstr "Añadir o deducir"
#: selling/page/point_of_sale/pos_item_cart.js:269
msgid "Add Order Discount"
@@ -3802,31 +3813,31 @@
#: accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
msgctxt "Purchase Invoice Item"
msgid "Add Serial / Batch No"
-msgstr ""
+msgstr "Añadir Nro Serie/Lote"
#. Label of a Button field in DocType 'Purchase Receipt Item'
#: stock/doctype/purchase_receipt_item/purchase_receipt_item.json
msgctxt "Purchase Receipt Item"
msgid "Add Serial / Batch No"
-msgstr ""
+msgstr "Añadir Nro Serie/Lote"
#. Label of a Button field in DocType 'Stock Entry Detail'
#: stock/doctype/stock_entry_detail/stock_entry_detail.json
msgctxt "Stock Entry Detail"
msgid "Add Serial / Batch No"
-msgstr ""
+msgstr "Añadir Nro Serie/Lote"
#. Label of a Button field in DocType 'Stock Reconciliation Item'
#: stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json
msgctxt "Stock Reconciliation Item"
msgid "Add Serial / Batch No"
-msgstr ""
+msgstr "Añadir Nro Serie/Lote"
#. Label of a Button field in DocType 'Purchase Receipt Item'
#: stock/doctype/purchase_receipt_item/purchase_receipt_item.json
msgctxt "Purchase Receipt Item"
msgid "Add Serial / Batch No (Rejected Qty)"
-msgstr ""
+msgstr "Añadir Nro Serie/Lote (Cant Rechazada)"
#: public/js/utils.js:61
msgid "Add Serial No"
@@ -3860,7 +3871,7 @@
#: public/js/utils/crm_activities.js:140
msgid "Add a Note"
-msgstr ""
+msgstr "Añadir Nota"
#. Title of an Onboarding Step
#: assets/onboarding_step/existing_asset/existing_asset.json
@@ -3874,7 +3885,7 @@
#: www/book_appointment/index.html:42
msgid "Add details"
-msgstr ""
+msgstr "Añadir detalles"
#: stock/doctype/pick_list/pick_list.js:71
#: stock/doctype/pick_list/pick_list.py:614
@@ -3921,13 +3932,13 @@
#: crm/doctype/crm_note/crm_note.json
msgctxt "CRM Note"
msgid "Added By"
-msgstr ""
+msgstr "Añadido por"
#. Label of a Datetime field in DocType 'CRM Note'
#: crm/doctype/crm_note/crm_note.json
msgctxt "CRM Note"
msgid "Added On"
-msgstr ""
+msgstr "Añadido el"
#: buying/doctype/supplier/supplier.py:130
msgid "Added Supplier Role to User {0}."
@@ -4228,49 +4239,49 @@
#: stock/doctype/delivery_note/delivery_note.json
msgctxt "Delivery Note"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Purchase Invoice'
#: accounts/doctype/purchase_invoice/purchase_invoice.json
msgctxt "Purchase Invoice"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Purchase Order'
#: buying/doctype/purchase_order/purchase_order.json
msgctxt "Purchase Order"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Purchase Receipt'
#: stock/doctype/purchase_receipt/purchase_receipt.json
msgctxt "Purchase Receipt"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Quotation'
#: selling/doctype/quotation/quotation.json
msgctxt "Quotation"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Sales Invoice'
#: accounts/doctype/sales_invoice/sales_invoice.json
msgctxt "Sales Invoice"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Sales Order'
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Supplier Quotation'
#: buying/doctype/supplier_quotation/supplier_quotation.json
msgctxt "Supplier Quotation"
msgid "Additional Info"
-msgstr ""
+msgstr "Información Adicional"
#. Label of a Section Break field in DocType 'Lead'
#: crm/doctype/lead/lead.json
@@ -4522,7 +4533,7 @@
#: accounts/workspace/financial_reports/financial_reports.json
#: selling/report/address_and_contacts/address_and_contacts.json
msgid "Address And Contacts"
-msgstr ""
+msgstr "Dirección y Contactos"
#. Label of a HTML field in DocType 'Sales Partner'
#: setup/doctype/sales_partner/sales_partner.json
@@ -5087,7 +5098,7 @@
#: stock/report/stock_ageing/stock_ageing.py:205
msgid "Age ({0})"
-msgstr ""
+msgstr "Edad ({0})"
#: accounts/report/accounts_payable/accounts_payable.js:58
#: accounts/report/accounts_payable_summary/accounts_payable_summary.js:21
@@ -5142,13 +5153,13 @@
#: quality_management/doctype/quality_meeting/quality_meeting.json
msgctxt "Quality Meeting"
msgid "Agenda"
-msgstr ""
+msgstr "Agenda"
#. Label of a Text Editor field in DocType 'Quality Meeting Agenda'
#: quality_management/doctype/quality_meeting_agenda/quality_meeting_agenda.json
msgctxt "Quality Meeting Agenda"
msgid "Agenda"
-msgstr ""
+msgstr "Agenda"
#. Label of a Data field in DocType 'Incoming Call Settings'
#: telephony/doctype/incoming_call_settings/incoming_call_settings.json
@@ -5206,7 +5217,7 @@
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
msgctxt "Bisect Accounting Statements"
msgid "Algorithm"
-msgstr ""
+msgstr "Algoritmo"
#. Name of a role
#: accounts/doctype/pos_invoice/pos_invoice.json
@@ -5234,19 +5245,19 @@
#: crm/doctype/lead/lead.json
msgctxt "Lead"
msgid "All Activities"
-msgstr ""
+msgstr "Todas las Actividades"
#. Label of a Section Break field in DocType 'Opportunity'
#: crm/doctype/opportunity/opportunity.json
msgctxt "Opportunity"
msgid "All Activities"
-msgstr ""
+msgstr "Todas las Actividades"
#. Label of a Section Break field in DocType 'Prospect'
#: crm/doctype/prospect/prospect.json
msgctxt "Prospect"
msgid "All Activities"
-msgstr ""
+msgstr "Todas las Actividades"
#. Label of a HTML field in DocType 'Lead'
#: crm/doctype/lead/lead.json
@@ -5737,7 +5748,7 @@
#: stock/doctype/item/item.json
msgctxt "Item"
msgid "Allow Purchase"
-msgstr ""
+msgstr "Permitir Compra"
#. Label of a Check field in DocType 'Supplier'
#: buying/doctype/supplier/supplier.json
@@ -5771,7 +5782,7 @@
#: stock/doctype/item/item.json
msgctxt "Item"
msgid "Allow Sales"
-msgstr ""
+msgstr "Permitir Ventas"
#. Label of a Check field in DocType 'Customer'
#: selling/doctype/customer/customer.json
@@ -5916,13 +5927,13 @@
#: selling/doctype/customer/customer.json
msgctxt "Customer"
msgid "Allowed Items"
-msgstr ""
+msgstr "Productos Permitidos"
#. Group in Supplier's connections
#: buying/doctype/supplier/supplier.json
msgctxt "Supplier"
msgid "Allowed Items"
-msgstr ""
+msgstr "Productos Permitidos"
#. Name of a DocType
#: accounts/doctype/allowed_to_transact_with/allowed_to_transact_with.json
@@ -7753,31 +7764,31 @@
#: assets/report/asset_activity/asset_activity.json
#: assets/workspace/assets/assets.json
msgid "Asset Activity"
-msgstr ""
+msgstr "Actividad de Activos"
#. Linked DocType in Asset's connections
#: assets/doctype/asset/asset.json
msgctxt "Asset"
msgid "Asset Activity"
-msgstr ""
+msgstr "Actividad de Activos"
#. Name of a DocType
#: assets/doctype/asset_capitalization/asset_capitalization.json
msgid "Asset Capitalization"
-msgstr ""
+msgstr "Capitalización de Activos"
#. Group in Asset's connections
#. Linked DocType in Asset's connections
#: assets/doctype/asset/asset.json
msgctxt "Asset"
msgid "Asset Capitalization"
-msgstr ""
+msgstr "Capitalización de Activos"
#. Label of a Link in the Assets Workspace
#: assets/workspace/assets/assets.json
msgctxt "Asset Capitalization"
msgid "Asset Capitalization"
-msgstr ""
+msgstr "Capitalización de Activos"
#. Name of a DocType
#: assets/doctype/asset_capitalization_asset_item/asset_capitalization_asset_item.json
@@ -8146,7 +8157,7 @@
#: accounts/doctype/accounts_settings/accounts_settings.json
msgctxt "Accounts Settings"
msgid "Asset Settings"
-msgstr ""
+msgstr "Configuración de Activos"
#. Name of a DocType
#: assets/doctype/asset_shift_allocation/asset_shift_allocation.json
@@ -8564,7 +8575,7 @@
#: accounts/doctype/purchase_invoice/purchase_invoice.json
#: regional/doctype/south_africa_vat_settings/south_africa_vat_settings.json
msgid "Auditor"
-msgstr ""
+msgstr "Auditor"
#: erpnext_integrations/doctype/plaid_settings/plaid_connector.py:68
#: erpnext_integrations/doctype/plaid_settings/plaid_connector.py:85
@@ -8954,7 +8965,7 @@
#: buying/doctype/purchase_order_item/purchase_order_item.json
msgctxt "Purchase Order Item"
msgid "Available Qty at Company"
-msgstr ""
+msgstr "Cant. disponible en Compañía"
#. Label of a Float field in DocType 'Delivery Note Item'
#: stock/doctype/delivery_note_item/delivery_note_item.json
@@ -9136,73 +9147,73 @@
#: stock/doctype/stock_entry/stock_entry.js:545
#: stock/report/bom_search/bom_search.py:38
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Label of a shortcut in the Manufacturing Workspace
#: manufacturing/workspace/manufacturing/manufacturing.json
msgctxt "BOM"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Linked DocType in BOM Creator's connections
#: manufacturing/doctype/bom_creator/bom_creator.json
msgctxt "BOM Creator"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Option for the 'Backflush Raw Materials of Subcontract Based On' (Select)
#. field in DocType 'Buying Settings'
#: buying/doctype/buying_settings/buying_settings.json
msgctxt "Buying Settings"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Option for the 'Backflush Raw Materials Based On' (Select) field in DocType
#. 'Manufacturing Settings'
#: manufacturing/doctype/manufacturing_settings/manufacturing_settings.json
msgctxt "Manufacturing Settings"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Label of a Link field in DocType 'Purchase Invoice Item'
#: accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
msgctxt "Purchase Invoice Item"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Label of a Link field in DocType 'Purchase Order Item'
#: buying/doctype/purchase_order_item/purchase_order_item.json
msgctxt "Purchase Order Item"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Label of a Link field in DocType 'Purchase Receipt Item'
#: stock/doctype/purchase_receipt_item/purchase_receipt_item.json
msgctxt "Purchase Receipt Item"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Label of a Link field in DocType 'Subcontracting Order Item'
#: subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json
msgctxt "Subcontracting Order Item"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Label of a Link field in DocType 'Subcontracting Receipt Item'
#: subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json
msgctxt "Subcontracting Receipt Item"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#. Label of a Link field in DocType 'Work Order Operation'
#: manufacturing/doctype/work_order_operation/work_order_operation.json
msgctxt "Work Order Operation"
msgid "BOM"
-msgstr ""
+msgstr "LdM"
#: manufacturing/page/bom_comparison_tool/bom_comparison_tool.js:21
msgid "BOM 1"
-msgstr ""
+msgstr "LdM 1"
#: manufacturing/doctype/bom/bom.py:1348
msgid "BOM 1 {0} and BOM 2 {1} should not be same"
@@ -9210,7 +9221,7 @@
#: manufacturing/page/bom_comparison_tool/bom_comparison_tool.js:38
msgid "BOM 2"
-msgstr ""
+msgstr "LdM 2"
#. Label of a Link in the Manufacturing Workspace
#: manufacturing/page/bom_comparison_tool/bom_comparison_tool.js:4
@@ -9222,24 +9233,24 @@
#: manufacturing/doctype/bom_creator_item/bom_creator_item.json
msgctxt "BOM Creator Item"
msgid "BOM Created"
-msgstr ""
+msgstr "LdM Creado"
#. Name of a DocType
#: manufacturing/doctype/bom_creator/bom_creator.json
msgid "BOM Creator"
-msgstr ""
+msgstr "Creador LdM"
#. Label of a Link field in DocType 'BOM'
#: manufacturing/doctype/bom/bom.json
msgctxt "BOM"
msgid "BOM Creator"
-msgstr ""
+msgstr "Creador LdM"
#. Label of a shortcut in the Manufacturing Workspace
#: manufacturing/workspace/manufacturing/manufacturing.json
msgctxt "BOM Creator"
msgid "BOM Creator"
-msgstr ""
+msgstr "Creador LdM"
#. Name of a DocType
#: manufacturing/doctype/bom_creator_item/bom_creator_item.json
@@ -9427,11 +9438,11 @@
#: manufacturing/doctype/bom_creator/bom_creator.json
msgctxt "BOM Creator"
msgid "BOM Tree"
-msgstr ""
+msgstr "Árbol LdM"
#: manufacturing/report/bom_stock_report/bom_stock_report.py:28
msgid "BOM UoM"
-msgstr ""
+msgstr "LdM UdM"
#. Name of a DocType
#: manufacturing/doctype/bom_update_batch/bom_update_batch.json
@@ -10531,7 +10542,7 @@
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2118
msgid "Batch No {0} does not exists"
-msgstr ""
+msgstr "Lote núm. {0} no existe"
#: stock/utils.py:643
msgid "Batch No {0} is linked with Item {1} which has serial no. Please scan serial no instead."
@@ -11724,7 +11735,7 @@
#: setup/doctype/company/company.json
msgctxt "Company"
msgid "Buying and Selling"
-msgstr ""
+msgstr "Compra y Venta"
#: accounts/doctype/pricing_rule/pricing_rule.py:211
msgid "Buying must be checked, if Applicable For is selected as {0}"
@@ -11776,7 +11787,7 @@
#. Label of a Card Break in the Home Workspace
#: crm/workspace/crm/crm.json setup/workspace/home/home.json
msgid "CRM"
-msgstr ""
+msgstr "CRM"
#. Name of a DocType
#: crm/doctype/crm_note/crm_note.json
@@ -11788,14 +11799,14 @@
#: crm/doctype/crm_settings/crm_settings.json
#: crm/onboarding_step/crm_settings/crm_settings.json
msgid "CRM Settings"
-msgstr ""
+msgstr "Configuración CRM"
#. Label of a Link in the CRM Workspace
#. Label of a Link in the Settings Workspace
#: crm/workspace/crm/crm.json setup/workspace/settings/settings.json
msgctxt "CRM Settings"
msgid "CRM Settings"
-msgstr ""
+msgstr "Configuración CRM"
#. Option for the 'Series' (Select) field in DocType 'Lead'
#: crm/doctype/lead/lead.json
@@ -11869,7 +11880,7 @@
#: telephony/doctype/call_log/call_log.js:8
msgid "Call Again"
-msgstr ""
+msgstr "Volver a llamar"
#: public/js/call_popup/call_popup.js:41
msgid "Call Connected"
@@ -11889,7 +11900,7 @@
#: public/js/call_popup/call_popup.js:48
msgid "Call Ended"
-msgstr ""
+msgstr "Llamada finalizada"
#. Label of a Table field in DocType 'Incoming Call Settings'
#: telephony/doctype/incoming_call_settings/incoming_call_settings.json
@@ -11948,7 +11959,7 @@
#: telephony/doctype/call_log/call_log.js:8
msgid "Callback"
-msgstr ""
+msgstr "Devolver Llamada"
#. Name of a DocType
#. Label of a Card Break in the CRM Workspace
@@ -12527,7 +12538,7 @@
#: projects/doctype/task/task.py:134
msgid "Cannot complete task {0} as its dependant task {1} are not completed / cancelled."
-msgstr ""
+msgstr "No se puede completar la tarea {0} porque su tarea dependiente {1} no está completada / cancelada."
#: accounts/doctype/cost_center/cost_center.py:63
msgid "Cannot convert Cost Center to ledger as it has child nodes"
@@ -13227,13 +13238,13 @@
#: setup/setup_wizard/operations/install_fixtures.py:205
msgid "Cheque"
-msgstr ""
+msgstr "Cheque"
#. Option for the 'Salary Mode' (Select) field in DocType 'Employee'
#: setup/doctype/employee/employee.json
msgctxt "Employee"
msgid "Cheque"
-msgstr ""
+msgstr "Cheque"
#. Label of a Date field in DocType 'Bank Clearance Detail'
#: accounts/doctype/bank_clearance_detail/bank_clearance_detail.json
@@ -13751,31 +13762,31 @@
#: setup/doctype/holiday_list/holiday_list.json
msgctxt "Holiday List"
msgid "Color"
-msgstr ""
+msgstr "Color"
#. Label of a Select field in DocType 'Supplier Scorecard Scoring Standing'
#: buying/doctype/supplier_scorecard_scoring_standing/supplier_scorecard_scoring_standing.json
msgctxt "Supplier Scorecard Scoring Standing"
msgid "Color"
-msgstr ""
+msgstr "Color"
#. Label of a Select field in DocType 'Supplier Scorecard Standing'
#: buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.json
msgctxt "Supplier Scorecard Standing"
msgid "Color"
-msgstr ""
+msgstr "Color"
#. Label of a Color field in DocType 'Task'
#: projects/doctype/task/task.json
msgctxt "Task"
msgid "Color"
-msgstr ""
+msgstr "Color"
#. Label of a Data field in DocType 'Vehicle'
#: setup/doctype/vehicle/vehicle.json
msgctxt "Vehicle"
msgid "Color"
-msgstr ""
+msgstr "Color"
#: setup/setup_wizard/operations/install_fixtures.py:231
msgid "Colour"
@@ -14990,7 +15001,7 @@
#: setup/doctype/employee/employee.json
msgctxt "Employee"
msgid "Company Details"
-msgstr ""
+msgstr "Detalles de la Compañía"
#. Option for the 'Preferred Contact Email' (Select) field in DocType
#. 'Employee'
@@ -15140,46 +15151,46 @@
#: crm/doctype/competitor/competitor.json
#: selling/report/lost_quotations/lost_quotations.py:24
msgid "Competitor"
-msgstr ""
+msgstr "Competidor"
#. Label of a Link field in DocType 'Competitor Detail'
#: crm/doctype/competitor_detail/competitor_detail.json
msgctxt "Competitor Detail"
msgid "Competitor"
-msgstr ""
+msgstr "Competidor"
#. Name of a DocType
#: crm/doctype/competitor_detail/competitor_detail.json
msgid "Competitor Detail"
-msgstr ""
+msgstr "Detalle del Competidor"
#. Linked DocType in Competitor's connections
#: crm/doctype/competitor/competitor.json
msgctxt "Competitor"
msgid "Competitor Detail"
-msgstr ""
+msgstr "Detalle del Competidor"
#. Label of a Data field in DocType 'Competitor'
#: crm/doctype/competitor/competitor.json
msgctxt "Competitor"
msgid "Competitor Name"
-msgstr ""
+msgstr "Nombre del Competidor"
#: public/js/utils/sales_common.js:417
msgid "Competitors"
-msgstr ""
+msgstr "Competidores"
#. Label of a Table MultiSelect field in DocType 'Opportunity'
#: crm/doctype/opportunity/opportunity.json
msgctxt "Opportunity"
msgid "Competitors"
-msgstr ""
+msgstr "Competidores"
#. Label of a Table MultiSelect field in DocType 'Quotation'
#: selling/doctype/quotation/quotation.json
msgctxt "Quotation"
msgid "Competitors"
-msgstr ""
+msgstr "Competidores"
#: erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js:61
msgid "Complete"
@@ -15438,7 +15449,7 @@
#: projects/doctype/task/task.json
msgctxt "Task"
msgid "Completed On"
-msgstr ""
+msgstr "Completado el"
#: projects/doctype/task/task.py:168
msgid "Completed On cannot be greater than Today"
@@ -15482,7 +15493,7 @@
#: projects/report/project_summary/project_summary.py:130
msgid "Completed Tasks"
-msgstr ""
+msgstr "Tareas Completadas"
#. Label of a Data field in DocType 'Job Card Operation'
#: manufacturing/doctype/job_card_operation/job_card_operation.json
@@ -15562,13 +15573,13 @@
#: stock/doctype/inventory_dimension/inventory_dimension.json
msgctxt "Inventory Dimension"
msgid "Conditional Rule"
-msgstr ""
+msgstr "Regla condicional"
#. Label of a Section Break field in DocType 'Inventory Dimension'
#: stock/doctype/inventory_dimension/inventory_dimension.json
msgctxt "Inventory Dimension"
msgid "Conditional Rule Examples"
-msgstr ""
+msgstr "Ejemplos de reglas condicionales"
#. Description of the 'Mixed Conditions' (Check) field in DocType 'Pricing
#. Rule'
@@ -15581,13 +15592,13 @@
#: accounts/doctype/pos_profile/pos_profile.json
msgctxt "POS Profile"
msgid "Configuration"
-msgstr ""
+msgstr "Configuración"
#. Label of a Tab Break field in DocType 'Work Order'
#: manufacturing/doctype/work_order/work_order.json
msgctxt "Work Order"
msgid "Configuration"
-msgstr ""
+msgstr "Configuración"
#. Title of an Onboarding Step
#: accounts/onboarding_step/configure_account_settings/configure_account_settings.json
@@ -16081,19 +16092,19 @@
#: selling/doctype/customer/customer.json
msgctxt "Customer"
msgid "Contact & Address"
-msgstr ""
+msgstr "Contacto y Dirección"
#. Label of a Tab Break field in DocType 'Sales Invoice'
#: accounts/doctype/sales_invoice/sales_invoice.json
msgctxt "Sales Invoice"
msgid "Contact & Address"
-msgstr ""
+msgstr "Contacto y Dirección"
#. Label of a Tab Break field in DocType 'Supplier'
#: buying/doctype/supplier/supplier.json
msgctxt "Supplier"
msgid "Contact & Address"
-msgstr ""
+msgstr "Contacto y Dirección"
#. Label of a HTML field in DocType 'Sales Partner'
#: setup/doctype/sales_partner/sales_partner.json
@@ -16453,7 +16464,7 @@
#: crm/doctype/opportunity/opportunity.json
msgctxt "Opportunity"
msgid "Contacts"
-msgstr ""
+msgstr "Contactos"
#. Label of a Data field in DocType 'Issue'
#: support/doctype/issue/issue.json
@@ -16551,13 +16562,13 @@
#: selling/report/sales_person_commission_summary/sales_person_commission_summary.py:76
#: selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py:121
msgid "Contribution %"
-msgstr ""
+msgstr "Contribución %"
#. Label of a Float field in DocType 'Sales Team'
#: selling/doctype/sales_team/sales_team.json
msgctxt "Sales Team"
msgid "Contribution (%)"
-msgstr ""
+msgstr "Contribución (%)"
#: selling/report/sales_person_commission_summary/sales_person_commission_summary.py:88
#: selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py:123
@@ -16774,7 +16785,7 @@
#. Label of a Card Break in the Settings Workspace
#: setup/workspace/settings/settings.json
msgid "Core"
-msgstr ""
+msgstr "Núcleo"
#. Option for the 'Corrective/Preventive' (Select) field in DocType 'Quality
#. Action'
@@ -17964,20 +17975,20 @@
#. Title of an Onboarding Step
#: accounts/onboarding_step/create_your_first_purchase_invoice/create_your_first_purchase_invoice.json
msgid "Create Your First Purchase Invoice "
-msgstr ""
+msgstr "Crea tu primera Factura de Compra "
#. Title of an Onboarding Step
#: accounts/onboarding_step/create_your_first_sales_invoice/create_your_first_sales_invoice.json
#: setup/onboarding_step/create_your_first_sales_invoice/create_your_first_sales_invoice.json
msgid "Create Your First Sales Invoice "
-msgstr ""
+msgstr "Crea tu primera Factura de Ventas "
#. Title of an Onboarding Step
#: accounts/onboarding_step/create_a_customer/create_a_customer.json
#: selling/onboarding_step/create_a_customer/create_a_customer.json
#: setup/onboarding_step/create_a_customer/create_a_customer.json
msgid "Create a Customer"
-msgstr ""
+msgstr "Crear Cliente"
#. Title of an Onboarding Step
#: selling/onboarding_step/create_product/create_product.json
@@ -17999,12 +18010,12 @@
#: selling/onboarding_step/create_a_product/create_a_product.json
#: stock/onboarding_step/create_a_product/create_a_product.json
msgid "Create a Product"
-msgstr ""
+msgstr "Crear un Producto"
#. Title of an Onboarding Step
#: selling/onboarding_step/create_a_quotation/create_a_quotation.json
msgid "Create a Quotation"
-msgstr ""
+msgstr "Crear un Presupuesto"
#. Title of an Onboarding Step
#: accounts/onboarding_step/create_a_product/create_a_product.json
@@ -18022,17 +18033,17 @@
#: setup/onboarding_step/create_a_supplier/create_a_supplier.json
#: stock/onboarding_step/create_a_supplier/create_a_supplier.json
msgid "Create a Supplier"
-msgstr ""
+msgstr "Crear un Proveedor"
#. Title of an Onboarding Step
#: manufacturing/onboarding_step/warehouse/warehouse.json
msgid "Create a Warehouse"
-msgstr ""
+msgstr "Crear un Almacén"
#. Label of an action in the Onboarding Step 'Create an Item'
#: setup/onboarding_step/create_an_item/create_an_item.json
msgid "Create a new Item"
-msgstr ""
+msgstr "Crear un nuevo Producto"
#. Option for the 'Capitalization Method' (Select) field in DocType 'Asset
#. Capitalization'
@@ -18062,7 +18073,7 @@
#: setup/onboarding_step/create_an_item/create_an_item.json
#: stock/onboarding_step/create_an_item/create_an_item.json
msgid "Create an Item"
-msgstr ""
+msgstr "Crear Producto"
#: stock/stock_ledger.py:1684
msgid "Create an incoming stock transaction for the Item."
@@ -18071,7 +18082,7 @@
#. Title of an Onboarding Step
#: crm/onboarding_step/create_and_send_quotation/create_and_send_quotation.json
msgid "Create and Send Quotation"
-msgstr ""
+msgstr "Crear y Enviar Cotización"
#: utilities/activation.py:87
msgid "Create customer quotes"
@@ -18080,7 +18091,7 @@
#. Title of an Onboarding Step
#: buying/onboarding_step/create_your_first_purchase_order/create_your_first_purchase_order.json
msgid "Create first Purchase Order"
-msgstr ""
+msgstr "Crear primera Orden de Compra"
#. Description of the 'Create Missing Party' (Check) field in DocType 'Opening
#. Invoice Creation Tool'
@@ -18097,7 +18108,7 @@
#. Title of an Onboarding Step
#: setup/onboarding_step/create_a_quotation/create_a_quotation.json
msgid "Create your first Quotation"
-msgstr ""
+msgstr "Crea tu primera Cotización"
#. Title of an Onboarding Step
#: selling/onboarding_step/create_your_first_sales_order/create_your_first_sales_order.json
@@ -18180,7 +18191,7 @@
#: stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:131
#: stock/report/stock_ledger_variance/stock_ledger_variance.py:44
msgid "Creation"
-msgstr ""
+msgstr "Creación"
#. Label of a Data field in DocType 'Serial No'
#: stock/doctype/serial_no/serial_no.json
@@ -20594,7 +20605,7 @@
#: accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:25
msgid "Date: "
-msgstr ""
+msgstr "Fecha: "
#. Option for the 'Billing Interval' (Select) field in DocType 'Subscription
#. Plan'
@@ -22159,7 +22170,7 @@
#: setup/doctype/global_defaults/global_defaults.json
msgctxt "Global Defaults"
msgid "Demo Company"
-msgstr ""
+msgstr "Empresa de Demostración"
#: public/js/utils/demo.js:28
msgid "Demo data cleared"
@@ -23065,7 +23076,7 @@
#: setup/doctype/print_heading/print_heading.json stock/doctype/item/item.json
#: support/doctype/service_level_agreement/service_level_agreement.json
msgid "Desk User"
-msgstr ""
+msgstr "Usuario de Escritorio"
#: public/js/utils/sales_common.js:423
msgid "Detailed Reason"
@@ -23691,7 +23702,7 @@
#: selling/page/point_of_sale/pos_item_details.js:173
msgid "Discount (%)"
-msgstr ""
+msgstr "Descuento (%)"
#. Label of a Float field in DocType 'Delivery Note Item'
#: stock/doctype/delivery_note_item/delivery_note_item.json
@@ -24430,7 +24441,7 @@
#: public/js/utils/serial_no_batch_selector.js:237
msgid "Download CSV Template"
-msgstr ""
+msgstr "Descargar la plantilla CSV"
#. Label of a Button field in DocType 'Production Plan'
#: manufacturing/doctype/production_plan/production_plan.json
@@ -25085,19 +25096,19 @@
#: stock/doctype/item_barcode/item_barcode.json
msgctxt "Item Barcode"
msgid "EAN"
-msgstr ""
+msgstr "EAN"
#. Option for the 'Barcode Type' (Select) field in DocType 'Item Barcode'
#: stock/doctype/item_barcode/item_barcode.json
msgctxt "Item Barcode"
msgid "EAN-12"
-msgstr ""
+msgstr "EAN-12"
#. Option for the 'Barcode Type' (Select) field in DocType 'Item Barcode'
#: stock/doctype/item_barcode/item_barcode.json
msgctxt "Item Barcode"
msgid "EAN-8"
-msgstr ""
+msgstr "EAN-8"
#. Label of a Data field in DocType 'Tally Migration'
#: erpnext_integrations/doctype/tally_migration/tally_migration.json
@@ -25153,7 +25164,7 @@
#: public/js/utils/crm_activities.js:182
msgid "Edit Note"
-msgstr ""
+msgstr "Editar Nota"
#: stock/doctype/delivery_note/delivery_note.js:370
msgid "Edit Posting Date and Time"
@@ -27372,7 +27383,7 @@
#: bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js:9
msgid "Failed Entries"
-msgstr ""
+msgstr "Entradas fallidas"
#. Label of a HTML field in DocType 'Tally Migration'
#: erpnext_integrations/doctype/tally_migration/tally_migration.json
@@ -27423,7 +27434,7 @@
#: accounts/doctype/pos_closing_entry/pos_closing_entry.json
msgctxt "POS Closing Entry"
msgid "Failure Description"
-msgstr ""
+msgstr "Descripción del fallo"
#. Label of a Small Text field in DocType 'Employee'
#: setup/doctype/employee/employee.json
@@ -27839,7 +27850,7 @@
#. Name of a Workspace
#: accounts/workspace/financial_reports/financial_reports.json
msgid "Financial Reports"
-msgstr ""
+msgstr "Informes Financieros"
#. Title of an Onboarding Step
#. Label of a Card Break in the Financial Reports Workspace
@@ -28362,7 +28373,7 @@
#: public/js/utils/serial_no_batch_selector.js:116
msgid "For Work Order"
-msgstr ""
+msgstr "Para Orden de Trabajo"
#: controllers/status_updater.py:238
msgid "For an item {0}, quantity must be negative number"
@@ -29355,14 +29366,14 @@
#: buying/doctype/purchase_order/purchase_order.json
msgctxt "Purchase Order"
msgid "Fully Paid"
-msgstr ""
+msgstr "Totalmente pagado"
#. Option for the 'Advance Payment Status' (Select) field in DocType 'Sales
#. Order'
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "Fully Paid"
-msgstr ""
+msgstr "Totalmente pagado"
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:28
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:41
@@ -29503,7 +29514,7 @@
#: accounts/doctype/mode_of_payment/mode_of_payment.json
msgctxt "Mode of Payment"
msgid "General"
-msgstr ""
+msgstr "General"
#. Description of a report in the Onboarding Step 'Financial Statements'
#. Name of a report
@@ -29584,7 +29595,7 @@
#: accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js:30
msgid "Generating Preview"
-msgstr ""
+msgstr "Generando vista previa"
#. Label of a Button field in DocType 'Purchase Invoice'
#: accounts/doctype/purchase_invoice/purchase_invoice.json
@@ -31005,25 +31016,25 @@
#: accounts/doctype/bank_account/bank_account.json
msgctxt "Bank Account"
msgid "IBAN"
-msgstr ""
+msgstr "IBAN"
#. Label of a Data field in DocType 'Bank Guarantee'
#: accounts/doctype/bank_guarantee/bank_guarantee.json
msgctxt "Bank Guarantee"
msgid "IBAN"
-msgstr ""
+msgstr "IBAN"
#. Label of a Data field in DocType 'Employee'
#: setup/doctype/employee/employee.json
msgctxt "Employee"
msgid "IBAN"
-msgstr ""
+msgstr "IBAN"
#. Label of a Read Only field in DocType 'Payment Request'
#: accounts/doctype/payment_request/payment_request.json
msgctxt "Payment Request"
msgid "IBAN"
-msgstr ""
+msgstr "IBAN"
#: accounts/doctype/bank_account/bank_account.py:84
#: accounts/doctype/bank_account/bank_account.py:87
@@ -31050,25 +31061,25 @@
#. Name of a report
#: regional/report/irs_1099/irs_1099.json
msgid "IRS 1099"
-msgstr ""
+msgstr "IRS 1099"
#. Option for the 'Barcode Type' (Select) field in DocType 'Item Barcode'
#: stock/doctype/item_barcode/item_barcode.json
msgctxt "Item Barcode"
msgid "ISBN"
-msgstr ""
+msgstr "ISBN"
#. Option for the 'Barcode Type' (Select) field in DocType 'Item Barcode'
#: stock/doctype/item_barcode/item_barcode.json
msgctxt "Item Barcode"
msgid "ISBN-10"
-msgstr ""
+msgstr "ISBN-10"
#. Option for the 'Barcode Type' (Select) field in DocType 'Item Barcode'
#: stock/doctype/item_barcode/item_barcode.json
msgctxt "Item Barcode"
msgid "ISBN-13"
-msgstr ""
+msgstr "ISBN-13"
#. Option for the 'Series' (Select) field in DocType 'Issue'
#: support/doctype/issue/issue.json
@@ -31080,7 +31091,7 @@
#: stock/doctype/item_barcode/item_barcode.json
msgctxt "Item Barcode"
msgid "ISSN"
-msgstr ""
+msgstr "ISSN"
#: manufacturing/report/job_card_summary/job_card_summary.py:128
#: manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:69
@@ -32770,67 +32781,67 @@
#. Name of a DocType
#: setup/doctype/incoterm/incoterm.json
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Delivery Note'
#: stock/doctype/delivery_note/delivery_note.json
msgctxt "Delivery Note"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Purchase Invoice'
#: accounts/doctype/purchase_invoice/purchase_invoice.json
msgctxt "Purchase Invoice"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Purchase Order'
#: buying/doctype/purchase_order/purchase_order.json
msgctxt "Purchase Order"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Purchase Receipt'
#: stock/doctype/purchase_receipt/purchase_receipt.json
msgctxt "Purchase Receipt"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Quotation'
#: selling/doctype/quotation/quotation.json
msgctxt "Quotation"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Request for Quotation'
#: buying/doctype/request_for_quotation/request_for_quotation.json
msgctxt "Request for Quotation"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Sales Invoice'
#: accounts/doctype/sales_invoice/sales_invoice.json
msgctxt "Sales Invoice"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Sales Order'
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Shipment'
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Link field in DocType 'Supplier Quotation'
#: buying/doctype/supplier_quotation/supplier_quotation.json
msgctxt "Supplier Quotation"
msgid "Incoterm"
-msgstr ""
+msgstr "Incoterm"
#. Label of a Int field in DocType 'Asset Repair'
#: assets/doctype/asset_repair/asset_repair.json
@@ -33104,7 +33115,7 @@
#: setup/setup_wizard/setup_wizard.py:24
msgid "Installing presets"
-msgstr ""
+msgstr "Instalación de preajustes"
#. Label of a Small Text field in DocType 'BOM Creator Item'
#: manufacturing/doctype/bom_creator_item/bom_creator_item.json
@@ -33543,7 +33554,7 @@
#: assets/doctype/asset/asset.py:411 assets/doctype/asset/asset.py:417
#: assets/doctype/asset/asset.py:444
msgid "Invalid Schedule"
-msgstr ""
+msgstr "Programación no válida"
#: controllers/selling_controller.py:225
msgid "Invalid Selling Price"
@@ -33560,7 +33571,7 @@
#: stock/doctype/putaway_rule/putaway_rule.py:69
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:126
msgid "Invalid Warehouse"
-msgstr ""
+msgstr "Almacén inválido"
#: accounts/doctype/pricing_rule/pricing_rule.py:304
msgid "Invalid condition expression"
@@ -33621,7 +33632,7 @@
#: stock/doctype/item/item.json
msgctxt "Item"
msgid "Inventory Settings"
-msgstr ""
+msgstr "Configuración de Inventario"
#. Subtitle of the Module Onboarding 'Stock'
#: stock/module_onboarding/stock/stock.json
@@ -33866,7 +33877,7 @@
#: accounts/workspace/payables/payables.json
#: accounts/workspace/receivables/receivables.json
msgid "Invoicing"
-msgstr ""
+msgstr "Facturación"
#. Label of a Section Break field in DocType 'Accounts Settings'
#: accounts/doctype/accounts_settings/accounts_settings.json
@@ -36002,349 +36013,349 @@
#: stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py:59
#: stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.py:93
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Read Only field in DocType 'Asset'
#: assets/doctype/asset/asset.json
msgctxt "Asset"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Asset Capitalization Asset Item'
#: assets/doctype/asset_capitalization_asset_item/asset_capitalization_asset_item.json
msgctxt "Asset Capitalization Asset Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Asset Capitalization Service Item'
#: assets/doctype/asset_capitalization_service_item/asset_capitalization_service_item.json
msgctxt "Asset Capitalization Service Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Asset Capitalization Stock Item'
#: assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json
msgctxt "Asset Capitalization Stock Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Read Only field in DocType 'Asset Maintenance'
#: assets/doctype/asset_maintenance/asset_maintenance.json
msgctxt "Asset Maintenance"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Read Only field in DocType 'Asset Maintenance Log'
#: assets/doctype/asset_maintenance_log/asset_maintenance_log.json
msgctxt "Asset Maintenance Log"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'BOM'
#: manufacturing/doctype/bom/bom.json
msgctxt "BOM"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'BOM Creator'
#: manufacturing/doctype/bom_creator/bom_creator.json
msgctxt "BOM Creator"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'BOM Creator Item'
#: manufacturing/doctype/bom_creator_item/bom_creator_item.json
msgctxt "BOM Creator Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'BOM Explosion Item'
#: manufacturing/doctype/bom_explosion_item/bom_explosion_item.json
msgctxt "BOM Explosion Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'BOM Item'
#: manufacturing/doctype/bom_item/bom_item.json
msgctxt "BOM Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'BOM Scrap Item'
#: manufacturing/doctype/bom_scrap_item/bom_scrap_item.json
msgctxt "BOM Scrap Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'BOM Website Item'
#: manufacturing/doctype/bom_website_item/bom_website_item.json
msgctxt "BOM Website Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Batch'
#: stock/doctype/batch/batch.json
msgctxt "Batch"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Blanket Order Item'
#: manufacturing/doctype/blanket_order_item/blanket_order_item.json
msgctxt "Blanket Order Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Delivery Note Item'
#: stock/doctype/delivery_note_item/delivery_note_item.json
msgctxt "Delivery Note Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Item'
#: stock/doctype/item/item.json
msgctxt "Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Read Only field in DocType 'Item Alternative'
#: stock/doctype/item_alternative/item_alternative.json
msgctxt "Item Alternative"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Item Manufacturer'
#: stock/doctype/item_manufacturer/item_manufacturer.json
msgctxt "Item Manufacturer"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Item Price'
#: stock/doctype/item_price/item_price.json
msgctxt "Item Price"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Read Only field in DocType 'Job Card'
#: manufacturing/doctype/job_card/job_card.json
msgctxt "Job Card"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Job Card Item'
#: manufacturing/doctype/job_card_item/job_card_item.json
msgctxt "Job Card Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Maintenance Schedule Detail'
#: maintenance/doctype/maintenance_schedule_detail/maintenance_schedule_detail.json
msgctxt "Maintenance Schedule Detail"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Maintenance Schedule Item'
#: maintenance/doctype/maintenance_schedule_item/maintenance_schedule_item.json
msgctxt "Maintenance Schedule Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Maintenance Visit Purpose'
#: maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json
msgctxt "Maintenance Visit Purpose"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Material Request Item'
#: stock/doctype/material_request_item/material_request_item.json
msgctxt "Material Request Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Material Request Plan Item'
#: manufacturing/doctype/material_request_plan_item/material_request_plan_item.json
msgctxt "Material Request Plan Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Opening Invoice Creation Tool Item'
#: accounts/doctype/opening_invoice_creation_tool_item/opening_invoice_creation_tool_item.json
msgctxt "Opening Invoice Creation Tool Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Opportunity Item'
#: crm/doctype/opportunity_item/opportunity_item.json
msgctxt "Opportunity Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'POS Invoice Item'
#: accounts/doctype/pos_invoice_item/pos_invoice_item.json
msgctxt "POS Invoice Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Packed Item'
#: stock/doctype/packed_item/packed_item.json
msgctxt "Packed Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Packing Slip Item'
#: stock/doctype/packing_slip_item/packing_slip_item.json
msgctxt "Packing Slip Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Pick List Item'
#: stock/doctype/pick_list_item/pick_list_item.json
msgctxt "Pick List Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Production Plan Sub Assembly Item'
#: manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json
msgctxt "Production Plan Sub Assembly Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Purchase Invoice Item'
#: accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
msgctxt "Purchase Invoice Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Purchase Order Item'
#: buying/doctype/purchase_order_item/purchase_order_item.json
msgctxt "Purchase Order Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Purchase Receipt Item'
#: stock/doctype/purchase_receipt_item/purchase_receipt_item.json
msgctxt "Purchase Receipt Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Purchase Receipt Item Supplied'
#: buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.json
msgctxt "Purchase Receipt Item Supplied"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Putaway Rule'
#: stock/doctype/putaway_rule/putaway_rule.json
msgctxt "Putaway Rule"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Quality Inspection'
#: stock/doctype/quality_inspection/quality_inspection.json
msgctxt "Quality Inspection"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Quick Stock Balance'
#: stock/doctype/quick_stock_balance/quick_stock_balance.json
msgctxt "Quick Stock Balance"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Quotation Item'
#: selling/doctype/quotation_item/quotation_item.json
msgctxt "Quotation Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Request for Quotation Item'
#: buying/doctype/request_for_quotation_item/request_for_quotation_item.json
msgctxt "Request for Quotation Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Sales Invoice Item'
#: accounts/doctype/sales_invoice_item/sales_invoice_item.json
msgctxt "Sales Invoice Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Sales Order Item'
#: selling/doctype/sales_order_item/sales_order_item.json
msgctxt "Sales Order Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Serial No'
#: stock/doctype/serial_no/serial_no.json
msgctxt "Serial No"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Serial and Batch Bundle'
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json
msgctxt "Serial and Batch Bundle"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Stock Entry Detail'
#: stock/doctype/stock_entry_detail/stock_entry_detail.json
msgctxt "Stock Entry Detail"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Stock Reconciliation Item'
#: stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json
msgctxt "Stock Reconciliation Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Subcontracting Order Item'
#: subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json
msgctxt "Subcontracting Order Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Subcontracting Order Service Item'
#: subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.json
msgctxt "Subcontracting Order Service Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Subcontracting Receipt Item'
#: subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json
msgctxt "Subcontracting Receipt Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Subcontracting Receipt Supplied Item'
#: subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json
msgctxt "Subcontracting Receipt Supplied Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Supplier Quotation Item'
#: buying/doctype/supplier_quotation_item/supplier_quotation_item.json
msgctxt "Supplier Quotation Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Warranty Claim'
#: support/doctype/warranty_claim/warranty_claim.json
msgctxt "Warranty Claim"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Work Order'
#: manufacturing/doctype/work_order/work_order.json
msgctxt "Work Order"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Data field in DocType 'Work Order Item'
#: manufacturing/doctype/work_order_item/work_order_item.json
msgctxt "Work Order Item"
msgid "Item Name"
-msgstr "Nombre del árticulo"
+msgstr "Nombre del Producto"
#. Label of a Select field in DocType 'Stock Settings'
#: stock/doctype/stock_settings/stock_settings.json
@@ -36903,7 +36914,7 @@
#. Subtitle of the Module Onboarding 'Home'
#: setup/module_onboarding/home/home.json
msgid "Item, Customer, Supplier and Quotation"
-msgstr ""
+msgstr "Producto, Cliente, Proveedor y Cotización"
#. Name of a report
#: stock/report/item_wise_price_list_rate/item_wise_price_list_rate.json
@@ -37887,37 +37898,37 @@
#. Label of a shortcut in the Accounting Workspace
#: accounts/workspace/accounting/accounting.json
msgid "Learn Accounting"
-msgstr ""
+msgstr "Aprender Contabilidad"
#. Label of a shortcut in the Stock Workspace
#: stock/workspace/stock/stock.json
msgid "Learn Inventory Management"
-msgstr ""
+msgstr "Aprende la Gestión del Inventario"
#. Label of a shortcut in the Manufacturing Workspace
#: manufacturing/workspace/manufacturing/manufacturing.json
msgid "Learn Manufacturing"
-msgstr ""
+msgstr "Aprender Manufactura"
#. Label of a shortcut in the Buying Workspace
#: buying/workspace/buying/buying.json
msgid "Learn Procurement"
-msgstr ""
+msgstr "Aprender Compras"
#. Label of a shortcut in the Projects Workspace
#: projects/workspace/projects/projects.json
msgid "Learn Project Management"
-msgstr ""
+msgstr "Aprender Gestión de Proyecto"
#. Label of a shortcut in the Selling Workspace
#: selling/workspace/selling/selling.json
msgid "Learn Sales Management"
-msgstr ""
+msgstr "Aprender Gestión de Ventas"
#. Label of an action in the Onboarding Step 'How to Navigate in ERPNext'
#: setup/onboarding_step/navigation_help/navigation_help.json
msgid "Learn about Navigation options"
-msgstr ""
+msgstr "Aprende sobre las Opciones de Navegación"
#. Description of the 'Enable Common Party Accounting' (Check) field in DocType
#. 'Accounts Settings'
@@ -37930,22 +37941,22 @@
#. Label of an action in the Onboarding Step 'Updating Opening Balances'
#: accounts/onboarding_step/updating_opening_balances/updating_opening_balances.json
msgid "Learn how to update opening balances"
-msgstr ""
+msgstr "Aprenda cómo actualizar los saldos iniciales"
#. Label of an action in the Onboarding Step 'Review Chart of Accounts'
#: accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json
msgid "Learn more about Chart of Accounts"
-msgstr ""
+msgstr "Aprender más sobre el Plan de Cuentas"
#. Label of an action in the Onboarding Step 'Production Planning'
#: manufacturing/onboarding_step/production_planning/production_planning.json
msgid "Learn more about Production Planning"
-msgstr ""
+msgstr "Aprender más sobre la Planificación de Producción"
#. Label of an action in the Onboarding Step 'Import Data from Spreadsheet'
#: setup/onboarding_step/data_import/data_import.json
msgid "Learn more about data migration"
-msgstr ""
+msgstr "Aprende más sobre Migración de Datos"
#. Label of a Select field in DocType 'Employee'
#: setup/doctype/employee/employee.json
@@ -38021,7 +38032,7 @@
#: setup/doctype/company/company.py:389
msgid "Legal"
-msgstr ""
+msgstr "Legal"
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:59
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:84
@@ -38116,7 +38127,7 @@
#. Label of an action in the Onboarding Step 'Set Up a Company'
#: setup/onboarding_step/company_set_up/company_set_up.json
msgid "Let's review your Company"
-msgstr ""
+msgstr "Revisemos su Empresa"
#. Label of an action in the Onboarding Step 'Review Fixed Asset Accounts'
#: assets/onboarding_step/fixed_asset_accounts/fixed_asset_accounts.json
@@ -38267,7 +38278,7 @@
#. Label of an action in the Onboarding Step 'Sales Order'
#: selling/onboarding_step/sales_order/sales_order.json
msgid "Let’s convert your first Sales Order against a Quotation"
-msgstr ""
+msgstr "Convirtamos su primer Pedido de Venta en una Cotización"
#. Label of an action in the Onboarding Step 'Workstation'
#: manufacturing/onboarding_step/workstation/workstation.json
@@ -38282,7 +38293,7 @@
#. Label of an action in the Onboarding Step 'Operation'
#: manufacturing/onboarding_step/operation/operation.json
msgid "Let’s create an Operation"
-msgstr ""
+msgstr "Vamos a crear una Operación"
#. Label of an action in the Onboarding Step 'Setup a Warehouse'
#: stock/onboarding_step/create_a_warehouse/create_a_warehouse.json
@@ -38292,7 +38303,7 @@
#. Label of an action in the Onboarding Step 'Create a Customer'
#: setup/onboarding_step/create_a_customer/create_a_customer.json
msgid "Let’s create your first Customer"
-msgstr ""
+msgstr "Creemos su primer Cliente"
#. Label of an action in the Onboarding Step 'Track Material Request'
#: buying/onboarding_step/create_a_material_request/create_a_material_request.json
@@ -38313,12 +38324,12 @@
#. Label of an action in the Onboarding Step 'Create your first Quotation'
#: setup/onboarding_step/create_a_quotation/create_a_quotation.json
msgid "Let’s create your first Quotation"
-msgstr ""
+msgstr "Creemos su primera Cotización"
#. Label of an action in the Onboarding Step 'Create a Supplier'
#: setup/onboarding_step/create_a_supplier/create_a_supplier.json
msgid "Let’s create your first Supplier"
-msgstr ""
+msgstr "Creemos su primer Proveedor"
#. Label of an action in the Onboarding Step 'Setup Your Letterhead'
#: setup/onboarding_step/letterhead/letterhead.json
@@ -38648,13 +38659,13 @@
#: stock/doctype/manufacturer/manufacturer.json
msgctxt "Manufacturer"
msgid "Logo"
-msgstr ""
+msgstr "Logo"
#. Label of a Attach field in DocType 'Sales Partner'
#: setup/doctype/sales_partner/sales_partner.json
msgctxt "Sales Partner"
msgid "Logo"
-msgstr ""
+msgstr "Logo"
#. Label of a Float field in DocType 'Delivery Stop'
#: stock/doctype/delivery_stop/delivery_stop.json
@@ -38710,11 +38721,11 @@
#: selling/report/lost_quotations/lost_quotations.json
#: selling/report/lost_quotations/lost_quotations.py:31
msgid "Lost Quotations"
-msgstr ""
+msgstr "Cotizaciones perdidas"
#: selling/report/lost_quotations/lost_quotations.py:37
msgid "Lost Quotations %"
-msgstr ""
+msgstr "Cotizaciones perdidas %"
#: crm/report/lost_opportunity/lost_opportunity.js:31
#: selling/report/lost_quotations/lost_quotations.py:24
@@ -39403,7 +39414,7 @@
#: stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js:56
msgid "Make "
-msgstr ""
+msgstr "Crear "
#: assets/doctype/asset/asset_list.js:39
msgid "Make Asset Movement"
@@ -39433,7 +39444,7 @@
#: templates/pages/rfq.html:19
msgid "Make Quotation"
-msgstr ""
+msgstr "Hacer Cotización"
#: stock/doctype/purchase_receipt/purchase_receipt.js:287
msgid "Make Return Entry"
@@ -39474,7 +39485,7 @@
#: assets/doctype/asset/asset.js:124 assets/doctype/asset/asset.js:136
#: setup/doctype/company/company.js:112 setup/doctype/company/company.js:119
msgid "Manage"
-msgstr ""
+msgstr "Gestionar"
#. Label of an action in the Onboarding Step 'Setting up Taxes'
#: accounts/onboarding_step/setup_taxes/setup_taxes.json
@@ -41922,7 +41933,7 @@
#: assets/doctype/asset/asset_dashboard.py:7
msgid "Movement"
-msgstr ""
+msgstr "Movimiento"
#. Option for the 'Valuation Method' (Select) field in DocType 'Item'
#: stock/doctype/item/item.json
@@ -42907,7 +42918,7 @@
#: public/js/utils/crm_activities.js:63
msgid "New Task"
-msgstr ""
+msgstr "Nueva Tarea"
#: manufacturing/doctype/bom/bom.js:112
msgid "New Version"
@@ -43484,7 +43495,7 @@
#: buying/doctype/purchase_order/purchase_order.json
msgctxt "Purchase Order"
msgid "Not Initiated"
-msgstr ""
+msgstr "No iniciado"
#: buying/doctype/purchase_order/purchase_order.py:744
#: templates/pages/material_request_info.py:21 templates/pages/order.py:32
@@ -43497,7 +43508,7 @@
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "Not Requested"
-msgstr ""
+msgstr "No solicitado"
#: selling/report/lost_quotations/lost_quotations.py:86
#: support/report/issue_analytics/issue_analytics.py:208
@@ -50675,7 +50686,7 @@
#: setup/doctype/employee/employee.json
msgctxt "Employee"
msgid "Preferred Email"
-msgstr ""
+msgstr "Correo electrónico preferido"
#. Label of a Data field in DocType 'Packed Item'
#: stock/doctype/packed_item/packed_item.json
@@ -55756,7 +55767,7 @@
#: buying/doctype/supplier_quotation/supplier_quotation.json
msgctxt "Supplier Quotation"
msgid "Quotation Number"
-msgstr ""
+msgstr "Número de Cotización"
#. Label of a Link field in DocType 'Quotation'
#: selling/doctype/quotation/quotation.json
@@ -58424,7 +58435,7 @@
#: accounts/report/balance_sheet/balance_sheet.js:17
#: accounts/report/profit_and_loss_statement/profit_and_loss_statement.js:17
msgid "Report View"
-msgstr ""
+msgstr "Vista de Reporte"
#. Label of a Card Break in the Payables Workspace
#. Label of a Card Break in the Receivables Workspace
@@ -63156,7 +63167,7 @@
#: accounts/report/balance_sheet/balance_sheet.js:14
#: accounts/report/profit_and_loss_statement/profit_and_loss_statement.js:14
msgid "Select View"
-msgstr ""
+msgstr "Seleccione Vista"
#: public/js/bank_reconciliation_tool/dialog_manager.js:248
msgid "Select Vouchers to Match"
@@ -64804,7 +64815,7 @@
#. Title of an Onboarding Step
#: setup/onboarding_step/company_set_up/company_set_up.json
msgid "Set Up a Company"
-msgstr ""
+msgstr "Configurar una Compañía"
#. Label of a Check field in DocType 'BOM Creator'
#: manufacturing/doctype/bom_creator/bom_creator.json
@@ -65910,7 +65921,7 @@
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:32
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:45
msgid "Software"
-msgstr ""
+msgstr "Software"
#: assets/doctype/asset/asset_list.js:11
msgid "Sold"
@@ -67270,7 +67281,7 @@
#: stock/doctype/stock_settings/stock_settings.json
msgctxt "Stock Settings"
msgid "Stock Frozen Up To"
-msgstr ""
+msgstr "Existencias congeladas hasta"
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:20
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:31
@@ -70742,7 +70753,7 @@
#. Label of a Card Break in the Accounting Workspace
#: accounts/workspace/accounting/accounting.json
msgid "Tax Masters"
-msgstr ""
+msgstr "Maestros Fiscales"
#: accounts/doctype/account/account_tree.js:119
msgid "Tax Rate"
@@ -72059,7 +72070,7 @@
#: accounts/doctype/journal_entry/journal_entry.py:155
#: accounts/doctype/journal_entry/journal_entry.py:162
msgid "The task has been enqueued as a background job."
-msgstr ""
+msgstr "La tarea se ha puesto en cola como trabajo en segundo plano."
#: stock/doctype/stock_entry/stock_entry.py:244
msgid "The task has been enqueued as a background job. In case there is any issue on processing in background, the system will add a comment about the error on this Stock Entry and revert to the Draft stage"
@@ -72118,7 +72129,7 @@
#: stock/doctype/material_request/material_request.py:779
msgid "The {0} {1} created successfully"
-msgstr ""
+msgstr "El {0} {1} creado exitosamente"
#: manufacturing/doctype/job_card/job_card.py:762
msgid "The {0} {1} is used to calculate the valuation cost for the finished good {2}."
@@ -73328,13 +73339,13 @@
#: buying/doctype/purchase_order/purchase_order_list.js:12
#: selling/doctype/sales_order/sales_order_list.js:14
msgid "To Pay"
-msgstr ""
+msgstr "A Pagar"
#. Option for the 'Status' (Select) field in DocType 'Sales Order'
#: selling/doctype/sales_order/sales_order.json
msgctxt "Sales Order"
msgid "To Pay"
-msgstr ""
+msgstr "A Pagar"
#. Label of a Date field in DocType 'Payment Reconciliation'
#: accounts/doctype/payment_reconciliation/payment_reconciliation.json
@@ -74678,13 +74689,13 @@
#: assets/doctype/asset_capitalization/asset_capitalization.json
msgctxt "Asset Capitalization"
msgid "Total Value"
-msgstr ""
+msgstr "Valor Total"
#. Label of a Currency field in DocType 'Asset Repair Consumed Item'
#: assets/doctype/asset_repair_consumed_item/asset_repair_consumed_item.json
msgctxt "Asset Repair Consumed Item"
msgid "Total Value"
-msgstr ""
+msgstr "Valor Total"
#. Label of a Currency field in DocType 'Stock Entry'
#: stock/doctype/stock_entry/stock_entry.json
@@ -74787,7 +74798,7 @@
#: accounts/report/financial_statements.py:339
#: accounts/report/financial_statements.py:340
msgid "Total {0} ({1})"
-msgstr ""
+msgstr "Total {0} ({1})"
#: stock/doctype/landed_cost_voucher/landed_cost_voucher.py:162
msgid "Total {0} for all items is zero, may be you should change 'Distribute Charges Based On'"
@@ -74902,7 +74913,7 @@
#: stock/doctype/shipment/shipment.json
msgctxt "Shipment"
msgid "Tracking URL"
-msgstr ""
+msgstr "URL de Seguimiento"
#: accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py:435
#: manufacturing/doctype/workstation/workstation_dashboard.py:10
@@ -76055,7 +76066,7 @@
#: setup/workspace/home/home.json stock/workspace/stock/stock.json
msgctxt "UOM"
msgid "Unit of Measure (UOM)"
-msgstr ""
+msgstr "Unidad de Medida (UdM)"
#: stock/doctype/item/item.py:378
msgid "Unit of Measure {0} has been entered more than once in Conversion Factor Table"
@@ -76311,7 +76322,7 @@
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js:17
msgid "Up"
-msgstr ""
+msgstr "Arriba"
#. Label of a Check field in DocType 'Email Digest'
#: setup/doctype/email_digest/email_digest.json
@@ -76579,7 +76590,7 @@
#: accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js:44
msgid "Upload Bank Statement"
-msgstr ""
+msgstr "Cargar extracto bancario"
#. Label of a Section Break field in DocType 'Import Supplier Invoice'
#: regional/doctype/import_supplier_invoice/import_supplier_invoice.json
@@ -76881,7 +76892,7 @@
#. Name of a report
#: regional/report/vat_audit_report/vat_audit_report.json
msgid "VAT Audit Report"
-msgstr ""
+msgstr "Informe de auditoría del IVA"
#: regional/report/uae_vat_201/uae_vat_201.py:115
msgid "VAT on Expenses and All Other Inputs"
@@ -77631,7 +77642,7 @@
#: utilities/doctype/video/video.json
msgctxt "Video"
msgid "Vimeo"
-msgstr ""
+msgstr "Vimeo"
#: templates/pages/help.html:46
msgid "Visit the forums"
@@ -77930,7 +77941,7 @@
#: patches/v15_0/remove_exotel_integration.py:32
msgid "WARNING: Exotel app has been separated from ERPNext, please install the app to continue using Exotel integration."
-msgstr ""
+msgstr "ADVERTENCIA: La aplicación Exotel se ha separado de ERPNext; instale la aplicación para continuar usando la integración de Exotel."
#. Label of a Link field in DocType 'Material Request Item'
#: stock/doctype/material_request_item/material_request_item.json
@@ -78543,7 +78554,7 @@
#: accounts/doctype/cost_center_allocation/cost_center_allocation.py:116
msgid "Warning!"
-msgstr ""
+msgstr "¡Advertencia!"
#: accounts/doctype/journal_entry/journal_entry.py:1146
msgid "Warning: Another {0} # {1} exists against stock entry {2}"
@@ -78816,7 +78827,7 @@
#: selling/report/sales_analytics/sales_analytics.py:316
#: stock/report/stock_analytics/stock_analytics.py:115
msgid "Week {0} {1}"
-msgstr ""
+msgstr "Semana {0} {1}"
#. Label of a Select field in DocType 'Quality Goal'
#: quality_management/doctype/quality_goal/quality_goal.json
@@ -78914,13 +78925,13 @@
#: stock/doctype/shipment_parcel/shipment_parcel.json
msgctxt "Shipment Parcel"
msgid "Weight (kg)"
-msgstr ""
+msgstr "Peso (kg)"
#. Label of a Float field in DocType 'Shipment Parcel Template'
#: stock/doctype/shipment_parcel_template/shipment_parcel_template.json
msgctxt "Shipment Parcel Template"
msgid "Weight (kg)"
-msgstr ""
+msgstr "Peso (kg)"
#. Label of a Float field in DocType 'Delivery Note Item'
#: stock/doctype/delivery_note_item/delivery_note_item.json
@@ -79072,13 +79083,13 @@
#: crm/doctype/lead/lead.json
msgctxt "Lead"
msgid "WhatsApp"
-msgstr ""
+msgstr "WhatsApp"
#. Label of a Data field in DocType 'Opportunity'
#: crm/doctype/opportunity/opportunity.json
msgctxt "Opportunity"
msgid "WhatsApp"
-msgstr ""
+msgstr "WhatsApp"
#. Label of a Int field in DocType 'Vehicle'
#: setup/doctype/vehicle/vehicle.json
@@ -79725,7 +79736,7 @@
#: accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:70
msgid "Wrong Company"
-msgstr ""
+msgstr "Compañía incorrecta"
#: setup/doctype/company/company.js:172
msgid "Wrong Password"
@@ -80221,7 +80232,7 @@
#: manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json
msgctxt "Production Plan Sub Assembly Item"
msgid "description"
-msgstr ""
+msgstr "descripción"
#. Option for the 'Plaid Environment' (Select) field in DocType 'Plaid
#. Settings'
@@ -80914,7 +80925,7 @@
#: manufacturing/doctype/job_card/job_card.py:773
msgid "{0} {1}"
-msgstr ""
+msgstr "{0} {1}"
#: public/js/utils/serial_no_batch_selector.js:203
msgid "{0} {1} Manually"
@@ -80922,7 +80933,7 @@
#: accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py:433
msgid "{0} {1} Partially Reconciled"
-msgstr ""
+msgstr "{0} {1} Parcialmente reconciliado"
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:417
msgid "{0} {1} cannot be updated. If you need to make changes, we recommend canceling the existing entry and creating a new one."
@@ -81091,20 +81102,20 @@
#: projects/doctype/project/project_list.js:6
msgid "{0}%"
-msgstr ""
+msgstr "{0}%"
#: controllers/website_list_for_contact.py:205
msgid "{0}% Billed"
-msgstr ""
+msgstr "{0}% Facturado"
#: controllers/website_list_for_contact.py:213
msgid "{0}% Delivered"
-msgstr ""
+msgstr "{0}% Enviado"
#: accounts/doctype/payment_term/payment_term.js:15
#, python-format
msgid "{0}% of total invoice value will be given as discount."
-msgstr ""
+msgstr "{0}% del valor total de la factura se otorgará como descuento."
#: projects/doctype/task/task.py:119
msgid "{0}'s {1} cannot be after {2}'s Expected End Date."
@@ -81136,7 +81147,7 @@
#: assets/report/fixed_asset_register/fixed_asset_register.py:372
msgid "{}"
-msgstr ""
+msgstr "{}"
#: controllers/buying_controller.py:712
msgid "{} Assets created for {}"
@@ -81157,7 +81168,7 @@
#: accounts/doctype/pos_closing_entry/pos_closing_entry.py:73
#: accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py:57
msgid "{} is added multiple times on rows: {}"
-msgstr ""
+msgstr "{} se agrega varias veces en las filas: {}"
#: erpnext_integrations/doctype/tally_migration/tally_migration.py:704
msgid "{} of {}"
@@ -81166,9 +81177,9 @@
#: accounts/doctype/party_link/party_link.py:50
#: accounts/doctype/party_link/party_link.py:60
msgid "{} {} is already linked with another {}"
-msgstr ""
+msgstr "{} {} ya está vinculado con otro {}"
#: accounts/doctype/party_link/party_link.py:40
msgid "{} {} is already linked with {} {}"
-msgstr ""
+msgstr "{} {} ya está vinculado con {} {}"