diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js index 63cc46518f..7e57c2fc47 100644 --- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js +++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js @@ -4,6 +4,23 @@ frappe.ui.form.on("Bank Clearance", { setup: function(frm) { frm.add_fetch("account", "account_currency", "account_currency"); + + frm.set_query("account", function() { + return { + "filters": { + "account_type": ["in",["Bank","Cash"]], + "is_group": 0, + } + }; + }); + + frm.set_query("bank_account", function () { + return { + filters: { + 'is_company_account': 1 + }, + }; + }); }, onload: function(frm) { @@ -12,14 +29,7 @@ frappe.ui.form.on("Bank Clearance", { locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: ""; frm.set_value("account", default_bank_account); - frm.set_query("account", function() { - return { - "filters": { - "account_type": ["in",["Bank","Cash"]], - "is_group": 0 - } - }; - }); + frm.set_value("from_date", frappe.datetime.month_start()); frm.set_value("to_date", frappe.datetime.month_end()); diff --git a/erpnext/accounts/doctype/budget/budget.py b/erpnext/accounts/doctype/budget/budget.py index 6ac3350c3b..637ac7a04c 100644 --- a/erpnext/accounts/doctype/budget/budget.py +++ b/erpnext/accounts/doctype/budget/budget.py @@ -107,7 +107,7 @@ class Budget(Document): self.naming_series = f"{{{frappe.scrub(self.budget_against)}}}./.{self.fiscal_year}/.###" -def validate_expense_against_budget(args): +def validate_expense_against_budget(args, expense_amount=0): args = frappe._dict(args) if args.get("company") and not args.fiscal_year: @@ -175,13 +175,13 @@ def validate_expense_against_budget(args): ) # nosec if budget_records: - validate_budget_records(args, budget_records) + validate_budget_records(args, budget_records, expense_amount) -def validate_budget_records(args, budget_records): +def validate_budget_records(args, budget_records, expense_amount): for budget in budget_records: if flt(budget.budget_amount): - amount = get_amount(args, budget) + amount = expense_amount or get_amount(args, budget) yearly_action, monthly_action = get_actions(args, budget) if monthly_action in ["Stop", "Warn"]: diff --git a/erpnext/accounts/doctype/budget/test_budget.py b/erpnext/accounts/doctype/budget/test_budget.py index c48c7d97a2..11af9a29f6 100644 --- a/erpnext/accounts/doctype/budget/test_budget.py +++ b/erpnext/accounts/doctype/budget/test_budget.py @@ -334,6 +334,39 @@ class TestBudget(unittest.TestCase): budget.cancel() jv.cancel() + def test_monthly_budget_against_main_cost_center(self): + from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center + from erpnext.accounts.doctype.cost_center_allocation.test_cost_center_allocation import ( + create_cost_center_allocation, + ) + + cost_centers = [ + "Main Budget Cost Center 1", + "Sub Budget Cost Center 1", + "Sub Budget Cost Center 2", + ] + + for cc in cost_centers: + create_cost_center(cost_center_name=cc, company="_Test Company") + + create_cost_center_allocation( + "_Test Company", + "Main Budget Cost Center 1 - _TC", + {"Sub Budget Cost Center 1 - _TC": 60, "Sub Budget Cost Center 2 - _TC": 40}, + ) + + make_budget(budget_against="Cost Center", cost_center="Main Budget Cost Center 1 - _TC") + + jv = make_journal_entry( + "_Test Account Cost for Goods Sold - _TC", + "_Test Bank - _TC", + 400000, + "Main Budget Cost Center 1 - _TC", + posting_date=nowdate(), + ) + + self.assertRaises(BudgetError, jv.submit) + def set_total_expense_zero(posting_date, budget_against_field=None, budget_against_CC=None): if budget_against_field == "project": diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index 763e2e6992..a5ff7f1aa7 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -312,8 +312,7 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro } } - get_outstanding(doctype, docname, company, child, due_date) { - var me = this; + get_outstanding(doctype, docname, company, child) { var args = { "doctype": doctype, "docname": docname, diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 52690e1e66..de012b28ec 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -1210,6 +1210,7 @@ def get_outstanding(args): args = json.loads(args) company_currency = erpnext.get_company_currency(args.get("company")) + due_date = None if args.get("doctype") == "Journal Entry": condition = " and party=%(party)s" if args.get("party") else "" @@ -1234,10 +1235,12 @@ def get_outstanding(args): invoice = frappe.db.get_value( args["doctype"], args["docname"], - ["outstanding_amount", "conversion_rate", scrub(party_type)], + ["outstanding_amount", "conversion_rate", scrub(party_type), "due_date"], as_dict=1, ) + due_date = invoice.get("due_date") + exchange_rate = ( invoice.conversion_rate if (args.get("account_currency") != company_currency) else 1 ) @@ -1260,6 +1263,7 @@ def get_outstanding(args): "exchange_rate": exchange_rate, "party_type": party_type, "party": invoice.get(scrub(party_type)), + "reference_due_date": due_date, } diff --git a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json index a0ea43332c..47ad19e0f9 100644 --- a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json +++ b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json @@ -216,7 +216,7 @@ { "depends_on": "eval:doc.reference_type&&!in_list(doc.reference_type, ['Expense Claim', 'Asset', 'Employee Loan', 'Employee Advance'])", "fieldname": "reference_due_date", - "fieldtype": "Select", + "fieldtype": "Date", "label": "Reference Due Date", "no_copy": 1 }, @@ -284,7 +284,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-10-13 17:07:17.999191", + "modified": "2022-10-26 20:03:10.906259", "modified_by": "Administrator", "module": "Accounts", "name": "Journal Entry Account", 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 7eb5c4234d..1f4166151a 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 @@ -22,13 +22,13 @@ frappe.ui.form.on('Opening Invoice Creation Tool', { } if (data.user != frappe.session.user) return; if (data.count == data.total) { - setTimeout((title) => { + setTimeout(() => { frm.doc.import_in_progress = false; frm.clear_table("invoices"); frm.refresh_fields(); frm.page.clear_indicator(); - frm.dashboard.hide_progress(title); - frappe.msgprint(__("Opening {0} Invoice created", [frm.doc.invoice_type])); + frm.dashboard.hide_progress(); + frappe.msgprint(__("Opening {0} Invoices created", [frm.doc.invoice_type])); }, 1500, data.title); return; } @@ -51,13 +51,6 @@ frappe.ui.form.on('Opening Invoice Creation Tool', { method: "make_invoices", freeze: 1, freeze_message: __("Creating {0} Invoice", [frm.doc.invoice_type]), - callback: function(r) { - if (r.message.length == 1) { - frappe.msgprint(__("{0} Invoice created successfully.", [frm.doc.invoice_type])); - } else if (r.message.length < 50) { - frappe.msgprint(__("{0} Invoices created successfully.", [frm.doc.invoice_type])); - } - } }); }); diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py index f7df1ff4a1..57fe4059c7 100644 --- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py +++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py @@ -255,8 +255,6 @@ def start_import(invoices): def publish(index, total, doctype): - if total < 50: - return frappe.publish_realtime( "opening_invoice_creation_progress", dict( diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 7f245fd083..94874894b0 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -995,7 +995,9 @@ class PaymentEntry(AccountsController): if self.payment_type in ("Receive", "Pay") and self.party: for d in self.get("references"): if d.allocated_amount and d.reference_doctype in frappe.get_hooks("advance_payment_doctypes"): - frappe.get_doc(d.reference_doctype, d.reference_name).set_total_advance_paid() + frappe.get_doc( + d.reference_doctype, d.reference_name, for_update=True + ).set_total_advance_paid() def on_recurring(self, reference_doc, auto_repeat_doc): self.reference_no = reference_doc.name 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 7dd77fbb3c..7dd5ef36f2 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 @@ -9,6 +9,7 @@ frappe.ui.form.on('Process Statement Of Accounts', { 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: { @@ -25,7 +26,8 @@ frappe.ui.form.on('Process Statement Of Accounts', { }); }); frm.add_custom_button(__('Download'), function(){ - var url = frappe.urllib.get_full_url( + 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)) $.ajax({ diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json index a26267ba5e..83e637077e 100644 --- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json +++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json @@ -27,6 +27,7 @@ "customers", "preferences", "orientation", + "include_break", "include_ageing", "ageing_based_on", "section_break_14", @@ -284,10 +285,16 @@ "fieldtype": "Link", "label": "Terms and Conditions", "options": "Terms and Conditions" + }, + { + "default": "1", + "fieldname": "include_break", + "fieldtype": "Check", + "label": "Page Break After Each SoA" } ], "links": [], - "modified": "2021-09-06 21:00:45.732505", + "modified": "2022-10-17 17:47:08.662475", "modified_by": "Administrator", "module": "Accounts", "name": "Process Statement Of Accounts", @@ -321,5 +328,6 @@ ], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file 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 01f716daa2..c6b0c57ce5 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 @@ -6,6 +6,7 @@ import copy import frappe from frappe import _ +from frappe.desk.reportview import get_match_cond from frappe.model.document import Document from frappe.utils import add_days, add_months, format_date, getdate, today from frappe.utils.jinja import validate_template @@ -128,7 +129,8 @@ def get_report_pdf(doc, consolidated=True): if not bool(statement_dict): return False elif consolidated: - result = "".join(list(statement_dict.values())) + delimiter = '
' if doc.include_break else "" + result = delimiter.join(list(statement_dict.values())) return get_pdf(result, {"orientation": doc.orientation}) else: for customer, statement_html in statement_dict.items(): @@ -240,8 +242,6 @@ def fetch_customers(customer_collection, collection_name, primary_mandatory): if int(primary_mandatory): if primary_email == "": continue - elif (billing_email == "") and (primary_email == ""): - continue customer_list.append( {"name": customer.name, "primary_email": primary_email, "billing_email": billing_email} @@ -273,8 +273,12 @@ def get_customer_emails(customer_name, primary_mandatory, billing_and_primary=Tr link.link_doctype='Customer' and link.link_name=%s and contact.is_billing_contact=1 + {mcond} ORDER BY - contact.creation desc""", + contact.creation desc + """.format( + mcond=get_match_cond("Contact") + ), customer_name, ) @@ -313,6 +317,8 @@ def send_emails(document_name, from_scheduler=False): attachments = [{"fname": customer + ".pdf", "fcontent": report_pdf}] recipients, cc = get_recipients_and_cc(customer, doc) + if not recipients: + continue context = get_context(customer, doc) subject = frappe.render_template(doc.subject, context) message = frappe.render_template(doc.body, context) diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 9de9036887..a8f6f80b6b 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -214,6 +214,7 @@ "reqd": 1 }, { + "default": "1", "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", @@ -820,6 +821,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval: doc.margin_type || doc.discount_amount", "fieldname": "section_break_26", "fieldtype": "Section Break", "label": "Discount and Margin" @@ -871,7 +873,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-10-12 03:37:29.032732", + "modified": "2022-10-26 16:05:37.304788", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index afd5a59df4..0c03c550ba 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -2017,6 +2017,9 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): update_address( target_doc, "shipping_address", "shipping_address_display", source_doc.customer_address ) + update_address( + target_doc, "billing_address", "billing_address_display", source_doc.customer_address + ) if currency: target_doc.currency = currency diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json index a307a6c17c..7f1a1eccc4 100644 --- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json +++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json @@ -247,6 +247,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval: doc.margin_type || doc.discount_amount", "fieldname": "discount_and_margin", "fieldtype": "Section Break", "label": "Discount and Margin" @@ -876,7 +877,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-10-10 20:57:38.340026", + "modified": "2022-10-26 11:38:36.119339", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice Item", diff --git a/erpnext/accounts/doctype/subscription_plan/subscription_plan.py b/erpnext/accounts/doctype/subscription_plan/subscription_plan.py index a95e0a9c2d..f3acdc5aa8 100644 --- a/erpnext/accounts/doctype/subscription_plan/subscription_plan.py +++ b/erpnext/accounts/doctype/subscription_plan/subscription_plan.py @@ -3,6 +3,7 @@ import frappe +from dateutil import relativedelta from frappe import _ from frappe.model.document import Document from frappe.utils import date_diff, flt, get_first_day, get_last_day, getdate @@ -49,7 +50,7 @@ def get_plan_rate( start_date = getdate(start_date) end_date = getdate(end_date) - no_of_months = (end_date.year - start_date.year) * 12 + (end_date.month - start_date.month) + 1 + no_of_months = relativedelta.relativedelta(end_date, start_date).months + 1 cost = plan.cost * no_of_months # Adjust cost if start or end date is not month start or end diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index f4a50a5f91..6d164eef2b 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -128,6 +128,12 @@ def distribute_gl_based_on_cost_center_allocation(gl_map, precision=None): new_gl_map = [] for d in gl_map: cost_center = d.get("cost_center") + + # Validate budget against main cost center + validate_expense_against_budget( + d, expense_amount=flt(d.debit, precision) - flt(d.credit, precision) + ) + if cost_center and cost_center_allocation.get(cost_center): for sub_cost_center, percentage in cost_center_allocation.get(cost_center, {}).items(): gle = copy.deepcopy(d) diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js index 7cf14e6738..e1a30a4b77 100644 --- a/erpnext/accounts/report/accounts_payable/accounts_payable.js +++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js @@ -51,6 +51,8 @@ frappe.query_reports["Accounts Payable"] = { } else { frappe.query_report.set_filter_value('tax_id', ""); } + + frappe.query_report.refresh(); } }, { diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 8557c03bd5..f2ee1eb10e 100755 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -748,7 +748,7 @@ class ReceivablePayableReport(object): self.add_accounting_dimensions_filters() - def get_cost_center_conditions(self, conditions): + def get_cost_center_conditions(self): lft, rgt = frappe.db.get_value("Cost Center", self.filters.cost_center, ["lft", "rgt"]) cost_center_list = [ center.name diff --git a/erpnext/accounts/report/general_ledger/general_ledger.html b/erpnext/accounts/report/general_ledger/general_ledger.html index 378fa3791c..c04f518d7e 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.html +++ b/erpnext/accounts/report/general_ledger/general_ledger.html @@ -52,22 +52,22 @@ {% } %} - {%= format_currency(data[i].debit, filters.presentation_currency) %} + {%= format_currency(data[i].debit, filters.presentation_currency || data[i].account_currency) %} - {%= format_currency(data[i].credit, filters.presentation_currency) %} + {%= format_currency(data[i].credit, filters.presentation_currency || data[i].account_currency) %} {% } else { %} {%= frappe.format(data[i].account, {fieldtype: "Link"}) || " " %} - {%= data[i].account && format_currency(data[i].debit, filters.presentation_currency) %} + {%= data[i].account && format_currency(data[i].debit, filters.presentation_currency || data[i].account_currency) %} - {%= data[i].account && format_currency(data[i].credit, filters.presentation_currency) %} + {%= data[i].account && format_currency(data[i].credit, filters.presentation_currency || data[i].account_currency) %} {% } %} - {%= format_currency(data[i].balance, filters.presentation_currency) %} + {%= format_currency(data[i].balance, filters.presentation_currency || data[i].account_currency) %} {% } %} diff --git a/erpnext/accounts/report/payment_ledger/__init__.py b/erpnext/accounts/report/payment_ledger/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/accounts/report/payment_ledger/payment_ledger.js b/erpnext/accounts/report/payment_ledger/payment_ledger.js new file mode 100644 index 0000000000..9779844dc9 --- /dev/null +++ b/erpnext/accounts/report/payment_ledger/payment_ledger.js @@ -0,0 +1,59 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +/* eslint-disable */ + +function get_filters() { + let filters = [ + { + "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_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":"voucher_no", + "label": __("Voucher No"), + "fieldtype": "Data", + "width": 100, + }, + { + "fieldname":"against_voucher_no", + "label": __("Against Voucher No"), + "fieldtype": "Data", + "width": 100, + }, + + ] + return filters; +} + +frappe.query_reports["Payment Ledger"] = { + "filters": get_filters() +}; diff --git a/erpnext/accounts/report/payment_ledger/payment_ledger.json b/erpnext/accounts/report/payment_ledger/payment_ledger.json new file mode 100644 index 0000000000..716329fbef --- /dev/null +++ b/erpnext/accounts/report/payment_ledger/payment_ledger.json @@ -0,0 +1,32 @@ +{ + "add_total_row": 0, + "columns": [], + "creation": "2022-06-06 08:50:43.933708", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 0, + "is_standard": "Yes", + "modified": "2022-06-06 08:50:43.933708", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Payment Ledger", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Payment Ledger Entry", + "report_name": "Payment Ledger", + "report_type": "Script Report", + "roles": [ + { + "role": "Accounts User" + }, + { + "role": "Accounts Manager" + }, + { + "role": "Auditor" + } + ] +} \ No newline at end of file diff --git a/erpnext/accounts/report/payment_ledger/payment_ledger.py b/erpnext/accounts/report/payment_ledger/payment_ledger.py new file mode 100644 index 0000000000..e470c2727e --- /dev/null +++ b/erpnext/accounts/report/payment_ledger/payment_ledger.py @@ -0,0 +1,222 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from collections import OrderedDict + +import frappe +from frappe import _, qb +from frappe.query_builder import Criterion + + +class PaymentLedger(object): + def __init__(self, filters=None): + self.filters = filters + self.columns, self.data = [], [] + self.voucher_dict = OrderedDict() + self.voucher_amount = [] + self.ple = qb.DocType("Payment Ledger Entry") + + def init_voucher_dict(self): + + if self.voucher_amount: + s = set() + # build a set of unique vouchers + for ple in self.voucher_amount: + key = (ple.voucher_type, ple.voucher_no, ple.party) + s.add(key) + + # for each unique vouchers, initialize +/- list + for key in s: + self.voucher_dict[key] = frappe._dict(increase=list(), decrease=list()) + + # for each ple, using against voucher and amount, assign it to +/- list + # group by against voucher + for ple in self.voucher_amount: + against_key = (ple.against_voucher_type, ple.against_voucher_no, ple.party) + target = None + if self.voucher_dict.get(against_key): + if ple.amount > 0: + target = self.voucher_dict.get(against_key).increase + else: + target = self.voucher_dict.get(against_key).decrease + + # this if condition will lose unassigned ple entries(against_voucher doc doesn't have ple) + # need to somehow include the stray entries as well. + if target is not None: + entry = frappe._dict( + company=ple.company, + account=ple.account, + party_type=ple.party_type, + party=ple.party, + voucher_type=ple.voucher_type, + voucher_no=ple.voucher_no, + against_voucher_type=ple.against_voucher_type, + against_voucher_no=ple.against_voucher_no, + amount=ple.amount, + currency=ple.account_currency, + ) + + if self.filters.include_account_currency: + entry["amount_in_account_currency"] = ple.amount_in_account_currency + + target.append(entry) + + def build_data(self): + self.data.clear() + + for value in self.voucher_dict.values(): + voucher_data = [] + if value.increase != []: + voucher_data.extend(value.increase) + if value.decrease != []: + voucher_data.extend(value.decrease) + + if voucher_data: + # balance row + total = 0 + total_in_account_currency = 0 + + for x in voucher_data: + total += x.amount + if self.filters.include_account_currency: + total_in_account_currency += x.amount_in_account_currency + + entry = frappe._dict( + against_voucher_no="Outstanding:", + amount=total, + currency=voucher_data[0].currency, + ) + + if self.filters.include_account_currency: + entry["amount_in_account_currency"] = total_in_account_currency + + voucher_data.append(entry) + + # empty row + voucher_data.append(frappe._dict()) + self.data.extend(voucher_data) + + def build_conditions(self): + self.conditions = [] + + if self.filters.company: + self.conditions.append(self.ple.company == self.filters.company) + + if self.filters.account: + self.conditions.append(self.ple.account.isin(self.filters.account)) + + if self.filters.period_start_date: + self.conditions.append(self.ple.posting_date.gte(self.filters.period_start_date)) + + if self.filters.period_end_date: + self.conditions.append(self.ple.posting_date.lte(self.filters.period_end_date)) + + if self.filters.voucher_no: + self.conditions.append(self.ple.voucher_no == self.filters.voucher_no) + + if self.filters.against_voucher_no: + self.conditions.append(self.ple.against_voucher_no == self.filters.against_voucher_no) + + def get_data(self): + ple = self.ple + + self.build_conditions() + + # fetch data from table + self.voucher_amount = ( + qb.from_(ple) + .select(ple.star) + .where(ple.delinked == 0) + .where(Criterion.all(self.conditions)) + .run(as_dict=True) + ) + + def get_columns(self): + options = None + self.columns.append( + dict(label=_("Company"), fieldname="company", fieldtype="data", options=options, width="100") + ) + + self.columns.append( + dict(label=_("Account"), fieldname="account", fieldtype="data", options=options, width="100") + ) + + self.columns.append( + dict( + label=_("Party Type"), fieldname="party_type", fieldtype="data", options=options, width="100" + ) + ) + self.columns.append( + dict(label=_("Party"), fieldname="party", fieldtype="data", options=options, width="100") + ) + self.columns.append( + dict( + label=_("Voucher Type"), + fieldname="voucher_type", + fieldtype="data", + options=options, + width="100", + ) + ) + self.columns.append( + dict( + label=_("Voucher No"), fieldname="voucher_no", fieldtype="data", options=options, width="100" + ) + ) + self.columns.append( + dict( + label=_("Against Voucher Type"), + fieldname="against_voucher_type", + fieldtype="data", + options=options, + width="100", + ) + ) + self.columns.append( + dict( + label=_("Against Voucher No"), + fieldname="against_voucher_no", + fieldtype="data", + options=options, + width="100", + ) + ) + self.columns.append( + dict( + label=_("Amount"), + fieldname="amount", + fieldtype="Currency", + options="Company:company:default_currency", + width="100", + ) + ) + + if self.filters.include_account_currency: + self.columns.append( + dict( + label=_("Amount in Account Currency"), + fieldname="amount_in_account_currency", + fieldtype="Currency", + options="currency", + width="100", + ) + ) + self.columns.append( + dict(label=_("Currency"), fieldname="currency", fieldtype="Currency", hidden=True) + ) + + def run(self): + self.get_columns() + self.get_data() + + # initialize dictionary and group using against voucher + self.init_voucher_dict() + + # convert dictionary to list and add balance rows + self.build_data() + + return self.columns, self.data + + +def execute(filters=None): + return PaymentLedger(filters).run() diff --git a/erpnext/accounts/report/payment_ledger/test_payment_ledger.py b/erpnext/accounts/report/payment_ledger/test_payment_ledger.py new file mode 100644 index 0000000000..5ae9b87cde --- /dev/null +++ b/erpnext/accounts/report/payment_ledger/test_payment_ledger.py @@ -0,0 +1,65 @@ +import unittest + +import frappe +from frappe import qb +from frappe.tests.utils import FrappeTestCase + +from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry +from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice +from erpnext.accounts.report.payment_ledger.payment_ledger import execute + + +class TestPaymentLedger(FrappeTestCase): + def setUp(self): + self.create_company() + self.cleanup() + + def cleanup(self): + doctypes = [] + doctypes.append(qb.DocType("GL Entry")) + doctypes.append(qb.DocType("Payment Ledger Entry")) + doctypes.append(qb.DocType("Sales Invoice")) + doctypes.append(qb.DocType("Payment Entry")) + + for doctype in doctypes: + qb.from_(doctype).delete().where(doctype.company == self.company).run() + + def create_company(self): + name = "Test Payment Ledger" + company = None + if frappe.db.exists("Company", name): + company = frappe.get_doc("Company", name) + else: + company = frappe.get_doc( + { + "doctype": "Company", + "company_name": name, + "country": "India", + "default_currency": "INR", + "create_chart_of_accounts_based_on": "Standard Template", + "chart_of_accounts": "Standard", + } + ) + company = company.save() + self.company = company.name + self.cost_center = company.cost_center + self.warehouse = "All Warehouses" + " - " + company.abbr + self.income_account = company.default_income_account + self.expense_account = company.default_expense_account + self.debit_to = company.default_receivable_account + + def test_unpaid_invoice_outstanding(self): + sinv = create_sales_invoice( + company=self.company, + debit_to=self.debit_to, + expense_account=self.expense_account, + cost_center=self.cost_center, + income_account=self.income_account, + warehouse=self.warehouse, + ) + pe = get_payment_entry(sinv.doctype, sinv.name).save().submit() + + filters = frappe._dict({"company": self.company}) + columns, data = execute(filters=filters) + outstanding = [x for x in data if x.get("against_voucher_no") == "Outstanding:"] + self.assertEqual(outstanding[0].get("amount"), 0) diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py index 8758e9c17d..d5913c5946 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/asset_repair.py @@ -135,6 +135,7 @@ class AssetRepair(AccountsController): "basic_rate": stock_item.valuation_rate, "serial_no": stock_item.serial_no, "cost_center": self.cost_center, + "project": self.project, }, ) diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py index 59ab6a910d..84aa8fa023 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -61,7 +61,9 @@ class AssetValueAdjustment(Document): je.naming_series = depreciation_series je.posting_date = self.date je.company = self.company - je.remark = "Depreciation Entry against {0} worth {1}".format(self.asset, self.difference_amount) + je.remark = _("Depreciation Entry against {0} worth {1}").format( + self.asset, self.difference_amount + ) je.finance_book = self.finance_book credit_entry = { diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index ddf81ca3ae..06fdea030c 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -101,6 +101,11 @@ frappe.ui.form.on("Purchase Order", { 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) + } }, apply_tds: function(frm) { diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json index 82e92e87bc..b8203bd128 100644 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json @@ -777,6 +777,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval: doc.margin_type || doc.discount_amount", "fieldname": "discount_and_margin_section", "fieldtype": "Section Break", "label": "Discount and Margin" @@ -894,7 +895,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-09-07 11:12:38.634976", + "modified": "2022-10-26 16:47:41.364387", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order Item", diff --git a/erpnext/buying/doctype/supplier/test_supplier.py b/erpnext/buying/doctype/supplier/test_supplier.py index 55722686fe..e2dbf21be2 100644 --- a/erpnext/buying/doctype/supplier/test_supplier.py +++ b/erpnext/buying/doctype/supplier/test_supplier.py @@ -3,6 +3,7 @@ import frappe +from frappe.custom.doctype.property_setter.property_setter import make_property_setter from frappe.test_runner import make_test_records from erpnext.accounts.party import get_due_date @@ -152,6 +153,40 @@ class TestSupplier(FrappeTestCase): # Rollback address.delete() + def test_serach_fields_for_supplier(self): + from erpnext.controllers.queries import supplier_query + + supplier_name = create_supplier(supplier_name="Test Supplier 1").name + + make_property_setter( + "Supplier", None, "search_fields", "supplier_group", "Data", for_doctype="Doctype" + ) + + data = supplier_query( + "Supplier", supplier_name, "name", 0, 20, filters={"name": supplier_name}, as_dict=True + ) + + self.assertEqual(data[0].name, supplier_name) + self.assertEqual(data[0].supplier_group, "Services") + self.assertTrue("supplier_type" not in data[0]) + + make_property_setter( + "Supplier", + None, + "search_fields", + "supplier_group, supplier_type", + "Data", + for_doctype="Doctype", + ) + data = supplier_query( + "Supplier", supplier_name, "name", 0, 20, filters={"name": supplier_name}, as_dict=True + ) + + self.assertEqual(data[0].name, supplier_name) + self.assertEqual(data[0].supplier_group, "Services") + self.assertEqual(data[0].supplier_type, "Company") + self.assertTrue("supplier_type" in data[0]) + def create_supplier(**args): args = frappe._dict(args) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 8eae0a0702..3bdc017068 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -78,18 +78,16 @@ def lead_query(doctype, txt, searchfield, start, page_len, filters): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def customer_query(doctype, txt, searchfield, start, page_len, filters): +def customer_query(doctype, txt, searchfield, start, page_len, filters, as_dict=False): doctype = "Customer" conditions = [] cust_master_name = frappe.defaults.get_user_default("cust_master_name") - if cust_master_name == "Customer Name": - fields = ["name", "customer_group", "territory"] - else: - fields = ["name", "customer_name", "customer_group", "territory"] + fields = ["name"] + if cust_master_name != "Customer Name": + fields = ["customer_name"] fields = get_fields(doctype, fields) - searchfields = frappe.get_meta(doctype).get_search_fields() searchfields = " or ".join(field + " like %(txt)s" for field in searchfields) @@ -112,20 +110,20 @@ def customer_query(doctype, txt, searchfield, start, page_len, filters): } ), {"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len}, + as_dict=as_dict, ) # searches for supplier @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def supplier_query(doctype, txt, searchfield, start, page_len, filters): +def supplier_query(doctype, txt, searchfield, start, page_len, filters, as_dict=False): doctype = "Supplier" supp_master_name = frappe.defaults.get_user_default("supp_master_name") - if supp_master_name == "Supplier Name": - fields = ["name", "supplier_group"] - else: - fields = ["name", "supplier_name", "supplier_group"] + fields = ["name"] + if supp_master_name != "Supplier Name": + fields = ["supplier_name"] fields = get_fields(doctype, fields) @@ -145,6 +143,7 @@ def supplier_query(doctype, txt, searchfield, start, page_len, filters): **{"field": ", ".join(fields), "key": searchfield, "mcond": get_match_cond(doctype)} ), {"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len}, + as_dict=as_dict, ) diff --git a/erpnext/loan_management/doctype/loan/loan.js b/erpnext/loan_management/doctype/loan/loan.js index 38328e6967..20e2b0b201 100644 --- a/erpnext/loan_management/doctype/loan/loan.js +++ b/erpnext/loan_management/doctype/loan/loan.js @@ -61,6 +61,10 @@ frappe.ui.form.on('Loan', { }, refresh: function (frm) { + if (frm.doc.repayment_schedule_type == "Pro-rated calendar months") { + frm.set_df_property("repayment_start_date", "label", "Interest Calculation Start Date"); + } + if (frm.doc.docstatus == 1) { if (["Disbursed", "Partially Disbursed"].includes(frm.doc.status) && (!frm.doc.repay_from_salary)) { frm.add_custom_button(__('Request Loan Closure'), function() { @@ -103,6 +107,14 @@ frappe.ui.form.on('Loan', { frm.trigger("toggle_fields"); }, + repayment_schedule_type: function(frm) { + if (frm.doc.repayment_schedule_type == "Pro-rated calendar months") { + frm.set_df_property("repayment_start_date", "label", "Interest Calculation Start Date"); + } else { + frm.set_df_property("repayment_start_date", "label", "Repayment Start Date"); + } + }, + loan_type: function(frm) { frm.toggle_reqd("repayment_method", frm.doc.is_term_loan); frm.toggle_display("repayment_method", frm.doc.is_term_loan); diff --git a/erpnext/loan_management/doctype/loan/loan.json b/erpnext/loan_management/doctype/loan/loan.json index 47488f43ce..dc8b03e89d 100644 --- a/erpnext/loan_management/doctype/loan/loan.json +++ b/erpnext/loan_management/doctype/loan/loan.json @@ -18,6 +18,7 @@ "status", "section_break_8", "loan_type", + "repayment_schedule_type", "loan_amount", "rate_of_interest", "is_secured_loan", @@ -158,7 +159,8 @@ "depends_on": "is_term_loan", "fieldname": "repayment_start_date", "fieldtype": "Date", - "label": "Repayment Start Date" + "label": "Repayment Start Date", + "mandatory_depends_on": "is_term_loan" }, { "fieldname": "column_break_11", @@ -402,12 +404,20 @@ "fieldname": "is_npa", "fieldtype": "Check", "label": "Is NPA" + }, + { + "depends_on": "is_term_loan", + "fetch_from": "loan_type.repayment_schedule_type", + "fieldname": "repayment_schedule_type", + "fieldtype": "Data", + "label": "Repayment Schedule Type", + "read_only": 1 } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-07-12 11:50:31.957360", + "modified": "2022-09-30 10:36:47.902903", "modified_by": "Administrator", "module": "Loan Management", "name": "Loan", diff --git a/erpnext/loan_management/doctype/loan/loan.py b/erpnext/loan_management/doctype/loan/loan.py index d84eef6d8c..0c9c97f60f 100644 --- a/erpnext/loan_management/doctype/loan/loan.py +++ b/erpnext/loan_management/doctype/loan/loan.py @@ -7,7 +7,16 @@ import math import frappe from frappe import _ -from frappe.utils import add_months, flt, get_last_day, getdate, now_datetime, nowdate +from frappe.utils import ( + add_days, + add_months, + date_diff, + flt, + get_last_day, + getdate, + now_datetime, + nowdate, +) import erpnext from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry @@ -107,30 +116,81 @@ class Loan(AccountsController): if not self.repayment_start_date: frappe.throw(_("Repayment Start Date is mandatory for term loans")) + schedule_type_details = frappe.db.get_value( + "Loan Type", self.loan_type, ["repayment_schedule_type", "repayment_date_on"], as_dict=1 + ) + self.repayment_schedule = [] payment_date = self.repayment_start_date balance_amount = self.loan_amount - while balance_amount > 0: - interest_amount = flt(balance_amount * flt(self.rate_of_interest) / (12 * 100)) - principal_amount = self.monthly_repayment_amount - interest_amount - balance_amount = flt(balance_amount + interest_amount - self.monthly_repayment_amount) - if balance_amount < 0: - principal_amount += balance_amount - balance_amount = 0.0 - total_payment = principal_amount + interest_amount - self.append( - "repayment_schedule", - { - "payment_date": payment_date, - "principal_amount": principal_amount, - "interest_amount": interest_amount, - "total_payment": total_payment, - "balance_loan_amount": balance_amount, - }, + while balance_amount > 0: + interest_amount, principal_amount, balance_amount, total_payment = self.get_amounts( + payment_date, + balance_amount, + schedule_type_details.repayment_schedule_type, + schedule_type_details.repayment_date_on, ) - next_payment_date = add_single_month(payment_date) - payment_date = next_payment_date + + if schedule_type_details.repayment_schedule_type == "Pro-rated calendar months": + next_payment_date = get_last_day(payment_date) + if schedule_type_details.repayment_date_on == "Start of the next month": + next_payment_date = add_days(next_payment_date, 1) + + payment_date = next_payment_date + + self.add_repayment_schedule_row( + payment_date, principal_amount, interest_amount, total_payment, balance_amount + ) + + if ( + schedule_type_details.repayment_schedule_type == "Monthly as per repayment start date" + or schedule_type_details.repayment_date_on == "End of the current month" + ): + next_payment_date = add_single_month(payment_date) + payment_date = next_payment_date + + def get_amounts(self, payment_date, balance_amount, schedule_type, repayment_date_on): + if schedule_type == "Monthly as per repayment start date": + days = 1 + months = 12 + else: + expected_payment_date = get_last_day(payment_date) + if repayment_date_on == "Start of the next month": + expected_payment_date = add_days(expected_payment_date, 1) + + if expected_payment_date == payment_date: + # using 30 days for calculating interest for all full months + days = 30 + months = 365 + else: + days = date_diff(get_last_day(payment_date), payment_date) + months = 365 + + interest_amount = flt(balance_amount * flt(self.rate_of_interest) * days / (months * 100)) + principal_amount = self.monthly_repayment_amount - interest_amount + balance_amount = flt(balance_amount + interest_amount - self.monthly_repayment_amount) + if balance_amount < 0: + principal_amount += balance_amount + balance_amount = 0.0 + + total_payment = principal_amount + interest_amount + + return interest_amount, principal_amount, balance_amount, total_payment + + def add_repayment_schedule_row( + self, payment_date, principal_amount, interest_amount, total_payment, balance_loan_amount + ): + self.append( + "repayment_schedule", + { + "payment_date": payment_date, + "principal_amount": principal_amount, + "interest_amount": interest_amount, + "total_payment": total_payment, + "balance_loan_amount": balance_loan_amount, + }, + ) def set_repayment_period(self): if self.repayment_method == "Repay Fixed Amount per Period": diff --git a/erpnext/loan_management/doctype/loan/test_loan.py b/erpnext/loan_management/doctype/loan/test_loan.py index da05c8e90c..388e65d9e5 100644 --- a/erpnext/loan_management/doctype/loan/test_loan.py +++ b/erpnext/loan_management/doctype/loan/test_loan.py @@ -4,7 +4,16 @@ import unittest import frappe -from frappe.utils import add_days, add_months, add_to_date, date_diff, flt, get_datetime, nowdate +from frappe.utils import ( + add_days, + add_months, + add_to_date, + date_diff, + flt, + format_date, + get_datetime, + nowdate, +) from erpnext.loan_management.doctype.loan.loan import ( make_loan_write_off, @@ -47,6 +56,51 @@ class TestLoan(unittest.TestCase): loan_account="Loan Account - _TC", interest_income_account="Interest Income Account - _TC", penalty_income_account="Penalty Income Account - _TC", + repayment_schedule_type="Monthly as per repayment start date", + ) + + create_loan_type( + "Term Loan Type 1", + 12000, + 7.5, + is_term_loan=1, + mode_of_payment="Cash", + disbursement_account="Disbursement Account - _TC", + payment_account="Payment Account - _TC", + loan_account="Loan Account - _TC", + interest_income_account="Interest Income Account - _TC", + penalty_income_account="Penalty Income Account - _TC", + repayment_schedule_type="Monthly as per repayment start date", + ) + + create_loan_type( + "Term Loan Type 2", + 12000, + 7.5, + is_term_loan=1, + mode_of_payment="Cash", + disbursement_account="Disbursement Account - _TC", + payment_account="Payment Account - _TC", + loan_account="Loan Account - _TC", + interest_income_account="Interest Income Account - _TC", + penalty_income_account="Penalty Income Account - _TC", + repayment_schedule_type="Pro-rated calendar months", + repayment_date_on="Start of the next month", + ) + + create_loan_type( + "Term Loan Type 3", + 12000, + 7.5, + is_term_loan=1, + mode_of_payment="Cash", + disbursement_account="Disbursement Account - _TC", + payment_account="Payment Account - _TC", + loan_account="Loan Account - _TC", + interest_income_account="Interest Income Account - _TC", + penalty_income_account="Penalty Income Account - _TC", + repayment_schedule_type="Pro-rated calendar months", + repayment_date_on="End of the current month", ) create_loan_type( @@ -62,6 +116,7 @@ class TestLoan(unittest.TestCase): "Loan Account - _TC", "Interest Income Account - _TC", "Penalty Income Account - _TC", + repayment_schedule_type="Monthly as per repayment start date", ) create_loan_type( @@ -902,6 +957,69 @@ class TestLoan(unittest.TestCase): amounts = calculate_amounts(loan.name, add_days(last_date, 5)) self.assertEqual(flt(amounts["pending_principal_amount"], 0), 0) + def test_term_loan_schedule_types(self): + loan = create_loan( + self.applicant1, + "Term Loan Type 1", + 12000, + "Repay Over Number of Periods", + 12, + repayment_start_date="2022-10-17", + ) + + # Check for first, second and last installment date + self.assertEqual( + format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "17-10-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "17-11-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "17-09-2023" + ) + + loan.loan_type = "Term Loan Type 2" + loan.save() + + # Check for first, second and last installment date + self.assertEqual( + format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "01-11-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "01-12-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "01-10-2023" + ) + + loan.loan_type = "Term Loan Type 3" + loan.save() + + # Check for first, second and last installment date + self.assertEqual( + format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "31-10-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "30-11-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "30-09-2023" + ) + + loan.repayment_method = "Repay Fixed Amount per Period" + loan.monthly_repayment_amount = 1042 + loan.save() + + self.assertEqual( + format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "31-10-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "30-11-2022" + ) + self.assertEqual( + format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "30-09-2023" + ) + def create_loan_scenario_for_penalty(doc): pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}] @@ -1033,6 +1151,8 @@ def create_loan_type( penalty_income_account=None, repayment_method=None, repayment_periods=None, + repayment_schedule_type=None, + repayment_date_on=None, ): if not frappe.db.exists("Loan Type", loan_name): @@ -1042,6 +1162,7 @@ def create_loan_type( "company": "_Test Company", "loan_name": loan_name, "is_term_loan": is_term_loan, + "repayment_schedule_type": "Monthly as per repayment start date", "maximum_loan_amount": maximum_loan_amount, "rate_of_interest": rate_of_interest, "penalty_interest_rate": penalty_interest_rate, @@ -1056,8 +1177,14 @@ def create_loan_type( "repayment_periods": repayment_periods, "write_off_amount": 100, } - ).insert() + ) + if loan_type.is_term_loan: + loan_type.repayment_schedule_type = repayment_schedule_type + if loan_type.repayment_schedule_type != "Monthly as per repayment start date": + loan_type.repayment_date_on = repayment_date_on + + loan_type.insert() loan_type.submit() diff --git a/erpnext/loan_management/doctype/loan_type/loan_type.json b/erpnext/loan_management/doctype/loan_type/loan_type.json index 00337e4b4c..5cc9464585 100644 --- a/erpnext/loan_management/doctype/loan_type/loan_type.json +++ b/erpnext/loan_management/doctype/loan_type/loan_type.json @@ -16,6 +16,8 @@ "company", "is_term_loan", "disabled", + "repayment_schedule_type", + "repayment_date_on", "description", "account_details_section", "mode_of_payment", @@ -157,12 +159,30 @@ "label": "Disbursement Account", "options": "Account", "reqd": 1 + }, + { + "depends_on": "is_term_loan", + "description": "The schedule type that will be used for generating the term loan schedules (will affect the payment date and monthly repayment amount)", + "fieldname": "repayment_schedule_type", + "fieldtype": "Select", + "label": "Repayment Schedule Type", + "mandatory_depends_on": "is_term_loan", + "options": "\nMonthly as per repayment start date\nPro-rated calendar months" + }, + { + "depends_on": "eval:doc.repayment_schedule_type == \"Pro-rated calendar months\"", + "description": "Select whether the repayment date should be the end of the current month or start of the upcoming month", + "fieldname": "repayment_date_on", + "fieldtype": "Select", + "label": "Repayment Date On", + "mandatory_depends_on": "eval:doc.repayment_schedule_type == \"Pro-rated calendar months\"", + "options": "\nStart of the next month\nEnd of the current month" } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-01-25 16:23:57.009349", + "modified": "2022-10-22 17:43:03.954201", "modified_by": "Administrator", "module": "Loan Management", "name": "Loan Type", diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index ff84991c36..580838e215 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -385,6 +385,7 @@ class BOM(WebsiteGenerator): if self.docstatus == 2: return + self.flags.cost_updated = False existing_bom_cost = self.total_cost if self.docstatus == 1: @@ -407,7 +408,11 @@ class BOM(WebsiteGenerator): frappe.get_doc("BOM", bom).update_cost(from_child_bom=True) if not from_child_bom: - frappe.msgprint(_("Cost Updated"), alert=True) + msg = "Cost Updated" + if not self.flags.cost_updated: + msg = "No changes in cost found" + + frappe.msgprint(_(msg), alert=True) def update_parent_cost(self): if self.total_cost: @@ -593,11 +598,16 @@ class BOM(WebsiteGenerator): # not via doc event, table is not regenerated and needs updation self.calculate_exploded_cost() + old_cost = self.total_cost + self.total_cost = self.operating_cost + self.raw_material_cost - self.scrap_material_cost self.base_total_cost = ( self.base_operating_cost + self.base_raw_material_cost - self.base_scrap_material_cost ) + if self.total_cost != old_cost: + self.flags.cost_updated = True + def calculate_op_cost(self, update_hour_rate=False): """Update workstation rate and calculates totals""" self.operating_cost = 0 diff --git a/erpnext/manufacturing/doctype/bom/test_bom.py b/erpnext/manufacturing/doctype/bom/test_bom.py index 27f3cc905b..e34ac12cd2 100644 --- a/erpnext/manufacturing/doctype/bom/test_bom.py +++ b/erpnext/manufacturing/doctype/bom/test_bom.py @@ -9,7 +9,10 @@ import frappe from frappe.tests.utils import FrappeTestCase from frappe.utils import cstr, flt -from erpnext.controllers.tests.test_subcontracting_controller import set_backflush_based_on +from erpnext.controllers.tests.test_subcontracting_controller import ( + make_stock_in_entry, + set_backflush_based_on, +) from erpnext.manufacturing.doctype.bom.bom import BOMRecursionError, item_query, make_variant_bom from erpnext.manufacturing.doctype.bom_update_log.test_bom_update_log import ( update_cost_in_all_boms_in_test, @@ -639,6 +642,28 @@ class TestBOM(FrappeTestCase): bom.submit() self.assertEqual(bom.exploded_items[0].rate, bom.items[0].base_rate) + def test_bom_cost_update_flag(self): + rm_item = make_item( + properties={"is_stock_item": 1, "valuation_rate": 99, "last_purchase_rate": 89} + ).name + fg_item = make_item(properties={"is_stock_item": 1}).name + + from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom + + bom = make_bom(item=fg_item, raw_materials=[rm_item]) + + create_stock_reconciliation( + item_code=rm_item, warehouse="_Test Warehouse - _TC", qty=100, rate=600 + ) + + bom.load_from_db() + bom.update_cost() + self.assertTrue(bom.flags.cost_updated) + + bom.load_from_db() + bom.update_cost() + self.assertFalse(bom.flags.cost_updated) + def get_default_bom(item_code="_Test FG Item 2"): return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1}) diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index ed45106634..fb94e8aa99 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -133,7 +133,7 @@ class JobCard(Document): (%(from_time)s <= jctl.from_time and %(to_time)s >= jctl.to_time) {0} ) and jctl.name != %(name)s and jc.name != %(parent)s and jc.docstatus < 2 {1} - order by jctl.to_time desc limit 1""".format( + order by jctl.to_time desc""".format( extra_cond, validate_overlap_for ), { diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py index ac7114138c..4d2dab73e3 100644 --- a/erpnext/manufacturing/doctype/job_card/test_job_card.py +++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py @@ -136,6 +136,45 @@ class TestJobCard(FrappeTestCase): ) self.assertRaises(OverlapError, jc2.save) + def test_job_card_overlap_with_capacity(self): + wo2 = make_wo_order_test_record(item="_Test FG Item 2", qty=2) + + workstation = make_workstation(workstation_name=random_string(5)).name + frappe.db.set_value("Workstation", workstation, "production_capacity", 1) + + jc1 = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name}) + jc2 = frappe.get_last_doc("Job Card", {"work_order": wo2.name}) + + jc1.workstation = workstation + jc1.append( + "time_logs", + {"from_time": "2021-01-01 00:00:00", "to_time": "2021-01-01 08:00:00", "completed_qty": 1}, + ) + jc1.save() + + jc2.workstation = workstation + + # add a new entry in same time slice + jc2.append( + "time_logs", + {"from_time": "2021-01-01 00:01:00", "to_time": "2021-01-01 06:00:00", "completed_qty": 1}, + ) + self.assertRaises(OverlapError, jc2.save) + + frappe.db.set_value("Workstation", workstation, "production_capacity", 2) + jc2.load_from_db() + + jc2.workstation = workstation + + # add a new entry in same time slice + jc2.append( + "time_logs", + {"from_time": "2021-01-01 00:01:00", "to_time": "2021-01-01 06:00:00", "completed_qty": 1}, + ) + + jc2.save() + self.assertTrue(jc2.name) + def test_job_card_multiple_materials_transfer(self): "Test transferring RMs separately against Job Card with multiple RMs." self.transfer_material_against = "Job Card" diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index 4bb4dcc648..000ee07f2c 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -27,6 +27,7 @@ from erpnext.manufacturing.doctype.bom.bom import get_children as get_bom_childr from erpnext.manufacturing.doctype.bom.bom import validate_bom_no from erpnext.manufacturing.doctype.work_order.work_order import get_item_details from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults +from erpnext.stock.get_item_details import get_conversion_factor from erpnext.utilities.transaction_base import validate_uom_is_integer @@ -648,13 +649,23 @@ class ProductionPlan(Document): else: material_request = material_request_map[key] + conversion_factor = 1.0 + if ( + material_request_type == "Purchase" + and item_doc.purchase_uom + and item_doc.purchase_uom != item_doc.stock_uom + ): + conversion_factor = ( + get_conversion_factor(item_doc.name, item_doc.purchase_uom).get("conversion_factor") or 1.0 + ) + # add item material_request.append( "items", { "item_code": item.item_code, "from_warehouse": item.from_warehouse, - "qty": item.quantity, + "qty": item.quantity / conversion_factor, "schedule_date": schedule_date, "warehouse": item.warehouse, "sales_order": item.sales_order, diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py index 60e6398072..c4ab0f886f 100644 --- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py @@ -806,6 +806,35 @@ class TestProductionPlan(FrappeTestCase): self.assertEqual(pln.status, "Completed") self.assertEqual(pln.po_items[0].produced_qty, 5) + def test_material_request_item_for_purchase_uom(self): + from erpnext.stock.doctype.item.test_item import make_item + + fg_item = make_item(properties={"is_stock_item": 1, "stock_uom": "_Test UOM 1"}).name + bom_item = make_item( + properties={"is_stock_item": 1, "stock_uom": "_Test UOM 1", "purchase_uom": "Nos"} + ).name + + if not frappe.db.exists("UOM Conversion Detail", {"parent": bom_item, "uom": "Nos"}): + doc = frappe.get_doc("Item", bom_item) + doc.append("uoms", {"uom": "Nos", "conversion_factor": 10}) + doc.save() + + make_bom(item=fg_item, raw_materials=[bom_item], source_warehouse="_Test Warehouse - _TC") + + pln = create_production_plan( + item_code=fg_item, planned_qty=10, ignore_existing_ordered_qty=1, stock_uom="_Test UOM 1" + ) + + pln.make_material_request() + for row in frappe.get_all( + "Material Request Item", + filters={"production_plan": pln.name}, + fields=["item_code", "uom", "qty"], + ): + self.assertEqual(row.item_code, bom_item) + self.assertEqual(row.uom, "Nos") + self.assertEqual(row.qty, 1) + def create_production_plan(**args): """ diff --git a/erpnext/patches.txt b/erpnext/patches.txt index fc63f124e1..6a8c21f654 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -315,4 +315,5 @@ erpnext.patches.v14_0.fix_crm_no_of_employees erpnext.patches.v14_0.create_accounting_dimensions_in_subcontracting_doctypes erpnext.patches.v14_0.fix_subcontracting_receipt_gl_entries erpnext.patches.v14_0.migrate_remarks_from_gl_to_payment_ledger +erpnext.patches.v13_0.update_schedule_type_in_loans erpnext.patches.v14_0.create_accounting_dimensions_for_asset_capitalization diff --git a/erpnext/patches/v13_0/update_schedule_type_in_loans.py b/erpnext/patches/v13_0/update_schedule_type_in_loans.py new file mode 100644 index 0000000000..e5b5f64360 --- /dev/null +++ b/erpnext/patches/v13_0/update_schedule_type_in_loans.py @@ -0,0 +1,14 @@ +import frappe + + +def execute(): + loan = frappe.qb.DocType("Loan") + loan_type = frappe.qb.DocType("Loan Type") + + frappe.qb.update(loan_type).set( + loan_type.repayment_schedule_type, "Monthly as per repayment start date" + ).where(loan_type.is_term_loan == 1).run() + + frappe.qb.update(loan).set( + loan.repayment_schedule_type, "Monthly as per repayment start date" + ).where(loan.is_term_loan == 1).run() diff --git a/erpnext/public/js/financial_statements.js b/erpnext/public/js/financial_statements.js index 1a309ba015..b0082bdb28 100644 --- a/erpnext/public/js/financial_statements.js +++ b/erpnext/public/js/financial_statements.js @@ -28,7 +28,7 @@ erpnext.financial_statements = { }, "open_general_ledger": function(data) { if (!data.account) return; - var project = $.grep(frappe.query_report.filters, function(e){ return e.df.fieldname == 'project'; }) + let project = $.grep(frappe.query_report.filters, function(e){ return e.df.fieldname == 'project'; }); frappe.route_options = { "account": data.account, @@ -37,7 +37,16 @@ erpnext.financial_statements = { "to_date": data.to_date || data.year_end_date, "project": (project && project.length > 0) ? project[0].$input.val() : "" }; - frappe.set_route("query-report", "General Ledger"); + + let report = "General Ledger"; + + if (["Payable", "Receivable"].includes(data.account_type)) { + report = data.account_type == "Payable" ? "Accounts Payable" : "Accounts Receivable"; + frappe.route_options["party_account"] = data.account; + frappe.route_options["report_date"] = data.year_end_date; + } + + frappe.set_route("query-report", report); }, "tree": true, "name_field": "account", diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js index 58594b0a13..644adff1e2 100644 --- a/erpnext/public/js/utils/party.js +++ b/erpnext/public/js/utils/party.js @@ -242,20 +242,29 @@ erpnext.utils.set_taxes = function(frm, triggered_from_field) { }); }; -erpnext.utils.get_contact_details = function(frm) { +erpnext.utils.get_contact_details = function (frm) { if (frm.updating_party_details) return; if (frm.doc["contact_person"]) { frappe.call({ method: "frappe.contacts.doctype.contact.contact.get_contact_details", - args: {contact: frm.doc.contact_person }, - callback: function(r) { - if (r.message) - frm.set_value(r.message); - } - }) + args: { contact: frm.doc.contact_person }, + callback: function (r) { + if (r.message) frm.set_value(r.message); + }, + }); + } else { + frm.set_value({ + contact_person: "", + contact_display: "", + contact_email: "", + contact_mobile: "", + contact_phone: "", + contact_designation: "", + contact_department: "", + }); } -} +}; erpnext.utils.validate_mandatory = function(frm, label, value, trigger_on) { if (!value) { diff --git a/erpnext/selling/doctype/customer/test_customer.py b/erpnext/selling/doctype/customer/test_customer.py index 7dc3fab623..691adccd4d 100644 --- a/erpnext/selling/doctype/customer/test_customer.py +++ b/erpnext/selling/doctype/customer/test_customer.py @@ -3,6 +3,7 @@ import frappe +from frappe.custom.doctype.property_setter.property_setter import make_property_setter from frappe.test_runner import make_test_records from frappe.tests.utils import FrappeTestCase from frappe.utils import flt @@ -341,6 +342,33 @@ class TestCustomer(FrappeTestCase): due_date = get_due_date("2017-01-22", "Customer", "_Test Customer") self.assertEqual(due_date, "2017-01-22") + def test_serach_fields_for_customer(self): + from erpnext.controllers.queries import customer_query + + make_property_setter( + "Customer", None, "search_fields", "customer_group", "Data", for_doctype="Doctype" + ) + + data = customer_query( + "Customer", "_Test Customer", "", 0, 20, filters={"name": "_Test Customer"}, as_dict=True + ) + + self.assertEqual(data[0].name, "_Test Customer") + self.assertEqual(data[0].customer_group, "_Test Customer Group") + self.assertTrue("territory" not in data[0]) + + make_property_setter( + "Customer", None, "search_fields", "customer_group, territory", "Data", for_doctype="Doctype" + ) + data = customer_query( + "Customer", "_Test Customer", "", 0, 20, filters={"name": "_Test Customer"}, as_dict=True + ) + + self.assertEqual(data[0].name, "_Test Customer") + self.assertEqual(data[0].customer_group, "_Test Customer Group") + self.assertEqual(data[0].territory, "_Test Territory") + self.assertTrue("territory" in data[0]) + def get_customer_dict(customer_name): return { diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js index 70ae085051..6b42e4daea 100644 --- a/erpnext/selling/doctype/quotation/quotation.js +++ b/erpnext/selling/doctype/quotation/quotation.js @@ -84,11 +84,12 @@ erpnext.selling.QuotationController = class QuotationController extends erpnext. } } - if(doc.docstatus == 1 && !(['Lost', 'Ordered']).includes(doc.status)) { - if(!doc.valid_till || frappe.datetime.get_diff(doc.valid_till, frappe.datetime.get_today()) >= 0) { - cur_frm.add_custom_button(__('Sales Order'), - cur_frm.cscript['Make Sales Order'], __('Create')); - } + if (doc.docstatus == 1 && !["Lost", "Ordered"].includes(doc.status)) { + this.frm.add_custom_button( + __("Sales Order"), + this.frm.cscript["Make Sales Order"], + __("Create") + ); if(doc.status!=="Ordered") { this.frm.add_custom_button(__('Set as Lost'), () => { diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index 386c12b638..fb64772479 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -124,6 +124,11 @@ frappe.ui.form.on("Sales Order", { return query; }); + // On cancel and amending a sales order with advance payment, reset advance paid amount + if (frm.is_new()) { + frm.set_value("advance_paid", 0) + } + frm.ignore_doctypes_on_cancel_all = ['Purchase Order']; }, diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index f0e9e4b7d9..1f3419fd5d 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -627,6 +627,7 @@ def make_project(source_name, target_doc=None): "field_map": { "name": "sales_order", "base_grand_total": "estimated_costing", + "net_total": "total_sales_amount", }, }, }, diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json index 2cf836f9fc..ea0b25f41c 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -272,6 +272,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval: doc.margin_type || doc.discount_amount", "fieldname": "discount_and_margin", "fieldtype": "Section Break", "label": "Discount and Margin" @@ -842,7 +843,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-09-06 13:24:18.065312", + "modified": "2022-10-26 16:05:02.712705", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order Item", diff --git a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js index c068ae3b5a..991ac719cd 100644 --- a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js +++ b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js @@ -74,7 +74,35 @@ function get_filters() { ] } } - } + }, + { + "fieldname":"from_due_date", + "label": __("From Due Date"), + "fieldtype": "Date", + }, + { + "fieldname":"to_due_date", + "label": __("To Due Date"), + "fieldtype": "Date", + }, + { + "fieldname":"status", + "label": __("Status"), + "fieldtype": "MultiSelectList", + "width": 100, + get_data: function(txt) { + let status = ["Overdue", "Unpaid", "Completed", "Partly Paid"] + let options = [] + for (let option of status){ + options.push({ + "value": option, + "label": __(option), + "description": "" + }) + } + return options + } + }, ] return filters; } diff --git a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py index 91f4a5e50a..8bf56865a7 100644 --- a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py +++ b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py @@ -162,6 +162,12 @@ def build_filter_criterions(filters): if filters.item: qb_criterions.append(qb.DocType("Sales Order Item").item_code == filters.item) + if filters.from_due_date: + qb_criterions.append(qb.DocType("Payment Schedule").due_date.gte(filters.from_due_date)) + + if filters.to_due_date: + qb_criterions.append(qb.DocType("Payment Schedule").due_date.lte(filters.to_due_date)) + return qb_criterions @@ -279,11 +285,19 @@ def prepare_chart(s_orders): return chart +def filter_on_calculated_status(filters, sales_orders): + if filters.status and sales_orders: + return [x for x in sales_orders if x.status in filters.status] + return sales_orders + + def execute(filters=None): columns = get_columns() sales_orders, so_invoices = get_so_with_invoices(filters) sales_orders, so_invoices = set_payment_terms_statuses(sales_orders, so_invoices, filters) + sales_orders = filter_on_calculated_status(filters, sales_orders) + prepare_chart(sales_orders) data = sales_orders diff --git a/erpnext/selling/report/payment_terms_status_for_sales_order/test_payment_terms_status_for_sales_order.py b/erpnext/selling/report/payment_terms_status_for_sales_order/test_payment_terms_status_for_sales_order.py index 9d542f5079..525ae8e7ea 100644 --- a/erpnext/selling/report/payment_terms_status_for_sales_order/test_payment_terms_status_for_sales_order.py +++ b/erpnext/selling/report/payment_terms_status_for_sales_order/test_payment_terms_status_for_sales_order.py @@ -2,7 +2,7 @@ import datetime import frappe from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days +from frappe.utils import add_days, nowdate from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order @@ -77,12 +77,14 @@ class TestPaymentTermsStatusForSalesOrder(FrappeTestCase): sinv.insert() sinv.submit() columns, data, message, chart = execute( - { - "company": "_Test Company", - "period_start_date": "2021-06-01", - "period_end_date": "2021-06-30", - "item": item.item_code, - } + frappe._dict( + { + "company": "_Test Company", + "period_start_date": "2021-06-01", + "period_end_date": "2021-06-30", + "item": item.item_code, + } + ) ) expected_value = [ @@ -167,12 +169,14 @@ class TestPaymentTermsStatusForSalesOrder(FrappeTestCase): sinv.insert() sinv.submit() columns, data, message, chart = execute( - { - "company": "_Test Company", - "period_start_date": "2021-06-01", - "period_end_date": "2021-06-30", - "item": item.item_code, - } + frappe._dict( + { + "company": "_Test Company", + "period_start_date": "2021-06-01", + "period_end_date": "2021-06-30", + "item": item.item_code, + } + ) ) # report defaults to company currency. @@ -338,3 +342,60 @@ class TestPaymentTermsStatusForSalesOrder(FrappeTestCase): with self.subTest(filters=filters): columns, data, message, chart = execute(filters) self.assertEqual(data, expected_values_for_group_filters[idx]) + + def test_04_due_date_filter(self): + self.create_payment_terms_template() + item = create_item(item_code="_Test Excavator 1", is_stock_item=0) + transaction_date = nowdate() + so = make_sales_order( + transaction_date=add_days(transaction_date, -30), + delivery_date=add_days(transaction_date, -15), + item=item.item_code, + qty=10, + rate=100000, + do_not_save=True, + ) + so.po_no = "" + so.taxes_and_charges = "" + so.taxes = "" + so.payment_terms_template = self.template.name + so.save() + so.submit() + + # make invoice with 60% of the total sales order value + sinv = make_sales_invoice(so.name) + sinv.taxes_and_charges = "" + sinv.taxes = "" + sinv.items[0].qty = 6 + sinv.insert() + sinv.submit() + columns, data, message, chart = execute( + frappe._dict( + { + "company": "_Test Company", + "item": item.item_code, + "from_due_date": add_days(transaction_date, -30), + "to_due_date": add_days(transaction_date, -15), + } + ) + ) + + expected_value = [ + { + "name": so.name, + "customer": so.customer, + "submitted": datetime.date.fromisoformat(add_days(transaction_date, -30)), + "status": "Completed", + "payment_term": None, + "description": "_Test 50-50", + "due_date": datetime.date.fromisoformat(add_days(transaction_date, -15)), + "invoice_portion": 50.0, + "currency": "INR", + "base_payment_amount": 500000.0, + "paid_amount": 500000.0, + "invoices": "," + sinv.name, + }, + ] + # Only the first term should be pulled + self.assertEqual(len(data), 1) + self.assertEqual(data, expected_value) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 36d5a6ce0e..9dd28dc60b 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -842,6 +842,9 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): update_address( target_doc, "shipping_address", "shipping_address_display", source_doc.customer_address ) + update_address( + target_doc, "billing_address", "billing_address_display", source_doc.customer_address + ) update_taxes( target_doc, diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json index 0a5cbabab0..77c3253432 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -261,6 +261,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval: doc.margin_type || doc.discount_amount", "fieldname": "discount_and_margin", "fieldtype": "Section Break", "label": "Discount and Margin" @@ -814,7 +815,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-10-12 03:36:05.344847", + "modified": "2022-10-26 16:05:17.720768", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note Item", diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py index 9e8c10b394..7b99b0097b 100644 --- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py +++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py @@ -121,18 +121,24 @@ class InventoryDimension(Document): if self.apply_to_all_doctypes: for doctype in get_inventory_documents(): - custom_fields.setdefault(doctype[0], dimension_fields) - else: + if not field_exists(doctype[0], self.source_fieldname): + custom_fields.setdefault(doctype[0], dimension_fields) + elif not field_exists(self.document_type, self.source_fieldname): custom_fields.setdefault(self.document_type, dimension_fields) if not frappe.db.get_value( "Custom Field", {"dt": "Stock Ledger Entry", "fieldname": self.target_fieldname} - ): + ) and not field_exists("Stock Ledger Entry", self.target_fieldname): dimension_field = dimension_fields[1] dimension_field["fieldname"] = self.target_fieldname custom_fields["Stock Ledger Entry"] = dimension_field - create_custom_fields(custom_fields) + if custom_fields: + create_custom_fields(custom_fields) + + +def field_exists(doctype, fieldname) -> str or None: + return frappe.db.get_value("DocField", {"parent": doctype, "fieldname": fieldname}, "name") @frappe.whitelist() diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py index 19ddc449f0..52b3deb3f0 100644 --- a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py +++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py @@ -191,6 +191,21 @@ class TestInventoryDimension(FrappeTestCase): self.assertEqual(sle_rack, "Rack 1") + def test_check_standard_dimensions(self): + create_inventory_dimension( + reference_document="Project", + type_of_transaction="Outward", + dimension_name="Project", + apply_to_all_doctypes=0, + document_type="Stock Ledger Entry", + ) + + self.assertFalse( + frappe.db.get_value( + "Custom Field", {"fieldname": "project", "dt": "Stock Ledger Entry"}, "name" + ) + ) + def prepare_test_data(): if not frappe.db.exists("DocType", "Shelf"): diff --git a/erpnext/stock/doctype/material_request/material_request_dashboard.py b/erpnext/stock/doctype/material_request/material_request_dashboard.py index b073e6a22e..691a8b39b1 100644 --- a/erpnext/stock/doctype/material_request/material_request_dashboard.py +++ b/erpnext/stock/doctype/material_request/material_request_dashboard.py @@ -4,10 +4,13 @@ from frappe import _ def get_data(): return { "fieldname": "material_request", + "internal_links": { + "Sales Order": ["items", "sales_order"], + }, "transactions": [ { "label": _("Reference"), - "items": ["Request for Quotation", "Supplier Quotation", "Purchase Order"], + "items": ["Sales Order", "Request for Quotation", "Supplier Quotation", "Purchase Order"], }, {"label": _("Stock"), "items": ["Stock Entry", "Purchase Receipt", "Pick List"]}, {"label": _("Manufacturing"), "items": ["Work Order"]}, diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt_dashboard.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt_dashboard.py index 06ba936556..b3ae7b58b4 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt_dashboard.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt_dashboard.py @@ -12,13 +12,17 @@ def get_data(): "Purchase Receipt": "return_against", }, "internal_links": { + "Material Request": ["items", "material_request"], "Purchase Order": ["items", "purchase_order"], "Project": ["items", "project"], "Quality Inspection": ["items", "quality_inspection"], }, "transactions": [ {"label": _("Related"), "items": ["Purchase Invoice", "Landed Cost Voucher", "Asset"]}, - {"label": _("Reference"), "items": ["Purchase Order", "Quality Inspection", "Project"]}, + { + "label": _("Reference"), + "items": ["Material Request", "Purchase Order", "Quality Inspection", "Project"], + }, {"label": _("Returns"), "items": ["Purchase Receipt"]}, {"label": _("Subscription"), "items": ["Auto Repeat"]}, ], diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json index 772736e0ad..474ee92e26 100644 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -919,6 +919,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "eval: doc.margin_type || doc.discount_amount", "fieldname": "discount_and_margin_section", "fieldtype": "Section Break", "label": "Discount and Margin" @@ -1000,7 +1001,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-10-12 03:37:59.516609", + "modified": "2022-10-26 16:06:02.524435", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt Item", diff --git a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py index f308e9e41f..a6fc049cbd 100644 --- a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +++ b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py @@ -3,6 +3,7 @@ import frappe from frappe import _ +from frappe.query_builder.functions import Abs, Sum from frappe.utils import flt, getdate @@ -11,8 +12,6 @@ def execute(filters=None): filters = {} float_precision = frappe.db.get_default("float_precision") - condition = get_condition(filters) - avg_daily_outgoing = 0 diff = ((getdate(filters.get("to_date")) - getdate(filters.get("from_date"))).days) + 1 if diff <= 0: @@ -20,8 +19,8 @@ def execute(filters=None): columns = get_columns() items = get_item_info(filters) - consumed_item_map = get_consumed_items(condition) - delivered_item_map = get_delivered_items(condition) + consumed_item_map = get_consumed_items(filters) + delivered_item_map = get_delivered_items(filters) data = [] for item in items: @@ -71,76 +70,86 @@ def get_columns(): def get_item_info(filters): from erpnext.stock.report.stock_ledger.stock_ledger import get_item_group_condition - conditions = [get_item_group_condition(filters.get("item_group"))] - if filters.get("brand"): - conditions.append("item.brand=%(brand)s") - conditions.append("is_stock_item = 1") - - return frappe.db.sql( - """select name, item_name, description, brand, item_group, - safety_stock, lead_time_days from `tabItem` item where {}""".format( - " and ".join(conditions) - ), - filters, - as_dict=1, + item = frappe.qb.DocType("Item") + query = ( + frappe.qb.from_(item) + .select( + item.name, + item.item_name, + item.description, + item.brand, + item.item_group, + item.safety_stock, + item.lead_time_days, + ) + .where(item.is_stock_item == 1) ) + if brand := filters.get("brand"): + query = query.where(item.brand == brand) -def get_consumed_items(condition): + if conditions := get_item_group_condition(filters.get("item_group"), item): + query = query.where(conditions) + + return query.run(as_dict=True) + + +def get_consumed_items(filters): purpose_to_exclude = [ "Material Transfer for Manufacture", "Material Transfer", "Send to Subcontractor", ] - condition += """ - and ( - purpose is NULL - or purpose not in ({}) + se = frappe.qb.DocType("Stock Entry") + sle = frappe.qb.DocType("Stock Ledger Entry") + query = ( + frappe.qb.from_(sle) + .left_join(se) + .on(sle.voucher_no == se.name) + .select(sle.item_code, Abs(Sum(sle.actual_qty)).as_("consumed_qty")) + .where( + (sle.actual_qty < 0) + & (sle.is_cancelled == 0) + & (sle.voucher_type.notin(["Delivery Note", "Sales Invoice"])) + & ((se.purpose.isnull()) | (se.purpose.notin(purpose_to_exclude))) ) - """.format( - ", ".join(f"'{p}'" for p in purpose_to_exclude) + .groupby(sle.item_code) ) - condition = condition.replace("posting_date", "sle.posting_date") + query = get_filtered_query(filters, sle, query) - consumed_items = frappe.db.sql( - """ - select item_code, abs(sum(actual_qty)) as consumed_qty - from `tabStock Ledger Entry` as sle left join `tabStock Entry` as se - on sle.voucher_no = se.name - where - actual_qty < 0 - and is_cancelled = 0 - and voucher_type not in ('Delivery Note', 'Sales Invoice') - %s - group by item_code""" - % condition, - as_dict=1, - ) + consumed_items = query.run(as_dict=True) consumed_items_map = {item.item_code: item.consumed_qty for item in consumed_items} return consumed_items_map -def get_delivered_items(condition): - dn_items = frappe.db.sql( - """select dn_item.item_code, sum(dn_item.stock_qty) as dn_qty - from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item - where dn.name = dn_item.parent and dn.docstatus = 1 %s - group by dn_item.item_code""" - % (condition), - as_dict=1, +def get_delivered_items(filters): + parent = frappe.qb.DocType("Delivery Note") + child = frappe.qb.DocType("Delivery Note Item") + query = ( + frappe.qb.from_(parent) + .from_(child) + .select(child.item_code, Sum(child.stock_qty).as_("dn_qty")) + .where((parent.name == child.parent) & (parent.docstatus == 1)) + .groupby(child.item_code) ) + query = get_filtered_query(filters, parent, query) - si_items = frappe.db.sql( - """select si_item.item_code, sum(si_item.stock_qty) as si_qty - from `tabSales Invoice` si, `tabSales Invoice Item` si_item - where si.name = si_item.parent and si.docstatus = 1 and - si.update_stock = 1 %s - group by si_item.item_code""" - % (condition), - as_dict=1, + dn_items = query.run(as_dict=True) + + parent = frappe.qb.DocType("Sales Invoice") + child = frappe.qb.DocType("Sales Invoice Item") + query = ( + frappe.qb.from_(parent) + .from_(child) + .select(child.item_code, Sum(child.stock_qty).as_("si_qty")) + .where((parent.name == child.parent) & (parent.docstatus == 1) & (parent.update_stock == 1)) + .groupby(child.item_code) ) + query = get_filtered_query(filters, parent, query) + + si_items = query.run(as_dict=True) dn_item_map = {} for item in dn_items: @@ -152,13 +161,10 @@ def get_delivered_items(condition): return dn_item_map -def get_condition(filters): - conditions = "" +def get_filtered_query(filters, table, query): if filters.get("from_date") and filters.get("to_date"): - conditions += " and posting_date between '%s' and '%s'" % ( - filters["from_date"], - filters["to_date"], - ) + query = query.where(table.posting_date.between(filters["from_date"], filters["to_date"])) else: - frappe.throw(_("From and To dates required")) - return conditions + frappe.throw(_("From and To dates are required")) + + return query diff --git a/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py b/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py index 854875a053..9e75201bd1 100644 --- a/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py +++ b/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py @@ -4,7 +4,9 @@ import frappe from frappe import _ +from frappe.query_builder.functions import IfNull from frappe.utils import flt +from pypika.terms import ExistsCriterion from erpnext.stock.report.stock_ledger.stock_ledger import get_item_group_condition @@ -123,43 +125,65 @@ def get_items(filters): pb_details = frappe._dict() item_details = frappe._dict() - conditions = get_parent_item_conditions(filters) - parent_item_details = frappe.db.sql( - """ - select item.name as item_code, item.item_name, pb.description, item.item_group, item.brand, item.stock_uom - from `tabItem` item - inner join `tabProduct Bundle` pb on pb.new_item_code = item.name - where ifnull(item.disabled, 0) = 0 {0} - """.format( - conditions - ), - filters, - as_dict=1, - ) # nosec + item = frappe.qb.DocType("Item") + pb = frappe.qb.DocType("Product Bundle") + + query = ( + frappe.qb.from_(item) + .inner_join(pb) + .on(pb.new_item_code == item.name) + .select( + item.name.as_("item_code"), + item.item_name, + pb.description, + item.item_group, + item.brand, + item.stock_uom, + ) + .where(IfNull(item.disabled, 0) == 0) + ) + + if item_code := filters.get("item_code"): + query = query.where(item.item_code == item_code) + else: + if brand := filters.get("brand"): + query = query.where(item.brand == brand) + if item_group := filters.get("item_group"): + if conditions := get_item_group_condition(item_group, item): + query = query.where(conditions) + + parent_item_details = query.run(as_dict=True) parent_items = [] for d in parent_item_details: parent_items.append(d.item_code) item_details[d.item_code] = d + child_item_details = [] if parent_items: - child_item_details = frappe.db.sql( - """ - select - pb.new_item_code as parent_item, pbi.item_code, item.item_name, pbi.description, item.item_group, item.brand, - item.stock_uom, pbi.uom, pbi.qty - from `tabProduct Bundle Item` pbi - inner join `tabProduct Bundle` pb on pb.name = pbi.parent - inner join `tabItem` item on item.name = pbi.item_code - where pb.new_item_code in ({0}) - """.format( - ", ".join(["%s"] * len(parent_items)) - ), - parent_items, - as_dict=1, - ) # nosec - else: - child_item_details = [] + item = frappe.qb.DocType("Item") + pb = frappe.qb.DocType("Product Bundle") + pbi = frappe.qb.DocType("Product Bundle Item") + + child_item_details = ( + frappe.qb.from_(pbi) + .inner_join(pb) + .on(pb.name == pbi.parent) + .inner_join(item) + .on(item.name == pbi.item_code) + .select( + pb.new_item_code.as_("parent_item"), + pbi.item_code, + item.item_name, + pbi.description, + item.item_group, + item.brand, + item.stock_uom, + pbi.uom, + pbi.qty, + ) + .where(pb.new_item_code.isin(parent_items)) + ).run(as_dict=1) child_items = set() for d in child_item_details: @@ -184,58 +208,42 @@ def get_stock_ledger_entries(filters, items): if not items: return [] - item_conditions_sql = " and sle.item_code in ({})".format( - ", ".join(frappe.db.escape(i) for i in items) + sle = frappe.qb.DocType("Stock Ledger Entry") + sle2 = frappe.qb.DocType("Stock Ledger Entry") + + query = ( + frappe.qb.from_(sle) + .force_index("posting_sort_index") + .left_join(sle2) + .on( + (sle.item_code == sle2.item_code) + & (sle.warehouse == sle2.warehouse) + & (sle.posting_date < sle2.posting_date) + & (sle.posting_time < sle2.posting_time) + & (sle.name < sle2.name) + ) + .select(sle.item_code, sle.warehouse, sle.qty_after_transaction, sle.company) + .where((sle2.name.isnull()) & (sle.docstatus < 2) & (sle.item_code.isin(items))) ) - conditions = get_sle_conditions(filters) - - return frappe.db.sql( - """ - select - sle.item_code, sle.warehouse, sle.qty_after_transaction, sle.company - from - `tabStock Ledger Entry` sle force index (posting_sort_index) - left join `tabStock Ledger Entry` sle2 on - sle.item_code = sle2.item_code and sle.warehouse = sle2.warehouse - and (sle.posting_date, sle.posting_time, sle.name) < (sle2.posting_date, sle2.posting_time, sle2.name) - where sle2.name is null and sle.docstatus < 2 %s %s""" - % (item_conditions_sql, conditions), - as_dict=1, - ) # nosec - - -def get_parent_item_conditions(filters): - conditions = [] - - if filters.get("item_code"): - conditions.append("item.item_code = %(item_code)s") + if date := filters.get("date"): + query = query.where(sle.posting_date <= date) else: - if filters.get("brand"): - conditions.append("item.brand=%(brand)s") - if filters.get("item_group"): - conditions.append(get_item_group_condition(filters.get("item_group"))) - - conditions = " and ".join(conditions) - return "and {0}".format(conditions) if conditions else "" - - -def get_sle_conditions(filters): - conditions = "" - if not filters.get("date"): frappe.throw(_("'Date' is required")) - conditions += " and sle.posting_date <= %s" % frappe.db.escape(filters.get("date")) - if filters.get("warehouse"): warehouse_details = frappe.db.get_value( "Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1 ) - if warehouse_details: - conditions += ( - " and exists (select name from `tabWarehouse` wh \ - where wh.lft >= %s and wh.rgt <= %s and sle.warehouse = wh.name)" - % (warehouse_details.lft, warehouse_details.rgt) - ) # nosec - return conditions + if warehouse_details: + wh = frappe.qb.DocType("Warehouse") + query = query.where( + ExistsCriterion( + frappe.qb.from_(wh) + .select(wh.name) + .where((wh.lft >= warehouse_details.lft) & (wh.rgt <= warehouse_details.rgt)) + ) + ) + + return query.run(as_dict=True) diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index a95119736a..af7f20f3cc 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -305,20 +305,25 @@ def get_inventory_dimension_fields(): def get_items(filters): + item = frappe.qb.DocType("Item") + query = frappe.qb.from_(item).select(item.name) conditions = [] - if filters.get("item_code"): - conditions.append("item.name=%(item_code)s") + + if item_code := filters.get("item_code"): + conditions.append(item.name == item_code) else: - if filters.get("brand"): - conditions.append("item.brand=%(brand)s") - if filters.get("item_group"): - conditions.append(get_item_group_condition(filters.get("item_group"))) + if brand := filters.get("brand"): + conditions.append(item.brand == brand) + if item_group := filters.get("item_group"): + if condition := get_item_group_condition(item_group, item): + conditions.append(condition) items = [] if conditions: - items = frappe.db.sql_list( - """select name from `tabItem` item where {}""".format(" and ".join(conditions)), filters - ) + for condition in conditions: + query = query.where(condition) + items = [r[0] for r in query.run()] + return items @@ -330,29 +335,22 @@ def get_item_details(items, sl_entries, include_uom): if not items: return item_details - cf_field = cf_join = "" + item = frappe.qb.DocType("Item") + query = ( + frappe.qb.from_(item) + .select(item.name, item.item_name, item.description, item.item_group, item.brand, item.stock_uom) + .where(item.name.isin(items)) + ) + if include_uom: - cf_field = ", ucd.conversion_factor" - cf_join = ( - "left join `tabUOM Conversion Detail` ucd on ucd.parent=item.name and ucd.uom=%s" - % frappe.db.escape(include_uom) + ucd = frappe.qb.DocType("UOM Conversion Detail") + query = ( + query.left_join(ucd) + .on((ucd.parent == item.name) & (ucd.uom == include_uom)) + .select(ucd.conversion_factor) ) - res = frappe.db.sql( - """ - select - item.name, item.item_name, item.description, item.item_group, item.brand, item.stock_uom {cf_field} - from - `tabItem` item - {cf_join} - where - item.name in ({item_codes}) - """.format( - cf_field=cf_field, cf_join=cf_join, item_codes=",".join(["%s"] * len(items)) - ), - items, - as_dict=1, - ) + res = query.run(as_dict=True) for item in res: item_details.setdefault(item.name, item) @@ -427,16 +425,28 @@ def get_warehouse_condition(warehouse): return "" -def get_item_group_condition(item_group): +def get_item_group_condition(item_group, item_table=None): item_group_details = frappe.db.get_value("Item Group", item_group, ["lft", "rgt"], as_dict=1) if item_group_details: - return ( - "item.item_group in (select ig.name from `tabItem Group` ig \ - where ig.lft >= %s and ig.rgt <= %s and item.item_group = ig.name)" - % (item_group_details.lft, item_group_details.rgt) - ) - - return "" + if item_table: + ig = frappe.qb.DocType("Item Group") + return item_table.item_group.isin( + ( + frappe.qb.from_(ig) + .select(ig.name) + .where( + (ig.lft >= item_group_details.lft) + & (ig.rgt <= item_group_details.rgt) + & (item_table.item_group == ig.name) + ) + ) + ) + else: + return ( + "item.item_group in (select ig.name from `tabItem Group` ig \ + where ig.lft >= %s and ig.rgt <= %s and item.item_group = ig.name)" + % (item_group_details.lft, item_group_details.rgt) + ) def check_inventory_dimension_filters_applied(filters) -> bool: diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index 9fb3be5188..b8c5187b2c 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -13,6 +13,8 @@ from frappe.utils import cstr, flt, get_link_to_form, nowdate, nowtime import erpnext from erpnext.stock.valuation import FIFOValuation, LIFOValuation +BarcodeScanResult = Dict[str, Optional[str]] + class InvalidWarehouseCompany(frappe.ValidationError): pass @@ -552,7 +554,16 @@ def check_pending_reposting(posting_date: str, throw_error: bool = True) -> bool @frappe.whitelist() -def scan_barcode(search_value: str) -> Dict[str, Optional[str]]: +def scan_barcode(search_value: str) -> BarcodeScanResult: + def set_cache(data: BarcodeScanResult): + frappe.cache().set_value(f"erpnext:barcode_scan:{search_value}", data, expires_in_sec=120) + + def get_cache() -> Optional[BarcodeScanResult]: + if data := frappe.cache().get_value(f"erpnext:barcode_scan:{search_value}"): + return data + + if scan_data := get_cache(): + return scan_data # search barcode no barcode_data = frappe.db.get_value( @@ -562,7 +573,9 @@ def scan_barcode(search_value: str) -> Dict[str, Optional[str]]: as_dict=True, ) if barcode_data: - return _update_item_info(barcode_data) + _update_item_info(barcode_data) + set_cache(barcode_data) + return barcode_data # search serial no serial_no_data = frappe.db.get_value( @@ -572,7 +585,9 @@ def scan_barcode(search_value: str) -> Dict[str, Optional[str]]: as_dict=True, ) if serial_no_data: - return _update_item_info(serial_no_data) + _update_item_info(serial_no_data) + set_cache(serial_no_data) + return serial_no_data # search batch no batch_no_data = frappe.db.get_value( @@ -582,7 +597,9 @@ def scan_barcode(search_value: str) -> Dict[str, Optional[str]]: as_dict=True, ) if batch_no_data: - return _update_item_info(batch_no_data) + _update_item_info(batch_no_data) + set_cache(batch_no_data) + return batch_no_data return {} diff --git a/erpnext/translations/zh-TW.csv b/erpnext/translations/zh-TW.csv index de1d7632e7..c30dd7231c 100644 --- a/erpnext/translations/zh-TW.csv +++ b/erpnext/translations/zh-TW.csv @@ -10,20 +10,20 @@ DocType: Supplier Scorecard,Notify Supplier,通知供應商 apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js +52,Please select Party Type first,請選擇黨第一型 DocType: Item,Customer Items,客戶項目 DocType: Project,Costing and Billing,成本核算和計費 -apps/erpnext/erpnext/hr/doctype/employee_advance/employee_advance.py +43,Advance account currency should be same as company currency {0},預付帳戶貨幣應與公司貨幣{0}相同 +apps/erpnext/erpnext/hr/doctype/employee_advance/employee_advance.py +43,Advance account currency should be same as company currency {0},預付科目貨幣應與公司貨幣{0}相同 DocType: QuickBooks Migrator,Token Endpoint,令牌端點 -apps/erpnext/erpnext/accounts/doctype/account/account.py +55,Account {0}: Parent account {1} can not be a ledger,帳戶{0}:父帳戶{1}不能是總帳 +apps/erpnext/erpnext/accounts/doctype/account/account.py +55,Account {0}: Parent account {1} can not be a ledger,科目{0}:上層科目{1}不能是總帳 DocType: Item,Publish Item to hub.erpnext.com,發布項目hub.erpnext.com apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +270,Cannot find active Leave Period,找不到有效的休假期 apps/erpnext/erpnext/hr/doctype/employee/employee_dashboard.py +22,Evaluation,評估 DocType: Item,Default Unit of Measure,預設的計量單位 DocType: SMS Center,All Sales Partner Contact,所有的銷售合作夥伴聯絡 DocType: Department,Leave Approvers,休假審批人 -DocType: Employee,Bio / Cover Letter,生物/求職信 +DocType: Employee,Bio / Cover Letter,自傳/求職信 DocType: Patient Encounter,Investigations,調查 DocType: Restaurant Order Entry,Click Enter To Add,點擊輸入要添加 apps/erpnext/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py +29,"Missing value for Password, API Key or Shopify URL",缺少密碼,API密鑰或Shopify網址的值 -apps/erpnext/erpnext/public/js/setup_wizard.js +243,All Accounts,所有帳戶 +apps/erpnext/erpnext/public/js/setup_wizard.js +243,All Accounts,所有科目 apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py +15,Cannot transfer Employee with status Left,無法轉移狀態為左的員工 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +216,"Stopped Production Order cannot be cancelled, Unstop it first to cancel",停止生產訂單無法取消,首先Unstop它取消 apps/erpnext/erpnext/assets/doctype/asset/asset.js +338,Do you really want to scrap this asset?,難道你真的想放棄這項資產? @@ -48,12 +48,12 @@ DocType: Allowed To Transact With,Allowed To Transact With,允許與 DocType: Bank Guarantee,Customer,客戶 DocType: Purchase Receipt Item,Required By,需求來自 DocType: Delivery Note,Return Against Delivery Note,射向送貨單 -DocType: Asset Category,Finance Book Detail,財務圖書細節 +DocType: Asset Category,Finance Book Detail,財務帳簿細節 DocType: Purchase Order,% Billed,%已開立帳單 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +41,Exchange Rate must be same as {0} {1} ({2}),匯率必須一致{0} {1}({2}) DocType: Sales Invoice,Customer Name,客戶名稱 DocType: Vehicle,Natural Gas,天然氣 -apps/erpnext/erpnext/setup/setup_wizard/operations/company_setup.py +63,Bank account cannot be named as {0},銀行賬戶不能命名為{0} +apps/erpnext/erpnext/setup/setup_wizard/operations/company_setup.py +63,Bank account cannot be named as {0},銀行科目不能命名為{0} DocType: Employee Tax Exemption Declaration,HRA as per Salary Structure,HRA根據薪資結構 DocType: Account,Heads (or groups) against which Accounting Entries are made and balances are maintained.,頭(或組)針對其會計分錄是由和平衡得以維持。 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +197,Outstanding for {0} cannot be less than zero ({1}),傑出的{0}不能小於零( {1} ) @@ -142,11 +142,11 @@ apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan_dashb apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +46,Attendance date can not be less than employee's joining date,考勤日期不得少於員工的加盟日期 DocType: Grading Scale,Grading Scale Name,分級標準名稱 apps/erpnext/erpnext/public/js/hub/marketplace.js +147,Add Users to Marketplace,將用戶添加到市場 -apps/erpnext/erpnext/accounts/doctype/account/account.js +37,This is a root account and cannot be edited.,這是一個 root 帳戶,不能被編輯。 -DocType: BOM,Operations,作業 +apps/erpnext/erpnext/accounts/doctype/account/account.js +37,This is a root account and cannot be edited.,這是一個 root 科目,不能被編輯。 +DocType: BOM,Operations,操作 apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +38,Cannot set authorization on basis of Discount for {0},不能在折扣的基礎上設置授權{0} DocType: Subscription,Subscription Start Date,訂閱開始日期 -DocType: Healthcare Settings,Default receivable accounts to be used if not set in Patient to book Appointment charges.,如果未在患者中設置預約費用,則使用默認應收帳戶。 +DocType: Healthcare Settings,Default receivable accounts to be used if not set in Patient to book Appointment charges.,如果未在患者中設置預約費用,則使用默認應收科目。 DocType: Rename Tool,"Attach .csv file with two columns, one for the old name and one for the new name",附加.csv文件有兩列,一為舊名稱,一個用於新名稱 apps/erpnext/erpnext/regional/report/eway_bill/eway_bill.py +195,From Address 2,來自地址2 apps/erpnext/erpnext/accounts/utils.py +74,{0} {1} not in any active Fiscal Year.,{0} {1} 不在任何有效的會計年度 @@ -216,14 +216,14 @@ apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +36,From {0} to {1 apps/erpnext/erpnext/setup/setup_wizard/setup_wizard.py +51,Failed to setup taxes,無法設置稅收 DocType: Item,Copy From Item Group,從項目群組複製 DocType: Journal Entry,Opening Entry,開放報名 -apps/erpnext/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js +25,Account Pay Only,賬戶只需支付 +apps/erpnext/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js +25,Account Pay Only,科目只需支付 DocType: Loan,Repay Over Number of Periods,償還期的超過數 DocType: Stock Entry,Additional Costs,額外費用 -apps/erpnext/erpnext/accounts/doctype/account/account.py +145,Account with existing transaction can not be converted to group.,帳戶與現有的交易不能被轉換到群組。 +apps/erpnext/erpnext/accounts/doctype/account/account.py +145,Account with existing transaction can not be converted to group.,科目與現有的交易不能被轉換到群組。 DocType: Lead,Product Enquiry,產品查詢 DocType: Education Settings,Validate Batch for Students in Student Group,驗證學生組學生的批次 apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +38,No leave record found for employee {0} for {1},未找到員工的假期記錄{0} {1} -DocType: Company,Unrealized Exchange Gain/Loss Account,未實現的匯兌收益/損失賬戶 +DocType: Company,Unrealized Exchange Gain/Loss Account,未實現的匯兌收益/損失科目 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +23,Please enter company first,請先輸入公司 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +626,Please select Company first,請首先選擇公司 DocType: Employee Education,Under Graduate,根據研究生 @@ -236,7 +236,7 @@ DocType: Fee Schedule,Send Payment Request Email,發送付款請求電子郵件 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +282,Item {0} does not exist in the system or has expired,項目{0}不存在於系統中或已過期 DocType: Supplier,Leave blank if the Supplier is blocked indefinitely,如果供應商被無限期封鎖,請留空 apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +44,Real Estate,房地產 -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.html +1,Statement of Account,帳戶狀態 +apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.html +1,Statement of Account,科目狀態 apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +41,Pharmaceuticals,製藥 DocType: Purchase Invoice Item,Is Fixed Asset,是固定的資產 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +355,"Available qty is {0}, you need {1}",可用數量是{0},則需要{1} @@ -284,7 +284,7 @@ DocType: Production Plan,Material Request Detail,材料請求詳情 DocType: Selling Settings,Default Quotation Validity Days,默認報價有效天數 apps/erpnext/erpnext/controllers/accounts_controller.py +886,"To include tax in row {0} in Item rate, taxes in rows {1} must also be included",要包括稅款,行{0}項率,稅收行{1}也必須包括在內 DocType: Payroll Entry,Validate Attendance,驗證出席 -DocType: Sales Invoice,Change Amount,漲跌額 +DocType: Sales Invoice,Change Amount,變動金額 DocType: Party Tax Withholding Config,Certificate Received,已收到證書 DocType: GST Settings,Set Invoice Value for B2C. B2CL and B2CS calculated based on this invoice value.,設置B2C的發票值。 B2CL和B2CS根據此發票值計算。 DocType: BOM Update Tool,New BOM,新的物料清單 @@ -294,7 +294,7 @@ DocType: Supplier Group,Supplier Group Name,供應商集團名稱 DocType: Driver,Driving License Categories,駕駛執照類別 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +124,Please enter Delivery Date,請輸入交貨日期 DocType: Depreciation Schedule,Make Depreciation Entry,計提折舊進入 -DocType: Closed Document,Closed Document,封閉文件 +DocType: Closed Document,Closed Document,關閉文件 DocType: HR Settings,Leave Settings,保留設置 apps/erpnext/erpnext/hr/doctype/staffing_plan/staffing_plan.js +76,Number of positions cannot be less then current count of employees,職位數量不能少於當前員工人數 DocType: Lead,Request Type,請求類型 @@ -308,7 +308,7 @@ apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +144,Exec apps/erpnext/erpnext/config/manufacturing.py +62,Details of the operations carried out.,進行的作業細節。 DocType: Asset Maintenance Log,Maintenance Status,維修狀態 apps/erpnext/erpnext/non_profit/doctype/member/member_dashboard.py +10,Membership Details,會員資格 -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +56,{0} {1}: Supplier is required against Payable account {2},{0} {1}:需要對供應商應付賬款{2} +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +56,{0} {1}: Supplier is required against Payable account {2},{0} {1}:需要對供應商應付帳款{2} apps/erpnext/erpnext/config/selling.py +52,Items and Pricing,項目和定價 apps/erpnext/erpnext/projects/doctype/project/project_dashboard.html +2,Total hours: {0},總時間:{0} apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +43,From Date should be within the Fiscal Year. Assuming From Date = {0},從日期應該是在財政年度內。假設起始日期={0} @@ -369,12 +369,12 @@ DocType: Company,Default Payroll Payable Account,默認情況下,應付職工 apps/erpnext/erpnext/education/doctype/student_group/student_group.js +51,Update Email Group,更新電子郵件組 DocType: Sales Invoice,Is Opening Entry,是開放登錄 DocType: Lab Test Template,"If unchecked, the item wont be appear in Sales Invoice, but can be used in group test creation. ",如果取消選中,該項目不會出現在銷售發票中,但可用於創建組測試。 -DocType: Customer Group,Mention if non-standard receivable account applicable,何況,如果不規範應收賬款適用 +DocType: Customer Group,Mention if non-standard receivable account applicable,何況,如果不規範應收帳款適用 DocType: Course Schedule,Instructor Name,導師姓名 DocType: Company,Arrear Component,欠費組件 DocType: Supplier Scorecard,Criteria Setup,條件設置 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +199,For Warehouse is required before Submit,對於倉庫之前,需要提交 -DocType: Codification Table,Medical Code,醫療法 +DocType: Codification Table,Medical Code,醫療代號 apps/erpnext/erpnext/config/integrations.py +37,Connect Amazon with ERPNext,將Amazon與ERPNext連接起來 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +20,Please enter Company,請輸入公司名稱 DocType: Delivery Note Item,Against Sales Invoice Item,對銷售發票項目 @@ -406,9 +406,9 @@ DocType: Inpatient Record,Discharge Scheduled,出院預定 apps/erpnext/erpnext/hr/doctype/employee/employee.py +138,Relieving Date must be greater than Date of Joining,解除日期必須大於加入的日期 DocType: POS Closing Voucher,Cashier,出納員 apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +198,Leaves per Year,每年葉 -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +162,Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.,行{0}:請檢查'是推進'對帳戶{1},如果這是一個進步條目。 +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +162,Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.,行{0}:請檢查'是進階'對科目{1},如果這是一個進階條目。 apps/erpnext/erpnext/stock/utils.py +243,Warehouse {0} does not belong to company {1},倉庫{0}不屬於公司{1} -DocType: Email Digest,Profit & Loss,利潤損失 +DocType: Email Digest,Profit & Loss,收益與損失 DocType: Task,Total Costing Amount (via Time Sheet),總成本計算量(通過時間表) apps/erpnext/erpnext/education/doctype/fee_schedule/fee_schedule.py +76,Please setup Students under Student Groups,請設置學生組的學生 DocType: Item Website Specification,Item Website Specification,項目網站規格 @@ -479,7 +479,7 @@ apps/erpnext/erpnext/config/desktop.py +159,Learn,學習 DocType: Purchase Invoice Item,Enable Deferred Expense,啟用延期費用 DocType: Asset,Next Depreciation Date,接下來折舊日期 apps/erpnext/erpnext/projects/doctype/activity_type/activity_type.js +3,Activity Cost per Employee,每個員工活動費用 -DocType: Accounts Settings,Settings for Accounts,設置帳戶 +DocType: Accounts Settings,Settings for Accounts,會計設定 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +800,Supplier Invoice No exists in Purchase Invoice {0},供應商發票不存在採購發票{0} apps/erpnext/erpnext/config/selling.py +118,Manage Sales Person Tree.,管理銷售人員樹。 apps/erpnext/erpnext/stock/doctype/delivery_trip/delivery_trip.py +105,"Cannot process route, since Google Maps Settings is disabled.",由於禁用了Google地圖設置,因此無法處理路線。 @@ -521,7 +521,7 @@ apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +97,Upcom apps/erpnext/erpnext/public/js/templates/item_quick_entry.html +1,Variant Attributes,變量屬性 apps/erpnext/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py +114,Please select month and year,請選擇年份和月份 DocType: Employee,Company Email,企業郵箱 -DocType: GL Entry,Debit Amount in Account Currency,在賬戶幣種借記金額 +DocType: GL Entry,Debit Amount in Account Currency,在科目幣種借記金額 apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +21,Order Value,訂單價值 apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +21,Order Value,訂單價值 DocType: Certified Consultant,Certified Consultant,認證顧問 @@ -550,7 +550,7 @@ apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.js +101,Convert to DocType: Project Update,Good/Steady,好/穩定 DocType: Bank Statement Transaction Invoice Item,Invoice Date,發票日期 DocType: GL Entry,Debit Amount,借方金額 -apps/erpnext/erpnext/accounts/party.py +277,There can only be 1 Account per Company in {0} {1},只能有每公司1帳戶{0} {1} +apps/erpnext/erpnext/accounts/party.py +277,There can only be 1 Account per Company in {0} {1},只能有每公司1科目{0} {1} DocType: Support Search Source,Response Result Key Path,響應結果關鍵路徑 DocType: Journal Entry,Inter Company Journal Entry,Inter公司日記帳分錄 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +534,For quantity {0} should not be grater than work order quantity {1},數量{0}不應超過工單數量{1} @@ -562,7 +562,7 @@ apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.htm DocType: Setup Progress Action,Action Document,行動文件 DocType: Chapter Member,Website URL,網站網址 DocType: Delivery Note,Instructions,說明 -DocType: Quality Inspection,Inspected By,視察 +DocType: Quality Inspection,Inspected By,檢查 DocType: Asset Maintenance Log,Maintenance Type,維護類型 apps/erpnext/erpnext/education/doctype/student_group/student_group.py +45,{0} - {1} is not enrolled in the Course {2},{0} - {1} 未在課程中註冊 {2} apps/erpnext/erpnext/education/doctype/student_report_generation_tool/student_report_generation_tool.html +225,Student Name: ,學生姓名: @@ -642,17 +642,17 @@ apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +57,'To Case No. DocType: Certification Application,Non Profit,非營利 DocType: Production Plan,Not Started,未啟動 DocType: Lead,Channel Partner,渠道合作夥伴 -DocType: Account,Old Parent,老家長 +DocType: Account,Old Parent,舊上級 apps/erpnext/erpnext/education/doctype/program_enrollment_tool/program_enrollment_tool.py +24,Mandatory field - Academic Year,必修課 - 學年 apps/erpnext/erpnext/education/doctype/program_enrollment_tool/program_enrollment_tool.py +24,Mandatory field - Academic Year,必修課 - 學年 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +221,{0} {1} is not associated with {2} {3},{0} {1} 未與 {2} {3} 關聯 DocType: Notification Control,Customize the introductory text that goes as a part of that email. Each transaction has a separate introductory text.,自定義去作為郵件的一部分的介紹文字。每筆交易都有一個單獨的介紹性文字。 apps/erpnext/erpnext/manufacturing/doctype/job_card/job_card.py +56,Row {0} : Operation is required against the raw material item {1},行{0}:對原材料項{1}需要操作 -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +180,Please set default payable account for the company {0},請為公司{0}設置預設應付賬款 +apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +180,Please set default payable account for the company {0},請為公司{0}設置預設應付帳款 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +608,Transaction not allowed against stopped Work Order {0},不允許對停止的工單{0}進行交易 DocType: Setup Progress Action,Min Doc Count,最小文件計數 apps/erpnext/erpnext/config/manufacturing.py +84,Global settings for all manufacturing processes.,所有製造過程中的全域設定。 -DocType: Accounts Settings,Accounts Frozen Upto,帳戶被凍結到 +DocType: Accounts Settings,Accounts Frozen Upto,科目被凍結到 DocType: SMS Log,Sent On,發送於 apps/erpnext/erpnext/stock/doctype/item/item.py +778,Attribute {0} selected multiple times in Attributes Table,屬性{0}多次選擇在屬性表 DocType: HR Settings,Employee record is created using selected field. ,使用所選欄位創建員工記錄。 @@ -717,7 +717,7 @@ apps/erpnext/erpnext/education/doctype/student_group/student_group.py +22,Please DocType: Codification Table,Codification Table,編纂表 DocType: Timesheet Detail,Hrs,小時 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +410,Please select Company,請選擇公司 -DocType: Stock Entry Detail,Difference Account,差異帳戶 +DocType: Stock Entry Detail,Difference Account,差異科目 DocType: Purchase Invoice,Supplier GSTIN,供應商GSTIN apps/erpnext/erpnext/projects/doctype/task/task.py +50,Cannot close task as its dependant task {0} is not closed.,不能因為其依賴的任務{0}沒有關閉關閉任務。 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +435,Please enter Warehouse for which Material Request will be raised,請輸入物料需求欲增加的倉庫 @@ -759,7 +759,7 @@ apps/erpnext/erpnext/config/stock.py +337,Managing Subcontracting,管理轉包 DocType: Vital Signs,Body Temperature,體溫 DocType: Project,Project will be accessible on the website to these users,項目將在網站向這些用戶上訪問 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +292,Cannot cancel {0} {1} because Serial No {2} does not belong to the warehouse {3},無法取消{0} {1},因為序列號{2}不屬於倉庫{3} -DocType: Company,Default Deferred Expense Account,默認遞延費用帳戶 +DocType: Company,Default Deferred Expense Account,默認遞延費用科目 apps/erpnext/erpnext/config/projects.py +29,Define Project type.,定義項目類型。 DocType: Supplier Scorecard,Weighting Function,加權函數 DocType: Healthcare Practitioner,OP Consulting Charge,OP諮詢費 @@ -767,7 +767,7 @@ apps/erpnext/erpnext/utilities/user_progress.py +28,Setup your ,設置你的 DocType: Student Report Generation Tool,Show Marks,顯示標記 DocType: Support Settings,Get Latest Query,獲取最新查詢 DocType: Quotation,Rate at which Price list currency is converted to company's base currency,價目表貨幣被換算成公司基礎貨幣的匯率 -apps/erpnext/erpnext/setup/doctype/company/company.py +74,Account {0} does not belong to company: {1},帳戶{0}不屬於公司:{1} +apps/erpnext/erpnext/setup/doctype/company/company.py +74,Account {0} does not belong to company: {1},科目{0}不屬於公司:{1} apps/erpnext/erpnext/setup/doctype/company/company.py +56,Abbreviation already used for another company,另一家公司已使用此縮寫 DocType: Selling Settings,Default Customer Group,預設客戶群組 DocType: Employee,IFSC Code,IFSC代碼 @@ -792,20 +792,20 @@ apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +76,Total C DocType: Installation Note Item,Installation Note Item,安裝注意項 DocType: Production Plan Item,Pending Qty,待定數量 apps/erpnext/erpnext/accounts/party.py +429,{0} {1} is not active,{0} {1}是不活動 -DocType: Woocommerce Settings,Freight and Forwarding Account,貨運和轉運帳戶 +DocType: Woocommerce Settings,Freight and Forwarding Account,貨運和轉運科目 apps/erpnext/erpnext/config/accounts.py +240,Setup cheque dimensions for printing,設置檢查尺寸打印 apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.js +33,Create Salary Slips,創建工資單 DocType: Vital Signs,Bloated,脹 DocType: Salary Slip,Salary Slip Timesheet,工資單時間表 apps/erpnext/erpnext/controllers/buying_controller.py +200,Supplier Warehouse mandatory for sub-contracted Purchase Receipt,對於轉包的採購入庫單,供應商倉庫是強制性輸入的。 DocType: Sales Invoice,Total Commission,佣金總計 -DocType: Tax Withholding Account,Tax Withholding Account,扣繳稅款賬戶 +DocType: Tax Withholding Account,Tax Withholding Account,扣繳稅款科目 DocType: Pricing Rule,Sales Partner,銷售合作夥伴 apps/erpnext/erpnext/config/buying.py +150,All Supplier scorecards.,所有供應商記分卡。 DocType: Buying Settings,Purchase Receipt Required,需要採購入庫單 DocType: Delivery Note,Rail,軌 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +267,Target warehouse in row {0} must be same as Work Order,行{0}中的目標倉庫必須與工單相同 -apps/erpnext/erpnext/stock/doctype/item/item.py +183,Valuation Rate is mandatory if Opening Stock entered,估價費用是強制性的,如果打開股票進入 +apps/erpnext/erpnext/stock/doctype/item/item.py +183,Valuation Rate is mandatory if Opening Stock entered,估價費用是強制性的,如果打開庫存進入 apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +143,No records found in the Invoice table,沒有在發票表中找到記錄 apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js +36,Please select Company and Party Type first,請選擇公司和黨的第一型 apps/erpnext/erpnext/accounts/doctype/pos_profile/pos_profile.py +31,"Already set default in pos profile {0} for user {1}, kindly disabled default",已經在用戶{1}的pos配置文件{0}中設置了默認值,請禁用默認值 @@ -828,7 +828,7 @@ apps/erpnext/erpnext/hr/doctype/attendance_request/attendance_request.py +18,Hal apps/erpnext/erpnext/public/js/pos/pos.html +4,Item Cart,項目車 apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +38,Fiscal Year Start Date should not be greater than Fiscal Year End Date,會計年度開始日期應不大於財政年度結束日期 DocType: Issue,Resolution,決議 -DocType: Employee,Personal Bio,個人生物 +DocType: Employee,Personal Bio,個人自傳 apps/erpnext/erpnext/non_profit/report/expiring_memberships/expiring_memberships.py +15,Membership ID,會員ID apps/erpnext/erpnext/templates/pages/order.html +77,Delivered: {0},交貨:{0} DocType: QuickBooks Migrator,Connected to QuickBooks,連接到QuickBooks @@ -868,7 +868,7 @@ DocType: Loan Application,Total Payable Interest,合計應付利息 apps/erpnext/erpnext/education/doctype/fee_schedule/fee_schedule.js +58,Total Outstanding: {0},總計:{0} DocType: Sales Invoice Timesheet,Sales Invoice Timesheet,銷售發票時間表 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +150,Reference No & Reference Date is required for {0},參考號與參考日期須為{0} -DocType: Payroll Entry,Select Payment Account to make Bank Entry,選擇付款賬戶,使銀行進入 +DocType: Payroll Entry,Select Payment Account to make Bank Entry,選擇付款科目,使銀行進入 DocType: Hotel Settings,Default Invoice Naming Series,默認發票命名系列 apps/erpnext/erpnext/utilities/activation.py +136,"Create Employee records to manage leaves, expense claims and payroll",建立員工檔案管理葉,報銷和工資 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +712,An error occurred during the update process,更新過程中發生錯誤 @@ -898,7 +898,7 @@ DocType: Timesheet,Billed,計費 DocType: Batch,Batch Description,批次說明 apps/erpnext/erpnext/education/doctype/student_group_creation_tool/student_group_creation_tool.js +12,Creating student groups,創建學生組 apps/erpnext/erpnext/education/doctype/student_group_creation_tool/student_group_creation_tool.js +12,Creating student groups,創建學生組 -apps/erpnext/erpnext/accounts/utils.py +763,"Payment Gateway Account not created, please create one manually.",支付網關帳戶沒有創建,請手動創建一個。 +apps/erpnext/erpnext/accounts/utils.py +763,"Payment Gateway Account not created, please create one manually.",支付閘道科目沒有創建,請手動創建一個。 apps/erpnext/erpnext/education/doctype/student_applicant/student_applicant.py +51,Not eligible for the admission in this program as per DOB,按照DOB的規定,沒有資格參加本計劃 DocType: Sales Invoice,Sales Taxes and Charges,銷售稅金及費用 DocType: Student,Sibling Details,兄弟姐妹詳情 @@ -922,7 +922,7 @@ apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/stude apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +87,Manager,經理 apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.js +8,From Fiscal Year,從財政年度開始 apps/erpnext/erpnext/selling/doctype/customer/customer.py +185,New credit limit is less than current outstanding amount for the customer. Credit limit has to be atleast {0},新的信用額度小於當前餘額為客戶著想。信用額度是ATLEAST {0} -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +453,Please set account in Warehouse {0},請在倉庫{0}中設置帳戶 +apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +453,Please set account in Warehouse {0},請在倉庫{0}中設置會計科目 apps/erpnext/erpnext/controllers/trends.py +39,'Based On' and 'Group By' can not be same,“根據”和“分組依據”不能相同 DocType: Sales Person,Sales Person Targets,銷售人員目標 DocType: Work Order Operation,In minutes,在幾分鐘內 @@ -970,7 +970,7 @@ apps/erpnext/erpnext/config/accounts.py +293,To make recurring documents,複製 DocType: Loan,Total Interest Payable,合計應付利息 DocType: Landed Cost Taxes and Charges,Landed Cost Taxes and Charges,到岸成本稅費 DocType: Work Order Operation,Actual Start Time,實際開始時間 -DocType: Purchase Invoice Item,Deferred Expense Account,遞延費用帳戶 +DocType: Purchase Invoice Item,Deferred Expense Account,遞延費用科目 DocType: BOM Operation,Operation Time,操作時間 apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +466,Finish,完 apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.js +441,Base,基礎 @@ -979,7 +979,7 @@ DocType: Travel Itinerary,Travel To,前往 apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +1659,Write Off Amount,核銷金額 DocType: Leave Block List Allow,Allow User,允許用戶 DocType: Journal Entry,Bill No,帳單號碼 -DocType: Company,Gain/Loss Account on Asset Disposal,在資產處置收益/損失帳戶 +DocType: Company,Gain/Loss Account on Asset Disposal,在資產處置收益/損失科目 DocType: Vehicle Log,Service Details,服務細節 DocType: Vehicle Log,Service Details,服務細節 DocType: Lab Test Template,Grouped,分組 @@ -1013,7 +1013,7 @@ apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.js +408,Previe apps/erpnext/erpnext/accounts/doctype/budget/budget.py +64,Account {0} has been entered multiple times,帳戶{0}已多次輸入 DocType: Account,Expenses Included In Valuation,支出計入估值 apps/erpnext/erpnext/non_profit/doctype/membership/membership.py +38,You can only renew if your membership expires within 30 days,如果您的會員資格在30天內到期,您只能續訂 -DocType: Shopping Cart Settings,Show Stock Availability,顯示股票可用性 +DocType: Shopping Cart Settings,Show Stock Availability,顯示庫存可用性 apps/erpnext/erpnext/assets/doctype/asset/asset.py +519,Set {0} in asset category {1} or company {2},在資產類別{1}或公司{2}中設置{0} DocType: Location,Longitude,經度 ,Absent Student Report,缺席學生報告 @@ -1038,7 +1038,7 @@ apps/erpnext/erpnext/education/doctype/student_group/student_group.py +24,Please DocType: Project,Estimated Cost,估計成本 DocType: Request for Quotation,Link to material requests,鏈接到材料請求 DocType: Journal Entry,Credit Card Entry,信用卡進入 -apps/erpnext/erpnext/config/accounts.py +35,Company and Accounts,公司與賬戶 +apps/erpnext/erpnext/config/accounts.py +35,Company and Accounts,公司與科目 apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +85,In Value,在數值 DocType: Asset Settings,Depreciation Options,折舊選項 apps/erpnext/erpnext/assets/doctype/asset_movement/asset_movement.py +28,Either location or employee must be required,必須要求地點或員工 @@ -1055,7 +1055,7 @@ DocType: Purchase Order,Supply Raw Materials,供應原料 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +10,Current Assets,流動資產 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +161,{0} is not a stock Item,{0}不是庫存項目 apps/erpnext/erpnext/hr/notification/training_feedback/training_feedback.html +6,Please share your feedback to the training by clicking on 'Training Feedback' and then 'New',請通過點擊“培訓反饋”,然後點擊“新建” -DocType: Mode of Payment Account,Default Account,預設帳戶 +DocType: Mode of Payment Account,Default Account,預設科目 apps/erpnext/erpnext/stock/doctype/item/item.py +302,Please select Sample Retention Warehouse in Stock Settings first,請先在庫存設置中選擇樣品保留倉庫 apps/erpnext/erpnext/accounts/doctype/loyalty_program/loyalty_program.js +62,Please select the Multiple Tier Program type for more than one collection rules.,請為多個收集規則選擇多層程序類型。 DocType: Payment Entry,Received Amount (Company Currency),收到的款項(公司幣種) @@ -1069,7 +1069,7 @@ DocType: Work Order Operation,Planned End Time,計劃結束時間 apps/erpnext/erpnext/accounts/doctype/account/account.py +100,Account with existing transaction cannot be converted to ledger,帳戶與現有的交易不能被轉換為總賬 apps/erpnext/erpnext/config/non_profit.py +33,Memebership Type Details,Memebership類型詳細信息 DocType: Delivery Note,Customer's Purchase Order No,客戶的採購訂單編號 -DocType: Clinical Procedure,Consume Stock,消費股票 +DocType: Clinical Procedure,Consume Stock,消費庫存 DocType: Budget,Budget Against,反對財政預算案 apps/erpnext/erpnext/stock/reorder_item.py +194,Auto Material Requests Generated,汽車材料的要求生成 apps/erpnext/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js +7,Lost,丟失 @@ -1084,7 +1084,7 @@ DocType: Special Test Items,Particulars,細節 apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +23,{0}: From {0} of type {1},{0}:從{0}類型{1} apps/erpnext/erpnext/controllers/buying_controller.py +399,Row {0}: Conversion Factor is mandatory,列#{0}:轉換係數是強制性的 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +353,"Multiple Price Rules exists with same criteria, please resolve conflict by assigning priority. Price Rules: {0}",海報價格規則,同樣的標準存在,請通過分配優先解決衝突。價格規則:{0} -DocType: Exchange Rate Revaluation,Exchange Rate Revaluation Account,匯率重估賬戶 +DocType: Exchange Rate Revaluation,Exchange Rate Revaluation Account,匯率重估科目 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +539,Cannot deactivate or cancel BOM as it is linked with other BOMs,無法關閉或取消BOM,因為它是與其他材料明細表鏈接 apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js +106,Please select Company and Posting Date to getting entries,請選擇公司和發布日期以獲取條目 DocType: Asset,Maintenance,維護 @@ -1146,9 +1146,9 @@ apps/erpnext/erpnext/regional/report/eway_bill/eway_bill.py +163,Doc Name,文件 DocType: Expense Claim Detail,Expense Claim Type,費用報銷型 DocType: Shopping Cart Settings,Default settings for Shopping Cart,對購物車的預設設定 apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js +27,Add Timeslots,添加時代 -apps/erpnext/erpnext/stock/__init__.py +57,Please set Account in Warehouse {0} or Default Inventory Account in Company {1},請在倉庫{0}中設置帳戶或在公司{1}中設置默認庫存帳戶 +apps/erpnext/erpnext/stock/__init__.py +57,Please set Account in Warehouse {0} or Default Inventory Account in Company {1},請在倉庫{0}中設科目或在公司{1}中設置默認庫存科目 apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +143,Asset scrapped via Journal Entry {0},通過資產日記帳分錄報廢{0} -DocType: Loan,Interest Income Account,利息收入賬戶 +DocType: Loan,Interest Income Account,利息收入科目 apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.py +61,Max benefits should be greater than zero to dispense benefits,最大的好處應該大於零來分配好處 apps/erpnext/erpnext/non_profit/doctype/grant_application/grant_application.py +58,Review Invitation Sent,審核邀請已發送 DocType: Shift Assignment,Shift Assignment,班次分配 @@ -1167,7 +1167,7 @@ DocType: Account,Liability,責任 apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +228,Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,制裁金額不能大於索賠額行{0}。 apps/erpnext/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.html +14,Academic Term: ,學術期限: DocType: Salary Component,Do not include in total,不包括在內 -DocType: Company,Default Cost of Goods Sold Account,銷貨帳戶的預設成本 +DocType: Company,Default Cost of Goods Sold Account,銷貨成本科目 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +1287,Sample quantity {0} cannot be more than received quantity {1},採樣數量{0}不能超過接收數量{1} apps/erpnext/erpnext/stock/get_item_details.py +523,Price List not selected,未選擇價格列表 DocType: Request for Quotation Supplier,Send Email,發送電子郵件 @@ -1176,7 +1176,7 @@ DocType: Item,Max Sample Quantity,最大樣品量 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +810,No Permission,無權限 DocType: Contract Fulfilment Checklist,Contract Fulfilment Checklist,合同履行清單 DocType: Vital Signs,Heart Rate / Pulse,心率/脈搏 -DocType: Company,Default Bank Account,預設銀行帳戶 +DocType: Company,Default Bank Account,預設銀行會計科目 apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +76,"To filter based on Party, select Party Type first",要根據黨的篩選,選擇黨第一類型 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +46,'Update Stock' can not be checked because items are not delivered via {0},不能勾選`更新庫存',因為項目未交付{0} DocType: Vehicle,Acquisition Date,採集日期 @@ -1202,7 +1202,7 @@ DocType: Item,Website Warehouse,網站倉庫 DocType: Payment Reconciliation,Minimum Invoice Amount,最小發票金額 apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +112,{0} {1}: Cost Center {2} does not belong to Company {3},{0} {1}:成本中心{2}不屬於公司{3} apps/erpnext/erpnext/utilities/user_progress.py +92,Upload your letter head (Keep it web friendly as 900px by 100px),上傳你的信頭(保持網頁友好,900px乘100px) -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +89,{0} {1}: Account {2} cannot be a Group,{0} {1}帳戶{2}不能是一個組 +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +89,{0} {1}: Account {2} cannot be a Group,{0} {1}科目{2}不能是一個群組科目 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +367,Timesheet {0} is already completed or cancelled,時間表{0}已完成或取消 apps/erpnext/erpnext/templates/pages/projects.html +42,No tasks,沒有任務 apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py +81,Sales Invoice {0} created as paid,銷售發票{0}已創建為已付款 @@ -1282,7 +1282,7 @@ apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_st apps/erpnext/erpnext/config/selling.py +332,Point-of-Sale,銷售點 DocType: Fee Schedule,Fee Creation Status,費用創建狀態 DocType: Vehicle Log,Odometer Reading,里程表讀數 -apps/erpnext/erpnext/accounts/doctype/account/account.py +123,"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'",帳戶餘額已歸為信用帳戶,不允許設為借方帳戶 +apps/erpnext/erpnext/accounts/doctype/account/account.py +123,"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'",科目餘額已歸為貸方,不允許設為借方 DocType: Account,Balance must be,餘額必須 DocType: Notification Control,Expense Claim Rejected Message,報銷回絕訊息 ,Available Qty,可用數量 @@ -1349,9 +1349,9 @@ apps/erpnext/erpnext/stock/report/item_prices/item_prices.py +40,Sales Price Lis DocType: Healthcare Settings,"If checked, a customer will be created, mapped to Patient. Patient Invoices will be created against this Customer. You can also select existing Customer while creating Patient.",如果選中,將創建一個客戶,映射到患者。將針對該客戶創建病人發票。您也可以在創建患者時選擇現有客戶。 apps/erpnext/erpnext/accounts/doctype/loyalty_program/loyalty_program.py +63,Customer isn't enrolled in any Loyalty Program,客戶未加入任何忠誠度計劃 -DocType: Bank Reconciliation,Account Currency,賬戶幣種 +DocType: Bank Reconciliation,Account Currency,科目幣種 DocType: Lab Test,Sample ID,樣品編號 -apps/erpnext/erpnext/accounts/general_ledger.py +178,Please mention Round Off Account in Company,請註明舍入賬戶的公司 +apps/erpnext/erpnext/accounts/general_ledger.py +178,Please mention Round Off Account in Company,請註明舍入科目的公司 DocType: Purchase Receipt,Range,範圍 DocType: Supplier,Default Payable Accounts,預設應付帳款 apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +52,Employee {0} is not active or does not exist,員工{0}不活躍或不存在 @@ -1471,7 +1471,7 @@ DocType: Repayment Schedule,Balance Loan Amount,平衡貸款額 apps/erpnext/erpnext/hr/doctype/employee_promotion/employee_promotion.js +132,Added to details,添加到細節 apps/erpnext/erpnext/education/doctype/course_scheduling_tool/course_scheduling_tool.js +14,Schedule Course,課程時間表 DocType: Budget,Applicable on Material Request,適用於材料請求 -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +194,Stock Options,股票期權 +apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +194,Stock Options,庫存期權 apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +628,No Items added to cart,沒有項目已添加到購物車 DocType: Journal Entry Account,Expense Claim,報銷 apps/erpnext/erpnext/assets/doctype/asset/asset.js +352,Do you really want to restore this scrapped asset?,難道你真的想恢復這個報廢的資產? @@ -1491,7 +1491,7 @@ DocType: Landed Cost Purchase Receipt,Landed Cost Purchase Receipt,到岸成本 DocType: Company,Default Terms,默認條款 DocType: Supplier Scorecard Period,Criteria,標準 DocType: Packing Slip Item,Packing Slip Item,包裝單項目 -DocType: Purchase Invoice,Cash/Bank Account,現金/銀行帳戶 +DocType: Purchase Invoice,Cash/Bank Account,現金/銀行會計科目 DocType: Travel Itinerary,Train,培養 apps/erpnext/erpnext/public/js/queries.js +96,Please specify a {0},請指定{0} apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +74,Removed items with no change in quantity or value.,刪除的項目在數量或價值沒有變化。 @@ -1516,7 +1516,7 @@ DocType: Agriculture Task,Urgent,緊急 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +187,Please specify a valid Row ID for row {0} in table {1},請指定行{0}在表中的有效行ID {1} apps/erpnext/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.py +84,Unable to find variable: ,無法找到變量: apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +893,Please select a field to edit from numpad,請選擇要從數字鍵盤編輯的字段 -apps/erpnext/erpnext/stock/doctype/item/item.py +293,Cannot be a fixed asset item as Stock Ledger is created.,不能成為股票分類賬創建的固定資產項目。 +apps/erpnext/erpnext/stock/doctype/item/item.py +293,Cannot be a fixed asset item as Stock Ledger is created.,不能成為庫存分類賬創建的固定資產項目。 apps/erpnext/erpnext/healthcare/doctype/inpatient_record/inpatient_record.js +7,Admit,承認 apps/erpnext/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +23,Go to the Desktop and start using ERPNext,轉到桌面和開始使用ERPNext apps/erpnext/erpnext/templates/pages/order.js +31,Pay Remaining,支付剩餘 @@ -1563,7 +1563,7 @@ DocType: Buying Settings,Material Transferred for Subcontract,轉包材料轉讓 DocType: Email Digest,Purchase Orders Items Overdue,採購訂單項目逾期 apps/erpnext/erpnext/accounts/page/pos/pos.js +1638,ZIP Code,郵政編碼 apps/erpnext/erpnext/controllers/selling_controller.py +265,Sales Order {0} is {1},銷售訂單{0} {1} -apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.py +260,Select interest income account in loan {0},選擇貸款{0}中的利息收入帳戶 +apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.py +260,Select interest income account in loan {0},選擇貸款{0}中的利息收入科目 DocType: Opportunity,Contact Info,聯絡方式 apps/erpnext/erpnext/config/stock.py +322,Making Stock Entries,製作Stock條目 apps/erpnext/erpnext/hr/doctype/employee_promotion/employee_promotion.py +15,Cannot promote Employee with status Left,無法提升狀態為Left的員工 @@ -1681,10 +1681,10 @@ apps/erpnext/erpnext/accounts/page/pos/pos.js +2530,"Payment Mode is not configu apps/erpnext/erpnext/buying/utils.py +74,Same item cannot be entered multiple times.,同一項目不能輸入多次。 apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +30,"Further accounts can be made under Groups, but entries can be made against non-Groups",進一步帳戶可以根據組進行,但條目可針對非組進行 DocType: Lead,Lead,潛在客戶 -DocType: Email Digest,Payables,應付賬款 +DocType: Email Digest,Payables,應付帳款 DocType: Course,Course Intro,課程介紹 DocType: Amazon MWS Settings,MWS Auth Token,MWS Auth Token -apps/erpnext/erpnext/stock/doctype/batch/batch.js +105,Stock Entry {0} created,股票輸入{0}創建 +apps/erpnext/erpnext/stock/doctype/batch/batch.js +105,Stock Entry {0} created,庫存輸入{0}創建 apps/erpnext/erpnext/accounts/doctype/loyalty_program/loyalty_program.py +110,You don't have enought Loyalty Points to redeem,您沒有獲得忠誠度積分兌換 apps/erpnext/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py +23,Please set associated account in Tax Withholding Category {0} against Company {1},請在針對公司{1}的預扣稅分類{0}中設置關聯帳戶 apps/erpnext/erpnext/controllers/buying_controller.py +405,Row #{0}: Rejected Qty can not be entered in Purchase Return,行#{0}:駁回採購退貨數量不能進入 @@ -1764,11 +1764,11 @@ DocType: Work Order,Qty To Manufacture,製造數量 DocType: Buying Settings,Maintain same rate throughout purchase cycle,在整個採購週期價格保持一致 DocType: Opportunity Item,Opportunity Item,項目的機會 ,Student and Guardian Contact Details,學生和監護人聯繫方式 -apps/erpnext/erpnext/accounts/doctype/account/account.js +51,Merge Account,合併帳戶 +apps/erpnext/erpnext/accounts/doctype/account/account.js +51,Merge Account,合併科目 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +53,Row {0}: For supplier {0} Email Address is required to send email,行{0}:對於供應商{0}的電郵地址發送電子郵件 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +76,Temporary Opening,臨時開通 ,Employee Leave Balance,員工休假餘額 -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +148,Balance for Account {0} must always be {1},帳戶{0}的餘額必須始終為{1} +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +148,Balance for Account {0} must always be {1},科目{0}的餘額必須始終為{1} DocType: Patient Appointment,More Info,更多訊息 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +181,Valuation Rate required for Item in row {0},行對項目所需的估值速率{0} DocType: Supplier Scorecard,Scorecard Actions,記分卡操作 @@ -1841,7 +1841,7 @@ DocType: Purchase Invoice Item,Item Tax Rate,項目稅率 apps/erpnext/erpnext/regional/report/eway_bill/eway_bill.py +176,From Party Name,來自黨名 DocType: Student Group Student,Group Roll Number,組卷編號 DocType: Student Group Student,Group Roll Number,組卷編號 -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +177,"For {0}, only credit accounts can be linked against another debit entry",{0},只有貸方帳戶可以連接另一個借方分錄 +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +177,"For {0}, only credit accounts can be linked against another debit entry",{0},只有貸方科目可以連接另一個借方分錄 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +660,Delivery Note {0} is not submitted,送貨單{0}未提交 apps/erpnext/erpnext/stock/get_item_details.py +167,Item {0} must be a Sub-contracted Item,項{0}必須是一個小項目簽約 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +44,Capital Equipments,資本設備 @@ -1856,7 +1856,7 @@ DocType: Employee,Department and Grade,部門和年級 DocType: Sales Invoice Item,Edit Description,編輯說明 ,Team Updates,團隊更新 apps/erpnext/erpnext/accounts/doctype/payment_order/payment_order.js +39,For Supplier,對供應商 -DocType: Account,Setting Account Type helps in selecting this Account in transactions.,設置帳戶類型有助於在交易中選擇該帳戶。 +DocType: Account,Setting Account Type helps in selecting this Account in transactions.,設置會計科目類型有助於在交易中選擇該科目。 DocType: Purchase Invoice,Grand Total (Company Currency),總計(公司貨幣) apps/erpnext/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js +9,Create Print Format,創建打印格式 apps/erpnext/erpnext/education/doctype/fee_schedule/fee_schedule_list.js +5,Fee Created,創建費用 @@ -1914,7 +1914,7 @@ DocType: Stock Settings,Naming Series Prefix,命名系列前綴 DocType: Appraisal Template Goal,Appraisal Template Goal,考核目標模板 DocType: Salary Component,Earning,盈利 DocType: Supplier Scorecard,Scoring Criteria,評分標準 -DocType: Purchase Invoice,Party Account Currency,黨的賬戶幣種 +DocType: Purchase Invoice,Party Account Currency,黨的科目幣種 DocType: Delivery Trip,Total Estimated Distance,總估計距離 ,BOM Browser,BOM瀏覽器 apps/erpnext/erpnext/templates/emails/training_event.html +13,Please update your status for this training event,請更新此培訓活動的狀態 @@ -1929,7 +1929,7 @@ DocType: Inpatient Occupancy,Check In,報到 DocType: Maintenance Schedule Item,No of Visits,沒有訪問量的 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +165,Maintenance Schedule {0} exists against {1},針對{1}存在維護計劃{0} apps/erpnext/erpnext/education/doctype/student_applicant/student_applicant.js +36,Enrolling student,招生學生 -apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +33,Currency of the Closing Account must be {0},在關閉帳戶的貨幣必須是{0} +apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +33,Currency of the Closing Account must be {0},關閉科目的貨幣必須是{0} apps/erpnext/erpnext/hr/doctype/appraisal_template/appraisal_template.py +21,Sum of points for all goals should be 100. It is {0},對所有目標點的總和應該是100。{0} DocType: Project,Start and End Dates,開始和結束日期 DocType: Contract Template Fulfilment Terms,Contract Template Fulfilment Terms,合同模板履行條款 @@ -2027,7 +2027,7 @@ DocType: Job Opening,"Job profile, qualifications required etc.",所需的工作 DocType: Journal Entry Account,Account Balance,帳戶餘額 apps/erpnext/erpnext/config/accounts.py +179,Tax Rule for transactions.,稅收規則進行的交易。 DocType: Rename Tool,Type of document to rename.,的文件類型進行重命名。 -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +53,{0} {1}: Customer is required against Receivable account {2},{0} {1}:需要客戶對應收賬款{2} +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +53,{0} {1}: Customer is required against Receivable account {2},{0} {1}:需要客戶對應收帳款{2} DocType: Purchase Invoice,Total Taxes and Charges (Company Currency),總稅費和費用(公司貨幣) DocType: Weather,Weather Parameter,天氣參數 apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js +76,Show unclosed fiscal year's P&L balances,顯示未關閉的會計年度的盈虧平衡 @@ -2036,8 +2036,8 @@ apps/erpnext/erpnext/regional/india/utils.py +179,House rented dates should be a DocType: Clinical Procedure Template,Collection Details,收集細節 DocType: POS Profile,Allow Print Before Pay,付款前允許打印 DocType: Linked Soil Texture,Linked Soil Texture,連接的土壤紋理 -DocType: Shipping Rule,Shipping Account,送貨帳戶 -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +93,{0} {1}: Account {2} is inactive,{0} {1}帳戶{2}無效 +DocType: Shipping Rule,Shipping Account,送貨科目 +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +93,{0} {1}: Account {2} is inactive,{0} {1}科目{2}無效 apps/erpnext/erpnext/utilities/activation.py +82,Make Sales Orders to help you plan your work and deliver on-time,製作銷售訂單,以幫助你計劃你的工作和按時交付 DocType: Bank Statement Transaction Entry,Bank Transaction Entries,銀行交易分錄 DocType: Quality Inspection,Readings,閱讀 @@ -2130,7 +2130,7 @@ DocType: Timesheet Detail,Expected Hrs,預計的小時數 apps/erpnext/erpnext/config/non_profit.py +28,Memebership Details,Memebership細節 DocType: Leave Block List,Block Holidays on important days.,重要的日子中封鎖假期。 apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js +194,Please input all required Result Value(s),請輸入所有必需的結果值(s) -apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js +142,Accounts Receivable Summary,應收賬款匯總 +apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js +142,Accounts Receivable Summary,應收帳款匯總 DocType: POS Closing Voucher,Linked Invoices,鏈接的發票 DocType: Loan,Monthly Repayment Amount,每月還款額 apps/erpnext/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool_dashboard.html +9,Opening Invoices,打開發票 @@ -2257,11 +2257,11 @@ DocType: Loan,Applicant Type,申請人類型 DocType: Purchase Invoice,03-Deficiency in services,03-服務不足 DocType: Healthcare Settings,Default Medical Code Standard,默認醫療代碼標準 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +267,Purchase Receipt {0} is not submitted,採購入庫單{0}未提交 -DocType: Company,Default Payable Account,預設應付賬款 +DocType: Company,Default Payable Account,預設應付帳款科目 apps/erpnext/erpnext/config/website.py +17,"Settings for online shopping cart such as shipping rules, price list etc.",設定線上購物車,如航運規則,價格表等 apps/erpnext/erpnext/controllers/website_list_for_contact.py +113,{0}% Billed,{0}%已開立帳單 apps/erpnext/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py +73,Reserved Qty,保留數量 -DocType: Party Account,Party Account,黨的帳戶 +DocType: Party Account,Party Account,參與者科目 apps/erpnext/erpnext/hr/doctype/staffing_plan/staffing_plan.py +142,Please select Company and Designation,請選擇公司和指定 apps/erpnext/erpnext/config/setup.py +116,Human Resources,人力資源 apps/erpnext/erpnext/education/doctype/student_applicant/student_applicant.js +17,Reject,拒絕 @@ -2283,7 +2283,7 @@ DocType: Customer,Default Price List,預設價格表 apps/erpnext/erpnext/assets/doctype/asset/asset.py +492,Asset Movement record {0} created,資產運動記錄{0}創建 apps/erpnext/erpnext/utilities/page/leaderboard/leaderboard.js +175,No items found.,未找到任何項目。 apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +51,You cannot delete Fiscal Year {0}. Fiscal Year {0} is set as default in Global Settings,您不能刪除會計年度{0}。會計年度{0}設置為默認的全局設置 -DocType: Share Transfer,Equity/Liability Account,股票/負債賬戶 +DocType: Share Transfer,Equity/Liability Account,庫存/負債科目 apps/erpnext/erpnext/setup/doctype/customer_group/customer_group.py +20,A customer with the same name already exists,一個同名的客戶已經存在 DocType: Contract,Inactive,待用 apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.js +224,This will submit Salary Slips and create accrual Journal Entry. Do you want to proceed?,這將提交工資單,並創建權責發生製日記賬分錄。你想繼續嗎? @@ -2292,7 +2292,7 @@ DocType: Purchase Order,Order Confirmation No,訂單確認號 DocType: Purchase Invoice,Eligibility For ITC,適用於ITC的資格 DocType: Journal Entry,Entry Type,條目類型 ,Customer Credit Balance,客戶信用平衡 -apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +82,Net Change in Accounts Payable,應付賬款淨額變化 +apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +82,Net Change in Accounts Payable,應付帳款淨額變化 apps/erpnext/erpnext/selling/doctype/customer/customer.py +257,Credit limit has been crossed for customer {0} ({1}/{2}),客戶{0}({1} / {2})的信用額度已超過 apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +42,Customer required for 'Customerwise Discount',需要' Customerwise折扣“客戶 apps/erpnext/erpnext/config/accounts.py +136,Update bank payment dates with journals.,更新與日記帳之銀行付款日期。 @@ -2313,7 +2313,7 @@ DocType: Special Test Template,Result Component,結果組件 apps/erpnext/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js +46,Warranty Claim,保修索賠 ,Lead Details,潛在客戶詳情 DocType: Salary Slip,Loan repayment,償還借款 -DocType: Share Transfer,Asset Account,資產賬戶 +DocType: Share Transfer,Asset Account,資產科目 DocType: Purchase Invoice,End date of current invoice's period,當前發票的期限的最後一天 DocType: Pricing Rule,Applicable For,適用 DocType: Lab Test,Technician Name,技術員姓名 @@ -2347,7 +2347,7 @@ DocType: Leave Type,Earned Leave,獲得休假 DocType: Employee,Salary Details,薪資明細 DocType: Territory,Territory Manager,區域經理 DocType: Packed Item,To Warehouse (Optional),倉庫(可選) -DocType: GST Settings,GST Accounts,GST賬戶 +DocType: GST Settings,GST Accounts,GST科目 DocType: Payment Entry,Paid Amount (Company Currency),支付的金額(公司貨幣) DocType: Purchase Invoice,Additional Discount,更多優惠 DocType: Selling Settings,Selling Settings,銷售設置 @@ -2382,12 +2382,12 @@ DocType: Material Request,Transferred,轉入 DocType: Vehicle,Doors,門 apps/erpnext/erpnext/setup/setup_wizard/operations/defaults_setup.py +118,ERPNext Setup Complete!,ERPNext設定完成! DocType: Healthcare Settings,Collect Fee for Patient Registration,收取病人登記費 -apps/erpnext/erpnext/stock/doctype/item/item.py +737,Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item,股票交易後不能更改屬性。創建一個新項目並將庫存轉移到新項目 +apps/erpnext/erpnext/stock/doctype/item/item.py +737,Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item,庫存交易後不能更改屬性。創建一個新項目並將庫存轉移到新項目 DocType: Course Assessment Criteria,Weightage,權重 DocType: Purchase Invoice,Tax Breakup,稅收分解 DocType: Employee,Joining Details,加入詳情 DocType: Member,Non Profit Member,非盈利會員 -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +67,{0} {1}: Cost Center is required for 'Profit and Loss' account {2}. Please set up a default Cost Center for the Company.,{0} {1}:需要的損益“賬戶成本中心{2}。請設置為公司默認的成本中心。 +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +67,{0} {1}: Cost Center is required for 'Profit and Loss' account {2}. Please set up a default Cost Center for the Company.,{0} {1}:需要的損益“科目成本中心{2}。請設置為公司默認的成本中心。 apps/erpnext/erpnext/selling/doctype/customer/customer.py +175,A Customer Group exists with same name please change the Customer name or rename the Customer Group,客戶群組存在相同名稱,請更改客戶名稱或重新命名客戶群組 DocType: Location,Area,區 apps/erpnext/erpnext/public/js/templates/contact_list.html +37,New Contact,新建聯絡人 @@ -2474,11 +2474,11 @@ apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +901,Discount a apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center_tree.js +26,"Number of new Cost Center, it will be included in the cost center name as a prefix",新成本中心的數量,它將作為前綴包含在成本中心名稱中 DocType: Sales Order,To Deliver and Bill,準備交貨及開立發票 DocType: Student Group,Instructors,教師 -DocType: GL Entry,Credit Amount in Account Currency,在賬戶幣金額 +DocType: GL Entry,Credit Amount in Account Currency,在科目幣金額 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +631,BOM {0} must be submitted,BOM {0}必須提交 DocType: Authorization Control,Authorization Control,授權控制 apps/erpnext/erpnext/controllers/buying_controller.py +416,Row #{0}: Rejected Warehouse is mandatory against rejected Item {1},行#{0}:拒絕倉庫是強制性的反對否決項{1} -apps/erpnext/erpnext/controllers/stock_controller.py +96,"Warehouse {0} is not linked to any account, please mention the account in the warehouse record or set default inventory account in company {1}.",倉庫{0}未與任何帳戶關聯,請在倉庫記錄中提及該帳戶,或在公司{1}中設置默認庫存帳戶。 +apps/erpnext/erpnext/controllers/stock_controller.py +96,"Warehouse {0} is not linked to any account, please mention the account in the warehouse record or set default inventory account in company {1}.",倉庫{0}未與任何科目關聯,請在倉庫記錄中設定科目,或在公司{1}中設置默認庫存科目。 apps/erpnext/erpnext/utilities/activation.py +81,Manage your orders,管理您的訂單 DocType: Work Order Operation,Actual Time and Cost,實際時間和成本 apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +57,Material Request of maximum {0} can be made for Item {1} against Sales Order {2},針對銷售訂單{2}的項目{1},最多可以有 {0} 被完成。 @@ -2514,14 +2514,14 @@ DocType: SMS Center,Create Receiver List,創建接收器列表 apps/erpnext/erpnext/assets/doctype/asset/asset.py +98,Available-for-use Date should be after purchase date,可供使用的日期應在購買日期之後 DocType: Vehicle,Wheels,車輪 DocType: Packing Slip,To Package No.,以包號 -DocType: Sales Invoice Item,Deferred Revenue Account,遞延收入帳戶 +DocType: Sales Invoice Item,Deferred Revenue Account,遞延收入科目 DocType: Production Plan,Material Requests,材料要求 DocType: Warranty Claim,Issue Date,發行日期 DocType: Activity Cost,Activity Cost,項目成本 DocType: Sales Invoice Timesheet,Timesheet Detail,詳細時間表 DocType: Purchase Receipt Item Supplied,Consumed Qty,消耗的數量 apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +52,Telecommunications,電信 -apps/erpnext/erpnext/accounts/party.py +292,Billing currency must be equal to either default company's currency or party account currency,帳單貨幣必須等於默認公司的貨幣或帳戶幣種 +apps/erpnext/erpnext/accounts/party.py +292,Billing currency must be equal to either default company's currency or party account currency,帳單貨幣必須等於默認公司的貨幣或科目幣種 DocType: Packing Slip,Indicates that the package is a part of this delivery (Only Draft),表示該包是這個交付的一部分(僅草案) apps/erpnext/erpnext/controllers/accounts_controller.py +786,Row {0}: Due Date cannot be before posting date,行{0}:到期日期不能在發布日期之前 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.js +37,Make Payment Entry,製作付款分錄 @@ -2535,7 +2535,7 @@ apps/erpnext/erpnext/config/accounts.py +209,Tree of financial Cost Centers.,財 apps/erpnext/erpnext/regional/report/eway_bill/eway_bill.py +151,Sub Type,子類型 DocType: Serial No,Delivery Document No,交貨證明文件號碼 DocType: Sales Order Item,Ensure Delivery Based on Produced Serial No,確保基於生產的序列號的交貨 -apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +197,Please set 'Gain/Loss Account on Asset Disposal' in Company {0},請公司制定“關於資產處置收益/損失帳戶”{0} +apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +197,Please set 'Gain/Loss Account on Asset Disposal' in Company {0},請公司制定“關於資產處置收益/損失科目”{0} DocType: Landed Cost Voucher,Get Items From Purchase Receipts,從採購入庫單取得項目 DocType: Serial No,Creation Date,創建日期 apps/erpnext/erpnext/assets/doctype/asset_movement/asset_movement.py +55,Target Location is required for the asset {0},目標位置是資產{0}所必需的 @@ -2569,7 +2569,7 @@ DocType: Bank Guarantee,Margin Money,保證金 DocType: Budget,Budget,預算 apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js +83,Set Open,設置打開 apps/erpnext/erpnext/stock/doctype/item/item.py +287,Fixed Asset Item must be a non-stock item.,固定資產項目必須是一個非庫存項目。 -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +60,"Budget cannot be assigned against {0}, as it's not an Income or Expense account",財政預算案不能對{0}指定的,因為它不是一個收入或支出帳戶 +apps/erpnext/erpnext/accounts/doctype/budget/budget.py +60,"Budget cannot be assigned against {0}, as it's not an Income or Expense account",財政預算案不能對{0}指定的,因為它不是一個收入或支出科目 apps/erpnext/erpnext/hr/utils.py +228,Max exemption amount for {0} is {1},{0}的最大免除金額為{1} apps/erpnext/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py +51,Achieved,已實現 DocType: Student Admission,Application Form Route,申請表路線 @@ -2644,15 +2644,15 @@ DocType: Loan Application,Total Payable Amount,合計應付額 DocType: Task,Expected Time (in hours),預期時間(以小時計) DocType: Item Reorder,Check in (group),檢查(組) ,Qty to Order,訂購數量 -DocType: Period Closing Voucher,"The account head under Liability or Equity, in which Profit/Loss will be booked",負債或權益下的帳戶頭,其中利潤/虧損將被黃牌警告 -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +44,Another Budget record '{0}' already exists against {1} '{2}' and account '{3}' for fiscal year {4},對於財務年度{4},{1}'{2}'和帳戶“{3}”已存在另一個預算記錄“{0}” +DocType: Period Closing Voucher,"The account head under Liability or Equity, in which Profit/Loss will be booked",負債或權益下的科目頭,其中利潤/虧損將被黃牌警告 +apps/erpnext/erpnext/accounts/doctype/budget/budget.py +44,Another Budget record '{0}' already exists against {1} '{2}' and account '{3}' for fiscal year {4},對於財務年度{4},{1}'{2}'和科目“{3}”已存在另一個預算記錄“{0}” apps/erpnext/erpnext/config/projects.py +36,Gantt chart of all tasks.,所有任務的甘特圖。 DocType: Opportunity,Mins to First Response,分鐘為第一個反應 DocType: Pricing Rule,Margin Type,保證金類型 apps/erpnext/erpnext/projects/doctype/project/project_dashboard.html +15,{0} hours,{0}小時 DocType: Course,Default Grading Scale,默認等級規模 DocType: Appraisal,For Employee Name,對於員工姓名 -DocType: Woocommerce Settings,Tax Account,稅收帳戶 +DocType: Woocommerce Settings,Tax Account,稅收科目 DocType: C-Form Invoice Detail,Invoice No,發票號碼 DocType: Room,Room Name,房間名稱 DocType: Prescription Duration,Prescription Duration,處方時間 @@ -2704,7 +2704,7 @@ apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +389,Amount ,Quotation Trends,報價趨勢 apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +166,Item Group not mentioned in item master for item {0},項目{0}之項目主檔未提及之項目群組 DocType: GoCardless Mandate,GoCardless Mandate,GoCardless任務 -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +440,Debit To account must be a Receivable account,借方帳戶必須是應收帳款帳戶 +apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +440,Debit To account must be a Receivable account,借方科目必須是應收帳款科目 DocType: Shipping Rule,Shipping Amount,航運量 DocType: Supplier Scorecard Period,Period Score,期間得分 apps/erpnext/erpnext/public/js/event.js +19,Add Customers,添加客戶 @@ -2777,7 +2777,7 @@ apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +22,{0} is now apps/erpnext/erpnext/projects/doctype/task/task.js +45,Expense Claims,報銷 DocType: Employee Tax Exemption Declaration,Total Exemption Amount,免稅總額 ,BOM Search,BOM搜索 -DocType: Project,Total Consumed Material Cost (via Stock Entry),總消耗材料成本(通過股票輸入) +DocType: Project,Total Consumed Material Cost (via Stock Entry),總消耗材料成本(通過庫存輸入) DocType: Subscription,Subscription Period,訂閱期 apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.js +169,To Date cannot be less than From Date,迄今不能少於起始日期 DocType: Item,"Publish ""In Stock"" or ""Not in Stock"" on Hub based on stock available in this warehouse.",基於倉庫中的庫存,在Hub上發布“庫存”或“庫存”。 @@ -2786,7 +2786,7 @@ apps/erpnext/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_ DocType: Workstation,Wages per hour,時薪 apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +47,Stock balance in Batch {0} will become negative {1} for Item {2} at Warehouse {3},在批量庫存餘額{0}將成為負{1}的在倉庫項目{2} {3} apps/erpnext/erpnext/templates/emails/reorder_item.html +1,Following Material Requests have been raised automatically based on Item's re-order level,下列資料的要求已自動根據項目的重新排序水平的提高 -apps/erpnext/erpnext/controllers/accounts_controller.py +376,Account {0} is invalid. Account Currency must be {1},帳戶{0}是無效的。帳戶貨幣必須是{1} +apps/erpnext/erpnext/controllers/accounts_controller.py +376,Account {0} is invalid. Account Currency must be {1},科目{0}是無效的。科目貨幣必須是{1} apps/erpnext/erpnext/hr/doctype/salary_structure_assignment/salary_structure_assignment.py +31,From Date {0} cannot be after employee's relieving Date {1},起始日期{0}不能在員工解除日期之後{1} DocType: Supplier,Is Internal Supplier,是內部供應商 DocType: Employee,Create User Permission,創建用戶權限 @@ -2813,7 +2813,7 @@ apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.js +64,disabled use apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +970,Quotation,報價 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +1041,Cannot set a received RFQ to No Quote,無法將收到的詢價單設置為無報價 DocType: Salary Slip,Total Deduction,扣除總額 -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +22,Select an account to print in account currency,選擇一個賬戶以賬戶貨幣進行打印 +apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +22,Select an account to print in account currency,選擇一個科目以科目貨幣進行打印 ,Production Analytics,生產Analytics(分析) apps/erpnext/erpnext/healthcare/doctype/patient/patient_dashboard.py +6,This is based on transactions against this Patient. See timeline below for details,這是基於對這個病人的交易。有關詳情,請參閱下面的時間表 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +136,Item {0} has already been returned,項{0}已被退回 @@ -2852,7 +2852,7 @@ DocType: BOM,Scrap Material Cost,廢料成本 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +243,Serial No {0} does not belong to any Warehouse,序列號{0}不屬於任何倉庫 DocType: Grant Application,Email Notification Sent,電子郵件通知已發送 DocType: Purchase Invoice,In Words (Company Currency),大寫(Company Currency) -apps/erpnext/erpnext/accounts/doctype/bank_account/bank_account.py +24,Company is manadatory for company account,公司是公司賬戶的管理者 +apps/erpnext/erpnext/accounts/doctype/bank_account/bank_account.py +24,Company is manadatory for company account,公司是公司科目的管理者 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +1092,"Item Code, warehouse, quantity are required on row",在行上需要項目代碼,倉庫,數量 DocType: Bank Guarantee,Supplier,供應商 apps/erpnext/erpnext/hr/doctype/department/department.js +9,This is a root department and cannot be edited.,這是根部門,無法編輯。 @@ -2861,7 +2861,7 @@ apps/erpnext/erpnext/crm/report/lead_conversion_time/lead_conversion_time.py +53 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +113,Miscellaneous Expenses,雜項開支 DocType: Global Defaults,Default Company,預設公司 DocType: Company,Transactions Annual History,交易年曆 -apps/erpnext/erpnext/controllers/stock_controller.py +231,Expense or Difference account is mandatory for Item {0} as it impacts overall stock value,對項目{0}而言, 費用或差異帳戶是強制必填的,因為它影響整個庫存總值。 +apps/erpnext/erpnext/controllers/stock_controller.py +231,Expense or Difference account is mandatory for Item {0} as it impacts overall stock value,對項目{0}而言, 費用或差異科目是強制必填的,因為它影響整個庫存總值。 DocType: Bank,Bank Name,銀行名稱 apps/erpnext/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +78,-Above,-以上 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +1301,Leave the field empty to make purchase orders for all suppliers,將該字段留空以為所有供應商下達採購訂單 @@ -2891,7 +2891,7 @@ DocType: Payment Entry,Unallocated Amount,未分配金額 apps/erpnext/erpnext/accounts/doctype/budget/budget.py +77,Please enable Applicable on Purchase Order and Applicable on Booking Actual Expenses,請啟用適用於採購訂單並適用於預訂實際費用 apps/erpnext/erpnext/templates/includes/product_page.js +101,Cannot find a matching Item. Please select some other value for {0}.,無法找到匹配的項目。請選擇其他值{0}。 DocType: POS Profile,Taxes and Charges,稅收和收費 -DocType: Item,"A Product or a Service that is bought, sold or kept in stock.",產品或服務已購買,出售或持有的股票。 +DocType: Item,"A Product or a Service that is bought, sold or kept in stock.",產品或服務已購買,出售或持有的庫存。 apps/erpnext/erpnext/hr/page/team_updates/team_updates.js +44,No more updates,沒有更多的更新 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +184,Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row,不能選擇充電式為'在上一行量'或'在上一行總'的第一行 apps/erpnext/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_dashboard.py +6,This covers all scorecards tied to this Setup,這涵蓋了與此安裝程序相關的所有記分卡 @@ -2929,7 +2929,7 @@ apps/erpnext/erpnext/education/doctype/student_group_creation_tool/student_group apps/erpnext/erpnext/education/doctype/student_group_creation_tool/student_group_creation_tool.py +77,{0} Student Groups created.,{0}創建學生組。 DocType: Sales Invoice,Total Billing Amount,總結算金額 apps/erpnext/erpnext/education/doctype/fee_schedule/fee_schedule.py +50,Program in the Fee Structure and Student Group {0} are different.,費用結構和學生組{0}中的課程是不同的。 -DocType: Bank Statement Transaction Entry,Receivable Account,應收賬款 +DocType: Bank Statement Transaction Entry,Receivable Account,應收帳款 apps/erpnext/erpnext/stock/doctype/item_price/item_price.py +31,Valid From Date must be lesser than Valid Upto Date.,有效起始日期必須小於有效起始日期。 apps/erpnext/erpnext/controllers/accounts_controller.py +689,Row #{0}: Asset {1} is already {2},行#{0}:資產{1}已經是{2} DocType: Quotation Item,Stock Balance,庫存餘額 @@ -2939,13 +2939,13 @@ DocType: Expense Claim Detail,Expense Claim Detail,報銷詳情 DocType: Purchase Invoice,TRIPLICATE FOR SUPPLIER,供應商提供服務 DocType: Exchange Rate Revaluation Account,New Balance In Base Currency,基礎貨幣的新平衡 DocType: Crop Cycle,This will be day 1 of the crop cycle,這將是作物週期的第一天 -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +915,Please select correct account,請選擇正確的帳戶 +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +915,Please select correct account,請選擇正確的科目 DocType: Salary Structure Assignment,Salary Structure Assignment,薪酬結構分配 DocType: Purchase Invoice Item,Weight UOM,重量計量單位 apps/erpnext/erpnext/config/accounts.py +435,List of available Shareholders with folio numbers,包含folio號碼的可用股東名單 DocType: Salary Structure Employee,Salary Structure Employee,薪資結構員工 apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.js +62,Show Variant Attributes,顯示變體屬性 -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +48,The payment gateway account in plan {0} is different from the payment gateway account in this payment request,計劃{0}中的支付網關帳戶與此付款請求中的支付網關帳戶不同 +apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +48,The payment gateway account in plan {0} is different from the payment gateway account in this payment request,計劃{0}中的支付閘道科目與此付款請求中的支付閘道科目不同 DocType: Course,Course Name,課程名 apps/erpnext/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py +50,No Tax Withholding data found for the current Fiscal Year.,未找到當前財年的預扣稅數據。 DocType: Employee Leave Approver,Users who can approve a specific employee's leave applications,用戶可以批准特定員工的休假申請 @@ -2989,14 +2989,14 @@ apps/erpnext/erpnext/templates/pages/product_search.html +3,Product Search,產 DocType: Cashier Closing,To Time,要時間 apps/erpnext/erpnext/hr/utils.py +202,) for {0},)為{0} DocType: Authorization Rule,Approving Role (above authorized value),批准角色(上述授權值) -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +147,Credit To account must be a Payable account,信用帳戶必須是應付賬款 +apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +147,Credit To account must be a Payable account,信用科目必須是應付帳款 DocType: Loan,Total Amount Paid,總金額支付 DocType: Asset,Insurance End Date,保險終止日期 apps/erpnext/erpnext/education/doctype/student_applicant/student_applicant.py +43,Please select Student Admission which is mandatory for the paid student applicant,請選擇付費學生申請者必須入學的學生 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +370,BOM recursion: {0} cannot be parent or child of {2},BOM遞歸: {0}不能父母或兒童{2} apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center_tree.js +40,Budget List,預算清單 DocType: Work Order Operation,Completed Qty,完成數量 -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +180,"For {0}, only debit accounts can be linked against another credit entry",{0},只有借方帳戶可以連接另一個貸方分錄 +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +180,"For {0}, only debit accounts can be linked against another credit entry",{0},只有借方科目可以連接另一個貸方分錄 DocType: Manufacturing Settings,Allow Overtime,允許加班 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +149,"Serialized Item {0} cannot be updated using Stock Reconciliation, please use Stock Entry",序列化項目{0}無法使用庫存調節更新,請使用庫存條目 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +149,"Serialized Item {0} cannot be updated using Stock Reconciliation, please use Stock Entry",序列化項目{0}無法使用庫存調節更新,請使用庫存條目 @@ -3010,7 +3010,7 @@ apps/erpnext/erpnext/config/integrations.py +13,GoCardless payment gateway setti apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +129,Exchange Gain/Loss,兌換收益/損失 DocType: Opportunity,Lost Reason,失落的原因 DocType: Amazon MWS Settings,Enable Amazon,啟用亞馬遜 -apps/erpnext/erpnext/controllers/accounts_controller.py +322,Row #{0}: Account {1} does not belong to company {2},行#{0}:帳戶{1}不屬於公司{2} +apps/erpnext/erpnext/controllers/accounts_controller.py +322,Row #{0}: Account {1} does not belong to company {2},行#{0}:科目{1}不屬於公司{2} apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py +30,Unable to find DocType {0},無法找到DocType {0} DocType: Quality Inspection,Sample Size,樣本大小 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +47,Please enter Receipt Document,請輸入收據憑證 @@ -3056,7 +3056,7 @@ DocType: Timesheet Detail,Costing Amount,成本核算金額 DocType: Student Admission Program,Application Fee,報名費 apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.js +75,Submit Salary Slip,提交工資單 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js +13,On Hold,等候接聽 -DocType: Account,Inter Company Account,Inter公司帳戶 +DocType: Account,Inter Company Account,公司內帳戶 apps/erpnext/erpnext/stock/doctype/item_price/item_price.js +17,Import in Bulk,進口散裝 DocType: Sales Partner,Address & Contacts,地址及聯絡方式 DocType: SMS Log,Sender Name,發件人名稱 @@ -3108,7 +3108,7 @@ DocType: BOM,"Specify the operations, operating cost and give a unique Operation DocType: Travel Request,Any other details,任何其他細節 apps/erpnext/erpnext/controllers/status_updater.py +207,This document is over limit by {0} {1} for item {4}. Are you making another {3} against the same {2}?,這份文件是超過限制,通過{0} {1}項{4}。你在做另一個{3}對同一{2}? apps/erpnext/erpnext/public/js/controllers/transaction.js +1288,Please set recurring after saving,請設置保存後復發 -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +874,Select change amount account,選擇變化量賬戶 +apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +874,Select change amount account,選擇變化量科目 DocType: Purchase Invoice,Price List Currency,價格表之貨幣 DocType: Naming Series,User must always select,用戶必須始終選擇 DocType: Stock Settings,Allow Negative Stock,允許負庫存 @@ -3148,7 +3148,7 @@ apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +56,Group apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js +391,Are you sure you want to cancel this appointment?,你確定要取消這個預約嗎? DocType: Hotel Room Pricing Package,Hotel Room Pricing Package,酒店房間價格套餐 apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.js +42,Sales Pipeline,銷售渠道 -apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.py +167,Please set default account in Salary Component {0},請薪酬部分設置默認帳戶{0} +apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.py +167,Please set default account in Salary Component {0},請薪酬部分設置默認科目{0} apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +200,Please select BOM for Item in Row {0},請行選擇BOM為項目{0} apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js +13,Fetch Subscription Updates,獲取訂閱更新 apps/erpnext/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.py +28,Account {0} does not match with Company {1} in Mode of Account: {2},帳戶{0}與帳戶模式{2}中的公司{1}不符 @@ -3183,7 +3183,7 @@ apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +232,For Job apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +1556,Prescriptions,處方 DocType: Payment Gateway Account,Payment Account,付款帳號 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +1112,Please specify Company to proceed,請註明公司以處理 -apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +81,Net Change in Accounts Receivable,應收賬款淨額變化 +apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +81,Net Change in Accounts Receivable,應收帳款淨額變化 apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +66,Compensatory Off,補假 DocType: Job Offer,Accepted,接受的 DocType: POS Closing Voucher,Sales Invoices Summary,銷售發票摘要 @@ -3225,7 +3225,7 @@ DocType: Support Search Source,Result Preview Field,結果預覽字段 DocType: Item Price,Packing Unit,包裝單位 DocType: Subscription,Trialling,試用 DocType: Sales Invoice Item,Deferred Revenue,遞延收入 -DocType: Shopify Settings,Cash Account will used for Sales Invoice creation,現金帳戶將用於創建銷售發票 +DocType: Shopify Settings,Cash Account will used for Sales Invoice creation,現金科目將用於創建銷售發票 DocType: Employee Tax Exemption Declaration Category,Exemption Sub Category,豁免子類別 DocType: Member,Membership Expiry Date,會員到期日 apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +134,{0} must be negative in return document,{0}必須返回文檔中負 @@ -3355,17 +3355,17 @@ DocType: Employee Separation,Employee Separation,員工分離 DocType: BOM Item,Original Item,原始項目 DocType: Purchase Receipt Item,Recd Quantity,到貨數量 apps/erpnext/erpnext/education/doctype/program_enrollment/program_enrollment.py +64,Fee Records Created - {0},費紀錄創造 - {0} -DocType: Asset Category Account,Asset Category Account,資產類別的帳戶 +DocType: Asset Category Account,Asset Category Account,資產類別的科目 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +1024,Row #{0} (Payment Table): Amount must be positive,行#{0}(付款表):金額必須為正值 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +137,Cannot produce more Item {0} than Sales Order quantity {1},無法產生更多的項目{0}不是銷售訂單數量{1} apps/erpnext/erpnext/stock/doctype/item/item.js +446,Select Attribute Values,選擇屬性值 DocType: Purchase Invoice,Reason For Issuing document,簽發文件的原因 -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +583,Stock Entry {0} is not submitted,股票輸入{0}不提交 -DocType: Payment Reconciliation,Bank / Cash Account,銀行/現金帳戶 +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +583,Stock Entry {0} is not submitted,庫存輸入{0}不提交 +DocType: Payment Reconciliation,Bank / Cash Account,銀行/現金科目 apps/erpnext/erpnext/crm/doctype/lead/lead.py +47,Next Contact By cannot be same as the Lead Email Address,接著聯繫到不能相同鉛郵箱地址 DocType: Tax Rule,Billing City,結算城市 DocType: Asset,Manual,手冊 -DocType: Salary Component Account,Salary Component Account,薪金部分賬戶 +DocType: Salary Component Account,Salary Component Account,薪金部分科目 DocType: Global Defaults,Hide Currency Symbol,隱藏貨幣符號 apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.js +281,Sales Opportunities by Source,來源的銷售機會 apps/erpnext/erpnext/config/accounts.py +287,"e.g. Bank, Cash, Credit Card",例如:銀行,現金,信用卡 @@ -3449,7 +3449,7 @@ DocType: Purchase Invoice Item,Received Qty,到貨數量 DocType: Stock Entry Detail,Serial No / Batch,序列號/批次 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +359,Not Paid and Not Delivered,沒有支付,未送達 DocType: Product Bundle,Parent Item,父項目 -DocType: Account,Account Type,帳戶類型 +DocType: Account,Account Type,科目類型 DocType: Shopify Settings,Webhooks Details,Webhooks詳細信息 apps/erpnext/erpnext/templates/pages/projects.html +58,No time sheets,沒有考勤表 DocType: GoCardless Mandate,GoCardless Customer,GoCardless客戶 @@ -3476,7 +3476,7 @@ apps/erpnext/erpnext/manufacturing/doctype/job_card/job_card.js +26,Start Job, apps/erpnext/erpnext/assets/doctype/asset_movement/asset_movement.py +32,Serial no is required for the asset {0},資產{0}需要序列號 apps/erpnext/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.py +43,Disabled template must not be default template,殘疾人模板必須不能默認模板 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py +542,For row {0}: Enter planned qty,對於行{0}:輸入計劃的數量 -DocType: Account,Income Account,收入帳戶 +DocType: Account,Income Account,收入科目 DocType: Payment Request,Amount in customer's currency,量客戶的貨幣 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +880,Delivery,交貨 DocType: Stock Reconciliation Item,Current Qty,目前數量 @@ -3488,7 +3488,7 @@ DocType: Appraisal Goal,Key Responsibility Area,關鍵責任區 DocType: Delivery Trip,Distance UOM,距離UOM apps/erpnext/erpnext/utilities/activation.py +127,"Student Batches help you track attendance, assessments and fees for students",學生批幫助您跟踪學生的出勤,評估和費用 DocType: Payment Entry,Total Allocated Amount,總撥款額 -apps/erpnext/erpnext/setup/doctype/company/company.py +163,Set default inventory account for perpetual inventory,設置永久庫存的默認庫存帳戶 +apps/erpnext/erpnext/setup/doctype/company/company.py +163,Set default inventory account for perpetual inventory,設置永久庫存的默認庫存科目 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +261,"Cannot deliver Serial No {0} of item {1} as it is reserved to \ fullfill Sales Order {2}",無法提供項目{1}的序列號{0},因為它保留在\ fullfill銷售訂單{2}中 DocType: Item Reorder,Material Request Type,材料需求類型 @@ -3532,7 +3532,7 @@ DocType: Task,% Progress,%進展 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +130,Gain/Loss on Asset Disposal,在資產處置收益/損失 apps/erpnext/erpnext/education/doctype/program_enrollment_tool/program_enrollment_tool.js +24,"Only the Student Applicant with the status ""Approved"" will be selected in the table below.",下表中將只選擇狀態為“已批准”的學生申請人。 DocType: Tax Withholding Category,Rates,價格 -apps/erpnext/erpnext/regional/report/fichier_des_ecritures_comptables_[fec]/fichier_des_ecritures_comptables_[fec].py +121,Account number for account {0} is not available.
Please setup your Chart of Accounts correctly.,帳戶{0}的帳戶號碼不可用。
請正確設置您的會計科目表。 +apps/erpnext/erpnext/regional/report/fichier_des_ecritures_comptables_[fec]/fichier_des_ecritures_comptables_[fec].py +121,Account number for account {0} is not available.
Please setup your Chart of Accounts correctly.,科目{0}的科目號碼不可用。
請正確設置您的會計科目表。 DocType: Task,Depends on Tasks,取決於任務 apps/erpnext/erpnext/config/selling.py +36,Manage Customer Group Tree.,管理客戶群組樹。 DocType: Normal Test Items,Result Value,結果值 @@ -3657,7 +3657,7 @@ Examples: DocType: Issue,Issue Type,發行類型 DocType: Attendance,Leave Type,休假類型 DocType: Purchase Invoice,Supplier Invoice Details,供應商發票明細 -apps/erpnext/erpnext/controllers/stock_controller.py +237,Expense / Difference account ({0}) must be a 'Profit or Loss' account,費用/差異帳戶({0})必須是一個'溢利或虧損的帳戶 +apps/erpnext/erpnext/controllers/stock_controller.py +237,Expense / Difference account ({0}) must be a 'Profit or Loss' account,費用/差異科目({0})必須是一個'收益或損失'的科目 DocType: Project,Copied From,複製自 DocType: Project,Copied From,複製自 apps/erpnext/erpnext/projects/doctype/timesheet/timesheet.py +265,Invoice already created for all billing hours,發票已在所有結算時間創建 @@ -3701,7 +3701,7 @@ DocType: Asset,In Maintenance,在維護中 DocType: Amazon MWS Settings,Click this button to pull your Sales Order data from Amazon MWS.,單擊此按鈕可從亞馬遜MWS中提取銷售訂單數據。 DocType: Purchase Invoice,Overdue,過期的 DocType: Account,Stock Received But Not Billed,庫存接收,但不付款 -apps/erpnext/erpnext/accounts/doctype/account/account.py +91,Root Account must be a group,根帳戶必須是一組 +apps/erpnext/erpnext/accounts/doctype/account/account.py +91,Root Account must be a group,Root 科目必須是群組科目 DocType: Drug Prescription,Drug Prescription,藥物處方 DocType: Loan,Repaid/Closed,償還/關閉 DocType: Item,Total Projected Qty,預計總數量 @@ -3737,7 +3737,7 @@ apps/erpnext/erpnext/stock/doctype/item/item.py +578,Item {0} does not exist,項 DocType: Sales Invoice,Customer Address,客戶地址 DocType: Loan,Loan Details,貸款詳情 apps/erpnext/erpnext/setup/setup_wizard/setup_wizard.py +62,Failed to setup post company fixtures,未能設置公司固定裝置 -DocType: Company,Default Inventory Account,默認庫存帳戶 +DocType: Company,Default Inventory Account,默認庫存科目 apps/erpnext/erpnext/accounts/doctype/share_transfer/share_transfer.py +193,The folio numbers are not matching,作品集編號不匹配 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +304,Payment Request for {0},付款申請{0} DocType: Item Barcode,Barcode Type,條碼類型 @@ -3786,7 +3786,7 @@ DocType: Antibiotic,Healthcare Administrator,醫療管理員 apps/erpnext/erpnext/utilities/user_progress.py +47,Set a Target,設定目標 DocType: Dosage Strength,Dosage Strength,劑量強度 DocType: Healthcare Practitioner,Inpatient Visit Charge,住院訪問費用 -DocType: Account,Expense Account,費用帳戶 +DocType: Account,Expense Account,費用科目 apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +49,Software,軟件 apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +155,Colour,顏色 DocType: Assessment Plan Criteria,Assessment Plan Criteria,評估計劃標準 @@ -3860,7 +3860,7 @@ DocType: Contract,Fulfilment Terms,履行條款 DocType: Sales Invoice,Time Sheet List,時間表列表 DocType: Employee,You can enter any date manually,您可以手動輸入任何日期 DocType: Healthcare Settings,Result Printed,結果打印 -DocType: Asset Category Account,Depreciation Expense Account,折舊費用帳戶 +DocType: Asset Category Account,Depreciation Expense Account,折舊費用科目 apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +191,Probationary Period,試用期 DocType: Purchase Taxes and Charges Template,Is Inter State,是國際 apps/erpnext/erpnext/config/hr.py +269,Shift Management,班次管理 @@ -3900,7 +3900,7 @@ apps/erpnext/erpnext/hr/utils.py +154,Future dates not allowed,未來的日期 apps/erpnext/erpnext/support/page/support_analytics/support_analytics.js +30,Select Fiscal Year,選擇財政年度 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +119,Expected Delivery Date should be after Sales Order Date,預計交貨日期應在銷售訂單日期之後 apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +43,Reorder Level,重新排序級別 -DocType: Company,Chart Of Accounts Template,圖表帳戶模板 +DocType: Company,Chart Of Accounts Template,會計科目模板 apps/erpnext/erpnext/assets/doctype/asset/asset.py +80,Update stock must be enable for the purchase invoice {0},必須為購買發票{0}啟用更新庫存 apps/erpnext/erpnext/stock/get_item_details.py +405,Item Price updated for {0} in Price List {1},項目價格更新{0}價格表{1} DocType: Salary Structure,Salary breakup based on Earning and Deduction.,工資分手基於盈利和演繹。 @@ -3957,7 +3957,7 @@ apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +40,Cost Center DocType: QuickBooks Migrator,Authorization URL,授權URL apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +376,Amount {0} {1} {2} {3},金額{0} {1} {2} {3} DocType: Account,Depreciation,折舊 -apps/erpnext/erpnext/accounts/doctype/share_transfer/share_transfer.py +103,The number of shares and the share numbers are inconsistent,股份數量和股票數量不一致 +apps/erpnext/erpnext/accounts/doctype/share_transfer/share_transfer.py +103,The number of shares and the share numbers are inconsistent,股份數量和庫存數量不一致 apps/erpnext/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py +50,Supplier(s),供應商(S) DocType: Employee Attendance Tool,Employee Attendance Tool,員工考勤工具 DocType: Guardian Student,Guardian Student,學生監護人 @@ -3981,8 +3981,8 @@ apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_p DocType: Restaurant Reservation,No of People,沒有人 apps/erpnext/erpnext/config/selling.py +164,Template of terms or contract.,模板條款或合同。 DocType: Bank Account,Address and Contact,地址和聯絡方式 -DocType: Cheque Print Template,Is Account Payable,為應付賬款 -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +306,Stock cannot be updated against Purchase Receipt {0},股票不能對外購入庫單進行更新{0} +DocType: Cheque Print Template,Is Account Payable,為應付帳款 +apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +306,Stock cannot be updated against Purchase Receipt {0},庫存不能對外購入庫單進行更新{0} DocType: Support Settings,Auto close Issue after 7 days,7天之後自動關閉問題 apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +85,"Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}",假,不是之前分配{0},因為休假餘額已經結轉轉發在未來的假期分配記錄{1} apps/erpnext/erpnext/accounts/party.py +350,Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s),註:由於/參考日期由{0}天超過了允許客戶的信用天數(S) @@ -4035,7 +4035,7 @@ apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +271,Closing apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +284,Serial No {0} not in stock,序列號{0}無貨 apps/erpnext/erpnext/config/selling.py +169,Tax template for selling transactions.,稅務模板賣出的交易。 DocType: Sales Invoice,Write Off Outstanding Amount,核銷額(億元) -apps/erpnext/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py +27,Account {0} does not match with Company {1},帳戶{0}與公司{1}不符 +apps/erpnext/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py +27,Account {0} does not match with Company {1},科目{0}與公司{1}不符 DocType: Education Settings,Current Academic Year,當前學年 DocType: Education Settings,Current Academic Year,當前學年 DocType: Stock Settings,Default Stock UOM,預設庫存計量單位 @@ -4055,13 +4055,13 @@ apps/erpnext/erpnext/crm/report/lead_conversion_time/lead_conversion_time.py +59 apps/erpnext/erpnext/controllers/accounts_controller.py +703,'Update Stock' cannot be checked for fixed asset sale,"""更新庫存"" 無法檢查固定資產銷售" DocType: Bank Reconciliation,Bank Reconciliation,銀行對帳 apps/erpnext/erpnext/templates/includes/footer/footer_extension.html +7,Get Updates,獲取更新 -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +97,{0} {1}: Account {2} does not belong to Company {3},{0} {1}帳戶{2}不屬於公司{3} +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +97,{0} {1}: Account {2} does not belong to Company {3},{0} {1}科目{2}不屬於公司{3} apps/erpnext/erpnext/stock/doctype/item/item.js +452,Select at least one value from each of the attributes.,從每個屬性中至少選擇一個值。 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py +164,Material Request {0} is cancelled or stopped,材料需求{0}被取消或停止 apps/erpnext/erpnext/regional/report/eway_bill/eway_bill.py +219,Dispatch State,派遣國 apps/erpnext/erpnext/config/hr.py +399,Leave Management,離開管理 apps/erpnext/erpnext/stock/doctype/item/item_dashboard.py +17,Groups,組 -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +51,Group by Account,以帳戶分群組 +apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +51,Group by Account,以科目分群組 DocType: Purchase Invoice,Hold Invoice,保留發票 apps/erpnext/erpnext/hr/doctype/employee_promotion/employee_promotion.js +37,Please select Employee,請選擇員工 apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +214,Lower Income,較低的收入 @@ -4069,7 +4069,7 @@ DocType: Restaurant Order Entry,Current Order,當前訂單 apps/erpnext/erpnext/assets/doctype/asset_movement/asset_movement.py +25,Number of serial nos and quantity must be the same,序列號和數量必須相同 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +275,Source and target warehouse cannot be same for row {0},列{0}的來源和目標倉庫不可相同 DocType: Account,Asset Received But Not Billed,已收到但未收費的資產 -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +244,"Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry",差異帳戶必須是資產/負債類型的帳戶,因為此庫存調整是一個開始分錄 +apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +244,"Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry",差異科目必須是資產/負債類型的科目,因為此庫存調整是一個開帳分錄 apps/erpnext/erpnext/hr/doctype/loan/loan.py +116,Disbursed Amount cannot be greater than Loan Amount {0},支付額不能超過貸款金額較大的{0} apps/erpnext/erpnext/utilities/user_progress.py +176,Go to Programs,轉到程序 apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +212,Row {0}# Allocated amount {1} cannot be greater than unclaimed amount {2},行{0}#分配的金額{1}不能大於無人認領的金額{2} @@ -4117,7 +4117,7 @@ apps/erpnext/erpnext/patches/v7_0/create_warehouse_nestedset.py +59,All Warehous apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +1303,No {0} found for Inter Company Transactions.,Inter公司沒有找到{0}。 DocType: Travel Itinerary,Rented Car,租車 apps/erpnext/erpnext/public/js/hub/components/profile_dialog.js +15,About your Company,關於貴公司 -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +144,Credit To account must be a Balance Sheet account,信用帳戶必須是資產負債表科目 +apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +144,Credit To account must be a Balance Sheet account,貸方科目必須是資產負債表科目 DocType: Donor,Donor,捐贈者 DocType: Global Defaults,Disable In Words,禁用詞 apps/erpnext/erpnext/stock/doctype/item/item.py +74,Item Code is mandatory because Item is not automatically numbered,產品編號是強制性的,因為項目沒有自動編號 @@ -4136,7 +4136,7 @@ apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +95,Row #{0 apps/erpnext/erpnext/manufacturing/doctype/bom/bom.js +84,Browse BOM,瀏覽BOM apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +165,Secured Loans,抵押貸款 DocType: Purchase Invoice,Edit Posting Date and Time,編輯投稿時間 -apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +106,Please set Depreciation related Accounts in Asset Category {0} or Company {1},請設置在資產類別{0}或公司折舊相關帳戶{1} +apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +106,Please set Depreciation related Accounts in Asset Category {0} or Company {1},請設置在資產類別{0}或公司折舊相關科目{1} DocType: Lab Test Groups,Normal Range,普通範圍 DocType: Academic Term,Academic Year,學年 apps/erpnext/erpnext/stock/report/item_variant_details/item_variant_details.py +79,Available Selling,可用銷售 @@ -4145,7 +4145,7 @@ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standar DocType: Purchase Invoice,N,ñ apps/erpnext/erpnext/education/report/assessment_plan_status/assessment_plan_status.py +175,Remaining,剩餘 DocType: Appraisal,Appraisal,評價 -DocType: Loan,Loan Account,貸款帳戶 +DocType: Loan,Loan Account,貸款科目 DocType: Purchase Invoice,GST Details,消費稅細節 apps/erpnext/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner_dashboard.py +6,This is based on transactions against this Healthcare Practitioner.,這是基於針對此醫療保健從業者的交易。 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +156,Email sent to supplier {0},電子郵件發送到供應商{0} @@ -4168,9 +4168,9 @@ apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation. apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +187,{0} not found for Item {1},找不到項目{1} {0} apps/erpnext/erpnext/utilities/user_progress.py +197,Go to Courses,去課程 DocType: Accounts Settings,Show Inclusive Tax In Print,在打印中顯示包含稅 -apps/erpnext/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py +17,"Bank Account, From Date and To Date are Mandatory",銀行賬戶,從日期到日期是強制性的 +apps/erpnext/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py +17,"Bank Account, From Date and To Date are Mandatory",銀行科目,從日期到日期是強制性的 apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.js +29,Message Sent,發送訊息 -apps/erpnext/erpnext/accounts/doctype/account/account.py +105,Account with child nodes cannot be set as ledger,帳戶與子節點不能被設置為分類帳 +apps/erpnext/erpnext/accounts/doctype/account/account.py +105,Account with child nodes cannot be set as ledger,科目與子節點不能被設置為分類帳 DocType: Sales Invoice,Rate at which Price list currency is converted to customer's base currency,價目表貨幣被換算成客戶基礎貨幣的匯率 DocType: Purchase Invoice Item,Net Amount (Company Currency),淨金額(公司貨幣) apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +223,Total advance amount cannot be greater than total sanctioned amount,總預付金額不得超過全部認可金額 @@ -4178,7 +4178,7 @@ DocType: Salary Slip,Hour Rate,小時率 DocType: Stock Settings,Item Naming By,產品命名規則 apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +46,Another Period Closing Entry {0} has been made after {1},另一個期末錄入{0}作出後{1} DocType: Work Order,Material Transferred for Manufacturing,物料轉倉用於製造 -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +49,Account {0} does not exists,帳戶{0}不存在 +apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +49,Account {0} does not exists,科目{0}不存在 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +1608,Select Loyalty Program,選擇忠誠度計劃 DocType: Project,Project Type,專案類型 apps/erpnext/erpnext/projects/doctype/task/task.py +157,Child Task exists for this Task. You can not delete this Task.,子任務存在這個任務。你不能刪除這個任務。 @@ -4199,7 +4199,7 @@ apps/erpnext/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +101,Shippi apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +20,Cash In Hand,手頭現金 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +143,Delivery warehouse required for stock item {0},需要的庫存項目交割倉庫{0} DocType: Packing Slip,The gross weight of the package. Usually net weight + packaging material weight. (for print),包裹的總重量。通常為淨重+包裝材料的重量。 (用於列印) -DocType: Accounts Settings,Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts,具有此角色的用戶可以設置凍結帳戶,並新增/修改對凍結帳戶的會計分錄 +DocType: Accounts Settings,Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts,具有此角色的用戶可以設置凍結科目,並新增/修改對凍結科目的會計分錄 DocType: Vital Signs,Cuts,削減 DocType: Serial No,Is Cancelled,被註銷 DocType: Student Group,Group Based On,基於組 @@ -4218,7 +4218,7 @@ apps/erpnext/erpnext/education/doctype/student_attendance_tool/student_attendanc ,Issued Items Against Work Order,針對工單發布物品 ,BOM Stock Calculated,BOM庫存計算 DocType: Vehicle Log,Invoice Ref,發票編號 -DocType: Company,Default Income Account,預設之收入帳戶 +DocType: Company,Default Income Account,預設收入科目 apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +39,Unclosed Fiscal Years Profit / Loss (Credit),未關閉的財年利潤/損失(信用) DocType: Sales Invoice,Time Sheets,考勤表 DocType: Healthcare Service Unit Type,Change In Item,更改項目 @@ -4258,7 +4258,7 @@ DocType: Soil Texture,Silt Composition (%),粉塵成分(%) DocType: Journal Entry,Remark,備註 DocType: Healthcare Settings,Avoid Confirmation,避免確認 DocType: Purchase Receipt Item,Rate and Amount,率及金額 -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +177,Account Type for {0} must be {1},帳戶類型為{0}必須{1} +apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +177,Account Type for {0} must be {1},科目類型為{0}必須{1} apps/erpnext/erpnext/config/hr.py +34,Leaves and Holiday,休假及假日 DocType: Education Settings,Current Academic Term,當前學術期限 DocType: Education Settings,Current Academic Term,當前學術期限 @@ -4272,7 +4272,7 @@ DocType: Purchase Invoice Item,Landed Cost Voucher Amount,到岸成本憑證金 apps/erpnext/erpnext/config/accounts.py +19,Bills raised by Suppliers.,由供應商提出的帳單。 DocType: POS Profile,Write Off Account,核銷帳戶 DocType: Patient Appointment,Get prescribed procedures,獲取規定的程序 -DocType: Sales Invoice,Redemption Account,贖回賬戶 +DocType: Sales Invoice,Redemption Account,贖回科目 DocType: Purchase Invoice Item,Discount Amount,折扣金額 DocType: Purchase Invoice,Return Against Purchase Invoice,回到對採購發票 DocType: Item,Warranty Period (in days),保修期限(天數) @@ -4372,7 +4372,7 @@ apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py +3 apps/erpnext/erpnext/hr/report/salary_register/salary_register.py +47,Salary Slip ID,工資單編號 apps/erpnext/erpnext/hr/doctype/employee/employee.py +135,Date Of Retirement must be greater than Date of Joining,日期退休必須大於加入的日期 apps/erpnext/erpnext/stock/doctype/item/item.js +70,Multiple Variants,多種變體 -DocType: Sales Invoice,Against Income Account,對收入帳戶 +DocType: Sales Invoice,Against Income Account,對收入科目 DocType: Subscription,Trial Period Start Date,試用期開始日期 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py +106,Item {0}: Ordered qty {1} cannot be less than minimum order qty {2} (defined in Item).,項目{0}:有序數量{1}不能低於最低訂貨量{2}(項中定義)。 DocType: Certification Application,Certified,認證 @@ -4402,7 +4402,7 @@ DocType: Asset,Journal Entry for Scrap,日記帳分錄報廢 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +83,Please pull items from Delivery Note,請送貨單拉項目 apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.py +242,Row {0}: select the workstation against the operation {1},行{0}:根據操作{1}選擇工作站 apps/erpnext/erpnext/accounts/utils.py +496,Journal Entries {0} are un-linked,日記條目{0}都是非聯 -apps/erpnext/erpnext/accounts/utils.py +825,{0} Number {1} already used in account {2},已在{2}帳戶中使用的{0}號碼{1} +apps/erpnext/erpnext/accounts/utils.py +825,{0} Number {1} already used in account {2},已在{2}科目中使用的{0}號碼{1} apps/erpnext/erpnext/config/crm.py +92,"Record of all communications of type email, phone, chat, visit, etc.",類型電子郵件,電話,聊天,訪問等所有通信記錄 DocType: Supplier Scorecard Scoring Standing,Supplier Scorecard Scoring Standing,供應商記分卡 DocType: Manufacturer,Manufacturers used in Items,在項目中使用製造商 @@ -4428,7 +4428,7 @@ DocType: Salary Component,"If selected, the value specified or calculated in thi DocType: Asset Settings,Number of Days in Fiscal Year,會計年度的天數 ,Stock Ledger,庫存總帳 apps/erpnext/erpnext/templates/includes/cart/cart_items.html +29,Rate: {0},價格:{0} -DocType: Company,Exchange Gain / Loss Account,兌換收益/損失帳戶 +DocType: Company,Exchange Gain / Loss Account,匯兌損益科目 DocType: Amazon MWS Settings,MWS Credentials,MWS憑證 apps/erpnext/erpnext/config/hr.py +7,Employee and Attendance,員工考勤 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +123,Purpose must be one of {0},目的必須是一個{0} @@ -4450,7 +4450,7 @@ DocType: Cash Flow Mapper,Section Name,部分名稱 apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +92,Reorder Qty,再訂購數量 apps/erpnext/erpnext/assets/doctype/asset/asset.py +292,Depreciation Row {0}: Expected value after useful life must be greater than or equal to {1},折舊行{0}:使用壽命後的預期值必須大於或等於{1} apps/erpnext/erpnext/hr/doctype/job_opening/job_opening.py +55,Current Job Openings,當前職位空缺 -DocType: Company,Stock Adjustment Account,庫存調整帳戶 +DocType: Company,Stock Adjustment Account,庫存調整科目 apps/erpnext/erpnext/public/js/payment/pos_payment.html +17,Write Off,註銷項款 DocType: Healthcare Service Unit,Allow Overlap,允許重疊 DocType: Employee,"System User (login) ID. If set, it will become default for all HR forms.",系統用戶(登錄)的標識。如果設定,這將成為的所有人力資源的預設形式。 @@ -4497,7 +4497,7 @@ DocType: Purchase Order,Order Confirmation Date,訂單確認日期 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js +47,Make Maintenance Visit,使維護訪問 DocType: Employee Transfer,Employee Transfer Details,員工轉移詳情 apps/erpnext/erpnext/selling/doctype/customer/customer.py +263,Please contact to the user who have Sales Master Manager {0} role,請聯絡,誰擁有碩士學位的銷售經理{0}角色的用戶 -DocType: Company,Default Cash Account,預設的現金帳戶 +DocType: Company,Default Cash Account,預設的現金科目 apps/erpnext/erpnext/config/accounts.py +40,Company (not Customer or Supplier) master.,公司(不是客戶或供應商)的主人。 apps/erpnext/erpnext/education/doctype/student/student_dashboard.py +6,This is based on the attendance of this Student,這是基於這名學生出席 apps/erpnext/erpnext/education/doctype/student_attendance_tool/student_attendance_tool.js +179,No Students in,沒有學生 @@ -4515,12 +4515,12 @@ DocType: Opportunity,Opportunity Type,機會型 DocType: Asset Movement,To Employee,給員工 DocType: Employee Transfer,New Company,新公司 apps/erpnext/erpnext/setup/doctype/company/delete_company_transactions.py +19,Transactions can only be deleted by the creator of the Company,交易只能由公司的創建者被刪除 -apps/erpnext/erpnext/accounts/general_ledger.py +21,Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction.,不正確的數字總帳條目中找到。你可能會在交易中選擇了錯誤的帳戶。 +apps/erpnext/erpnext/accounts/general_ledger.py +21,Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction.,不正確的數字總帳條目中找到。你可能會在交易中選擇了錯誤的科目。 DocType: Employee,Prefered Contact Email,首選聯繫郵箱 DocType: Cheque Print Template,Cheque Width,支票寬度 DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,驗證售價反對預訂價或估價RATE項目 DocType: Fee Schedule,Fee Schedule,收費表 -DocType: Company,Create Chart Of Accounts Based On,創建圖表的帳戶根據 +DocType: Company,Create Chart Of Accounts Based On,基於會計科目表創建 apps/erpnext/erpnext/hr/doctype/employee/employee.py +129,Date of Birth cannot be greater than today.,出生日期不能大於今天。 ,Stock Ageing,存貨帳齡分析表 DocType: Travel Request,"Partially Sponsored, Require Partial Funding",部分贊助,需要部分資金 @@ -4541,7 +4541,7 @@ DocType: Purchase Order,Customer Contact Email,客戶聯絡電子郵件 DocType: Warranty Claim,Item and Warranty Details,項目和保修細節 DocType: Chapter,Chapter Members,章節成員 DocType: Sales Team,Contribution (%),貢獻(%) -apps/erpnext/erpnext/controllers/accounts_controller.py +143,Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified,注:付款項將不會被創建因為“現金或銀行帳戶”未指定 +apps/erpnext/erpnext/controllers/accounts_controller.py +143,Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified,注:付款項將不會被創建因為“現金或銀行科目”未指定 apps/erpnext/erpnext/projects/doctype/project/project.py +79,Project {0} already exists,項目{0}已經存在 DocType: Clinical Procedure,Nursing User,護理用戶 DocType: Employee Benefit Application,Payroll Period,工資期 @@ -4549,7 +4549,7 @@ DocType: Plant Analysis,Plant Analysis Criterias,植物分析標準 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +239,Serial No {0} does not belong to Batch {1},序列號{0}不屬於批次{1} apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +197,Responsibilities,職責 apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +125,Validity period of this quotation has ended.,此報價的有效期已經結束。 -DocType: Expense Claim Account,Expense Claim Account,報銷賬戶 +DocType: Expense Claim Account,Expense Claim Account,報銷科目 DocType: Account,Capital Work in Progress,資本工作正在進行中 DocType: Accounts Settings,Allow Stale Exchange Rates,允許陳舊的匯率 DocType: Sales Person,Sales Person Name,銷售人員的姓名 @@ -4565,7 +4565,7 @@ apps/erpnext/erpnext/hr/doctype/leave_application/leave_application_dashboard.ht apps/erpnext/erpnext/projects/doctype/task/task.py +57,Progress % for a task cannot be more than 100.,為任務進度百分比不能超過100個。 DocType: Stock Reconciliation Item,Before reconciliation,調整前 DocType: Purchase Invoice,Taxes and Charges Added (Company Currency),稅收和收費上架(公司貨幣) -apps/erpnext/erpnext/stock/doctype/item/item.py +507,Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,商品稅行{0}必須有帳戶類型稅或收入或支出或課稅的 +apps/erpnext/erpnext/stock/doctype/item/item.py +507,Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,商品稅行{0}必須有科目類型為"稅" 或 "收入" 或 "支出" 或 "課稅的" DocType: Sales Order,Partly Billed,天色帳單 apps/erpnext/erpnext/assets/doctype/asset/asset.py +54,Item {0} must be a Fixed Asset Item,項{0}必須是固定資產項目 apps/erpnext/erpnext/stock/doctype/item/item.js +427,Make Variants,變種 @@ -4577,13 +4577,13 @@ apps/erpnext/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_re apps/erpnext/erpnext/setup/doctype/company/company.js +109,Please re-type company name to confirm,請確認重新輸入公司名稱 apps/erpnext/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +50,Total Outstanding Amt,總街貨量金額 DocType: Journal Entry,Printing Settings,列印設定 -DocType: Employee Advance,Advance Account,預付帳戶 +DocType: Employee Advance,Advance Account,預付款科目 DocType: Job Offer,Job Offer Terms,招聘條款 DocType: Sales Invoice,Include Payment (POS),包括支付(POS) apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +324,Total Debit must be equal to Total Credit. The difference is {0},借方總額必須等於貸方總額。差額為{0} apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +11,Automotive,汽車 DocType: Vehicle,Insurance Company,保險公司 -DocType: Asset Category Account,Fixed Asset Account,固定資產帳戶 +DocType: Asset Category Account,Fixed Asset Account,固定資產科目 apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.js +442,Variable,變量 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.js +47,From Delivery Note,從送貨單 DocType: Chapter,Members,會員 @@ -4595,14 +4595,14 @@ apps/erpnext/erpnext/public/js/pos/pos_bill_item.html +12,In Stock: ,有現貨 DocType: Notification Control,Custom Message,自定義訊息 apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +33,Investment Banking,投資銀行業務 DocType: Purchase Invoice,input,輸入 -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +107,Cash or Bank Account is mandatory for making payment entry,製作付款分錄時,現金或銀行帳戶是強制性輸入的欄位。 +apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +107,Cash or Bank Account is mandatory for making payment entry,製作付款分錄時,現金或銀行科目是強制性輸入的欄位。 DocType: Loyalty Program,Multiple Tier Program,多層計劃 apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py +54,Student Address,學生地址 apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py +54,Student Address,學生地址 DocType: Purchase Invoice,Price List Exchange Rate,價目表匯率 apps/erpnext/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py +27,All Supplier Groups,所有供應商組織 DocType: Employee Boarding Activity,Required for Employee Creation,員工創建需要 -apps/erpnext/erpnext/accounts/doctype/account/account.py +214,Account Number {0} already used in account {1},已在帳戶{1}中使用的帳號{0} +apps/erpnext/erpnext/accounts/doctype/account/account.py +214,Account Number {0} already used in account {1},已在科目{1}中使用的帳號{0} DocType: Hotel Room Reservation,Booked,預訂 DocType: Detected Disease,Tasks Created,創建的任務 DocType: Purchase Invoice Item,Rate,單價 @@ -4840,7 +4840,7 @@ apps/erpnext/erpnext/setup/doctype/supplier_group/supplier_group.js +5,There is apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +542,Form View,表單視圖 DocType: HR Settings,Expense Approver Mandatory In Expense Claim,費用審批人必須在費用索賠中 apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +124,Summary for this month and pending activities,本月和待活動總結 -apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py +91,Please set Unrealized Exchange Gain/Loss Account in Company {0},請在公司{0}中設置未實現的匯兌收益/損失帳戶 +apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py +91,Please set Unrealized Exchange Gain/Loss Account in Company {0},請在公司{0}中設置未實現的匯兌收益/損失科目 apps/erpnext/erpnext/utilities/user_progress.py +248,"Add users to your organization, other than yourself.",將用戶添加到您的組織,而不是您自己。 DocType: Customer Group,Customer Group Name,客戶群組名稱 apps/erpnext/erpnext/public/js/pos/pos.html +109,No Customers yet!,還沒有客戶! @@ -4856,7 +4856,7 @@ DocType: Healthcare Practitioner,Phone (R),電話(R) apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js +104,Time slots added,添加時隙 DocType: Item,Attributes,屬性 apps/erpnext/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.js +36,Enable Template,啟用模板 -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +256,Please enter Write Off Account,請輸入核銷帳戶 +apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +256,Please enter Write Off Account,請輸入核銷科目 apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +71,Last Order Date,最後訂購日期 DocType: Salary Component,Is Payable,應付 DocType: Inpatient Record,B Negative,B負面 @@ -4865,7 +4865,7 @@ DocType: Amazon MWS Settings,US,我們 DocType: Holiday List,Add Weekly Holidays,添加每週假期 DocType: Staffing Plan Detail,Vacancies,職位空缺 DocType: Hotel Room,Hotel Room,旅館房間 -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +57,Account {0} does not belongs to company {1},帳戶{0}不屬於公司{1} +apps/erpnext/erpnext/accounts/doctype/budget/budget.py +57,Account {0} does not belongs to company {1},科目{0}不屬於公司{1} DocType: Leave Type,Rounding,四捨五入 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +994,Serial Numbers in row {0} does not match with Delivery Note,行{0}中的序列號與交貨單不匹配 DocType: Employee Benefit Application,Dispensed Amount (Pro-rated),分配金額(按比例分配) @@ -4896,7 +4896,7 @@ DocType: Patient,Alcohol Current Use,酒精當前使用 DocType: Employee Tax Exemption Proof Submission,House Rent Payment Amount,房屋租金付款金額 DocType: Student Admission Program,Student Admission Program,學生入學計劃 DocType: Employee Tax Exemption Sub Category,Tax Exemption Category,免稅類別 -DocType: Payment Entry,Account Paid To,賬戶付至 +DocType: Payment Entry,Account Paid To,科目付至 DocType: Subscription Settings,Grace Period,寬限期 DocType: Item Alternative,Alternative Item Name,替代項目名稱 apps/erpnext/erpnext/selling/doctype/product_bundle/product_bundle.py +24,Parent Item {0} must not be a Stock Item,父項{0}不能是庫存產品 @@ -4905,7 +4905,7 @@ apps/erpnext/erpnext/config/selling.py +57,All Products or Services.,所有的 DocType: Email Digest,Open Quotations,打開報價單 DocType: Expense Claim,More Details,更多詳情 DocType: Supplier Quotation,Supplier Address,供應商地址 -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +168,{0} Budget for Account {1} against {2} {3} is {4}. It will exceed by {5},{0}預算帳戶{1}對{2} {3}是{4}。這將超過{5} +apps/erpnext/erpnext/accounts/doctype/budget/budget.py +168,{0} Budget for Account {1} against {2} {3} is {4}. It will exceed by {5},{0}預算科目{1}對{2} {3}是{4}。這將超過{5} apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +37,Out Qty,輸出數量 apps/erpnext/erpnext/buying/doctype/supplier/supplier.py +49,Series is mandatory,系列是強制性的 apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +28,Financial Services,金融服務 @@ -4991,7 +4991,7 @@ DocType: Job Offer,Awaiting Response,正在等待回應 DocType: Support Search Source,Link Options,鏈接選項 apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +1557,Total Amount {0},總金額{0} apps/erpnext/erpnext/controllers/item_variant.py +323,Invalid attribute {0} {1},無效的屬性{0} {1} -DocType: Supplier,Mention if non-standard payable account,如果非標準應付賬款提到 +DocType: Supplier,Mention if non-standard payable account,如果非標準應付帳款提到 apps/erpnext/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.py +25,Please select the assessment group other than 'All Assessment Groups',請選擇“所有評估組”以外的評估組 apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +67,Row {0}: Cost center is required for an item {1},行{0}:項目{1}需要費用中心 DocType: Training Event Employee,Optional,可選的 @@ -5047,7 +5047,7 @@ apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +67 DocType: Item Group,HTML / Banner that will show on the top of product list.,HTML/橫幅,將顯示在產品列表的頂部。 DocType: Shipping Rule,Specify conditions to calculate shipping amount,指定條件來計算運費金額 DocType: Program Enrollment,Institute's Bus,學院的巴士 -DocType: Accounts Settings,Role Allowed to Set Frozen Accounts & Edit Frozen Entries,允許設定凍結帳戶和編輯凍結分錄的角色 +DocType: Accounts Settings,Role Allowed to Set Frozen Accounts & Edit Frozen Entries,允許設定凍結科目和編輯凍結分錄的角色 DocType: Supplier Scorecard Scoring Variable,Path,路徑 apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +30,Cannot convert Cost Center to ledger as it has child nodes,不能成本中心轉換為總賬,因為它有子節點 DocType: Production Plan,Total Planned Qty,總計劃數量 @@ -5055,7 +5055,7 @@ apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +83,Opening Val DocType: Salary Component,Formula,式 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +59,Serial #,序列號 DocType: Lab Test Template,Lab Test Template,實驗室測試模板 -apps/erpnext/erpnext/setup/doctype/company/company.py +196,Sales Account,銷售帳戶 +apps/erpnext/erpnext/setup/doctype/company/company.py +196,Sales Account,銷售科目 DocType: Purchase Invoice Item,Total Weight,總重量 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +101,Commission on Sales,銷售佣金 DocType: Job Offer Term,Value / Description,值/說明 @@ -5078,7 +5078,7 @@ DocType: Cash Flow Mapping,Select Maximum Of 1,選擇最多1個 apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +84,Invalid quantity specified for item {0}. Quantity should be greater than 0.,為項目指定了無效的數量{0} 。量應大於0 。 DocType: Company,Default Employee Advance Account,默認員工高級帳戶 apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +1181,Search Item (Ctrl + i),搜索項目(Ctrl + i) -apps/erpnext/erpnext/accounts/doctype/account/account.py +171,Account with existing transaction can not be deleted,帳戶與現有的交易不能被刪除 +apps/erpnext/erpnext/accounts/doctype/account/account.py +171,Account with existing transaction can not be deleted,科目與現有的交易不能被刪除 DocType: Vehicle,Last Carbon Check,最後檢查炭 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +109,Legal Expenses,法律費用 apps/erpnext/erpnext/public/js/utils/serial_no_batch_selector.js +147,Please select quantity on row ,請選擇行數量 @@ -5100,7 +5100,7 @@ apps/erpnext/erpnext/controllers/accounts_controller.py +907,Account: {0} with c DocType: Bank Statement Transaction Settings Item,Bank Data,銀行數據 DocType: Purchase Receipt Item,Sample Quantity,樣品數量 DocType: Manufacturing Settings,"Update BOM cost automatically via Scheduler, based on latest valuation rate / price list rate / last purchase rate of raw materials.",根據最新的估值/價格清單率/最近的原材料採購率,通過計劃程序自動更新BOM成本。 -apps/erpnext/erpnext/accounts/doctype/account/account.py +57,Account {0}: Parent account {1} does not belong to company: {2},帳戶{0}:父帳戶{1}不屬於公司:{2} +apps/erpnext/erpnext/accounts/doctype/account/account.py +57,Account {0}: Parent account {1} does not belong to company: {2},科目{0}:上層科目{1}不屬於公司:{2} apps/erpnext/erpnext/setup/doctype/company/company.js +126,Successfully deleted all transactions related to this company!,成功刪除與該公司相關的所有交易! apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +22,As on Date,隨著對日 DocType: Program Enrollment,Enrollment Date,報名日期 @@ -5126,7 +5126,7 @@ DocType: Academic Year,Academic Year Name,學年名稱 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +1182,{0} not allowed to transact with {1}. Please change the Company.,不允許{0}與{1}進行交易。請更改公司。 DocType: Sales Partner,Contact Desc,聯絡倒序 DocType: Email Digest,Send regular summary reports via Email.,使用電子郵件發送定期匯總報告。 -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +289,Please set default account in Expense Claim Type {0},請報銷類型設置默認帳戶{0} +apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +289,Please set default account in Expense Claim Type {0},請報銷類型設置默認科目{0} apps/erpnext/erpnext/hr/doctype/leave_application/leave_application_dashboard.html +11,Available Leaves,可用的葉子 DocType: Assessment Result,Student Name,學生姓名 DocType: Hub Tracked Item,Item Manager,項目經理 @@ -5169,17 +5169,17 @@ apps/erpnext/erpnext/accounts/doctype/budget/budget.py +155,Accumulated Monthly, apps/erpnext/erpnext/controllers/accounts_controller.py +864,{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.,{0}是強制性的。也許外幣兌換記錄為{1}到{2}尚未建立。 apps/erpnext/erpnext/hr/doctype/staffing_plan/staffing_plan.py +51,Staffing Plan {0} already exist for designation {1},已存在人員配置計劃{0}以用於指定{1} apps/erpnext/erpnext/accounts/doctype/tax_rule/tax_rule.py +46,Tax Template is mandatory.,稅務模板是強制性的。 -apps/erpnext/erpnext/accounts/doctype/account/account.py +51,Account {0}: Parent account {1} does not exist,帳戶{0}:父帳戶{1}不存在 +apps/erpnext/erpnext/accounts/doctype/account/account.py +51,Account {0}: Parent account {1} does not exist,科目{0}:上層科目{1}不存在 DocType: POS Closing Voucher,Period Start Date,期間開始日期 DocType: Purchase Invoice Item,Price List Rate (Company Currency),價格列表費率(公司貨幣) DocType: Products Settings,Products Settings,產品設置 -,Item Price Stock,項目價格股票 +,Item Price Stock,項目價格庫存 apps/erpnext/erpnext/config/accounts.py +550,To make Customer based incentive schemes.,制定基於客戶的激勵計劃。 DocType: Lab Prescription,Test Created,測試創建 DocType: Healthcare Settings,Custom Signature in Print,自定義簽名打印 DocType: Account,Temporary,臨時 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +127,Customer LPO No.,客戶LPO號 -DocType: Amazon MWS Settings,Market Place Account Group,市場賬戶組 +DocType: Amazon MWS Settings,Market Place Account Group,市場科目組 apps/erpnext/erpnext/accounts/doctype/payment_order/payment_order.js +14,Make Payment Entries,付款條目 DocType: Program,Courses,培訓班 DocType: Monthly Distribution Percentage,Percentage Allocation,百分比分配 @@ -5215,7 +5215,7 @@ DocType: Selling Settings,Each Transaction,每筆交易 apps/erpnext/erpnext/stock/doctype/item/item.py +523,Barcode {0} already used in Item {1},條碼{0}已經用在項目{1} apps/erpnext/erpnext/config/selling.py +86,Rules for adding shipping costs.,增加運輸成本的規則。 apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +72,Varaiance ,Varaiance -DocType: Item,Opening Stock,打開股票 +DocType: Item,Opening Stock,打開庫存 apps/erpnext/erpnext/support/doctype/warranty_claim/warranty_claim.py +20,Customer is required,客戶是必需的 DocType: Lab Test,Result Date,結果日期 apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +129,PDC/LC Date,PDC / LC日期 @@ -5250,7 +5250,7 @@ apps/erpnext/erpnext/templates/includes/product_list.js +42,No products found., apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +396,{0} against Sales Invoice {1},{0}針對銷售發票{1} DocType: Antibiotic,Laboratory User,實驗室用戶 DocType: Request for Quotation Item,Project Name,專案名稱 -DocType: Customer,Mention if non-standard receivable account,提到如果不規範應收賬款 +DocType: Customer,Mention if non-standard receivable account,提到如果不規範應收帳款 apps/erpnext/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py +63,Please add the remaining benefits {0} to any of the existing component,請將其餘好處{0}添加到任何現有組件 DocType: Journal Entry Account,If Income or Expense,如果收入或支出 DocType: Bank Statement Transaction Entry,Matching Invoices,匹配發票 @@ -5260,7 +5260,7 @@ apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +6 apps/erpnext/erpnext/config/learn.py +229,Human Resource,人力資源 DocType: Payment Reconciliation Payment,Payment Reconciliation Payment,付款方式付款對賬 DocType: Disease,Treatment Task,治療任務 -DocType: Payment Order Reference,Bank Account Details,銀行賬戶明細 +DocType: Payment Order Reference,Bank Account Details,銀行科目明細 DocType: Purchase Order Item,Blanket Order,總訂單 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +39,Tax Assets,所得稅資產 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +631,Production Order has been {0},生產訂單已經{0} @@ -5322,7 +5322,7 @@ apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order_calendar.js +36 ,Employee Information,僱員資料 apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py +242,Healthcare Practitioner not available on {0},醫療從業者在{0}上不可用 DocType: Stock Entry Detail,Additional Cost,額外費用 -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +57,"Can not filter based on Voucher No, if grouped by Voucher",是冷凍的帳戶。要禁止該帳戶創建/編輯事務,你需要角色 +apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +57,"Can not filter based on Voucher No, if grouped by Voucher",是凍結的帳戶。要禁止該帳戶創建/編輯事務,你需要有指定的身份 apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +975,Make Supplier Quotation,讓供應商報價 DocType: Quality Inspection,Incoming,來 apps/erpnext/erpnext/setup/doctype/company/company.js +90,Default tax templates for sales and purchase are created.,銷售和採購的默認稅收模板被創建。 @@ -5340,7 +5340,7 @@ apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +120,This Week's apps/erpnext/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py +24,In Stock Qty,庫存數量 ,Daily Work Summary Replies,日常工作總結回复 DocType: Delivery Trip,Calculate Estimated Arrival Times,計算預計到達時間 -apps/erpnext/erpnext/accounts/general_ledger.py +113,Account: {0} can only be updated via Stock Transactions,帳號:{0}只能通過股票的交易進行更新 +apps/erpnext/erpnext/accounts/general_ledger.py +113,Account: {0} can only be updated via Stock Transactions,帳號:{0}只能通過庫存的交易進行更新 DocType: Student Group Creation Tool,Get Courses,獲取課程 DocType: Shopify Settings,Webhooks,網絡掛接 DocType: Bank Account,Party,黨 @@ -5376,7 +5376,7 @@ apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +87,Same item ha DocType: Department,Leave Block List,休假區塊清單 DocType: Purchase Invoice,Tax ID,稅號 apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +198,Item {0} is not setup for Serial Nos. Column must be blank,項目{0}不是設定為序列號,此列必須為空白 -DocType: Accounts Settings,Accounts Settings,帳戶設定 +DocType: Accounts Settings,Accounts Settings,會計設定 DocType: Loyalty Program,Customer Territory,客戶地區 DocType: Email Digest,Sales Orders to Deliver,要交付的銷售訂單 apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +28,"Number of new Account, it will be included in the account name as a prefix",新帳號的數量,將作為前綴包含在帳號名稱中 @@ -5388,7 +5388,7 @@ apps/erpnext/erpnext/hr/utils.py +152,To date can not be less than from date,迄 DocType: Opportunity,To Discuss,為了討論 apps/erpnext/erpnext/stock/stock_ledger.py +382,{0} units of {1} needed in {2} to complete this transaction.,{0}單位{1}在{2}完成此交易所需。 DocType: Support Settings,Forum URL,論壇URL -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +75,Temporary Accounts,臨時帳戶 +apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +75,Temporary Accounts,臨時科目 apps/erpnext/erpnext/assets/doctype/asset_movement/asset_movement.py +40,Source Location is required for the asset {0},源位置對資產{0}是必需的 DocType: BOM Explosion Item,BOM Explosion Item,BOM展開項目 DocType: Shareholder,Contact List,聯繫人列表 @@ -5426,7 +5426,7 @@ apps/erpnext/erpnext/education/doctype/course/course.py +20,Total Weightage of a DocType: Purchase Order Item,Last Purchase Rate,最後預訂價 DocType: Account,Asset,財富 DocType: Project Task,Task ID,任務ID -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +84,Stock cannot exist for Item {0} since has variants,股票可以為項目不存在{0},因為有變種 +apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +84,Stock cannot exist for Item {0} since has variants,庫存可以為項目不存在{0},因為有變種 DocType: Healthcare Practitioner,Mobile,移動 ,Sales Person-wise Transaction Summary,銷售人員相關的交易匯總 DocType: Training Event,Contact Number,聯繫電話 @@ -5444,7 +5444,7 @@ DocType: Employee,Reports to,隸屬於 DocType: Payment Entry,Paid Amount,支付的金額 apps/erpnext/erpnext/utilities/user_progress.py +158,Explore Sales Cycle,探索銷售週期 DocType: Assessment Plan,Supervisor,監 -apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +934,Retention Stock Entry,保留股票入場 +apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +934,Retention Stock Entry,保留庫存入場 ,Available Stock for Packing Items,可用庫存包裝項目 DocType: Item Variant,Item Variant,項目變 ,Work Order Stock Report,工單庫存報表 @@ -5454,7 +5454,7 @@ apps/erpnext/erpnext/education/doctype/instructor/instructor.js +45,As Superviso DocType: Leave Policy Detail,Leave Policy Detail,退出政策細節 DocType: BOM Scrap Item,BOM Scrap Item,BOM項目廢料 apps/erpnext/erpnext/accounts/page/pos/pos.js +906,Submitted orders can not be deleted,提交的訂單不能被刪除 -apps/erpnext/erpnext/accounts/doctype/account/account.py +121,"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'",帳戶餘額已歸為借方帳戶,不允許設為信用帳戶 +apps/erpnext/erpnext/accounts/doctype/account/account.py +121,"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'",科目餘額已歸為借方科目,不允許設為貸方 apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +391,Quality Management,品質管理 apps/erpnext/erpnext/assets/doctype/asset/asset.py +52,Item {0} has been disabled,項{0}已被禁用 DocType: Project,Total Billable Amount (via Timesheets),總計費用金額(通過時間表) @@ -5484,15 +5484,15 @@ apps/erpnext/erpnext/manufacturing/doctype/workstation/workstation.py +36,Row #{ DocType: Purchase Invoice Item,Allow Zero Valuation Rate,允許零估值 DocType: Purchase Invoice Item,Allow Zero Valuation Rate,允許零估值 DocType: Training Event Employee,Invited,邀請 -apps/erpnext/erpnext/config/accounts.py +276,Setup Gateway accounts.,設置網關帳戶。 +apps/erpnext/erpnext/config/accounts.py +276,Setup Gateway accounts.,設置閘道科目。 DocType: Employee,Employment Type,就業類型 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +43,Fixed Assets,固定資產 DocType: Payment Entry,Set Exchange Gain / Loss,設置兌換收益/損失 ,GST Purchase Register,消費稅購買登記冊 ,Cash Flow,現金周轉 apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py +25,Combined invoice portion must equal 100%,合併發票部分必須等於100% -DocType: Item Default,Default Expense Account,預設費用帳戶 -DocType: GST Account,CGST Account,CGST賬戶 +DocType: Item Default,Default Expense Account,預設費用科目 +DocType: GST Account,CGST Account,CGST科目 apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py +53,Student Email ID,學生的電子郵件ID DocType: POS Closing Voucher Invoices,POS Closing Voucher Invoices,POS關閉憑證發票 DocType: Tax Rule,Sales Tax Template,銷售稅模板 @@ -5523,7 +5523,7 @@ The package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" For Example: If you are selling Laptops and Backpacks separately and have a special price if the customer buys both, then the Laptop + Backpack will be a new Product Bundle Item. -Note: BOM = Bill of Materials",聚合組** **項目到另一個項目** **的。如果你是捆綁了一定**項目你保持股票的包裝**項目的**,而不是聚集**項這是一個有用的**到一個包和**。包** **項目將有“是股票項目”為“否”和“是銷售項目”為“是”。例如:如果你是銷售筆記本電腦和背包分開,並有一個特殊的價格,如果客戶購買兩個,那麼筆記本電腦+背包將是一個新的產品包項目。注:物料BOM =比爾 +Note: BOM = Bill of Materials",聚合組** **項目到另一個項目** **的。如果你是捆綁了一定**項目你保持庫存的包裝**項目的**,而不是聚集**項這是一個有用的**到一個包和**。包** **項目將有“是庫存項目”為“否”和“是銷售項目”為“是”。例如:如果你是銷售筆記本電腦和背包分開,並有一個特殊的價格,如果客戶購買兩個,那麼筆記本電腦+背包將是一個新的產品包項目。注:物料BOM =比爾 apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +42,Serial No is mandatory for Item {0},項目{0}的序列號是強制性的 DocType: Item Variant Attribute,Attribute,屬性 DocType: Staffing Plan Detail,Current Count,當前計數 @@ -5564,7 +5564,7 @@ apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +75,Max disco apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +191,Net Asset value as on,淨資產值作為 DocType: Crop,Produce,生產 DocType: Hotel Settings,Default Taxes and Charges,默認稅費 -DocType: Account,Receivable,應收賬款 +DocType: Account,Receivable,應收帳款 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +325,Row #{0}: Not allowed to change Supplier as Purchase Order already exists,行#{0}:不能更改供應商的採購訂單已經存在 DocType: Stock Entry,Material Consumption for Manufacture,材料消耗製造 DocType: Item Alternative,Alternative Item Code,替代項目代碼 @@ -5603,7 +5603,7 @@ DocType: Asset,Booked Fixed Asset,預訂的固定資產 apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +49,To Date should be within the Fiscal Year. Assuming To Date = {0},日期應該是在財政年度內。假設終止日期= {0} DocType: Employee,"Here you can maintain height, weight, allergies, medical concerns etc",在這裡,你可以保持身高,體重,過敏,醫療問題等 DocType: Leave Block List,Applies to Company,適用於公司 -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +222,Cannot cancel because submitted Stock Entry {0} exists,不能取消,因為提交股票輸入{0}存在 +apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +222,Cannot cancel because submitted Stock Entry {0} exists,不能取消,因為提交庫存輸入{0}存在 DocType: BOM Update Tool,Update latest price in all BOMs,更新所有BOM的最新價格 apps/erpnext/erpnext/healthcare/doctype/patient/patient.js +24,Medical Record,醫療記錄 DocType: Vehicle,Vehicle,車輛 @@ -5613,13 +5613,13 @@ apps/erpnext/erpnext/hr/doctype/training_result/training_result.py +15,{0} must DocType: POS Profile,Item Groups,項目組 DocType: Sales Order Item,For Production,對於生產 DocType: Payment Request,payment_url,payment_url -DocType: Exchange Rate Revaluation Account,Balance In Account Currency,賬戶貨幣餘額 -apps/erpnext/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py +188,Please add a Temporary Opening account in Chart of Accounts,請在會計科目表中添加一個臨時開戶賬戶 +DocType: Exchange Rate Revaluation Account,Balance In Account Currency,科目貨幣餘額 +apps/erpnext/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py +188,Please add a Temporary Opening account in Chart of Accounts,請在會計科目表中添加一個臨時開戶科目 DocType: Customer,Customer Primary Contact,客戶主要聯繫人 DocType: Project Task,View Task,查看任務 apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +22,Opp/Lead %,Opp / Lead% apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +22,Opp/Lead %,Opp / Lead% -DocType: Bank Guarantee,Bank Account Info,銀行賬戶信息 +DocType: Bank Guarantee,Bank Account Info,銀行科目信息 DocType: Bank Guarantee,Bank Guarantee Type,銀行擔保類型 DocType: Payment Schedule,Invoice Portion,發票部分 ,Asset Depreciations and Balances,資產折舊和平衡 @@ -5701,7 +5701,7 @@ DocType: Certification Application,Yet to appear,尚未出現 DocType: Delivery Stop,Email Sent To,電子郵件發送給 DocType: Job Card Item,Job Card Item,工作卡項目 DocType: Accounts Settings,Allow Cost Center In Entry of Balance Sheet Account,允許成本中心輸入資產負債表科目 -apps/erpnext/erpnext/accounts/doctype/account/account.js +102,Merge with Existing Account,與現有帳戶合併 +apps/erpnext/erpnext/accounts/doctype/account/account.js +102,Merge with Existing Account,與現有科目合併 apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +992,All items have already been transferred for this Work Order.,所有項目已經為此工作單轉移。 DocType: Appraisal,"Any other remarks, noteworthy effort that should go in the records.",任何其他言論,值得一提的努力,應該在記錄中。 DocType: Asset Maintenance,Manufacturing User,製造業用戶 @@ -5739,14 +5739,14 @@ apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.py +203,{0} ({1 DocType: Certification Application,Name of Applicant,申請人名稱 apps/erpnext/erpnext/config/manufacturing.py +27,Time Sheet for manufacturing.,時間表製造。 apps/erpnext/erpnext/templates/pages/cart.html +37,Subtotal,小計 -apps/erpnext/erpnext/stock/doctype/item/item.py +731,Cannot change Variant properties after stock transaction. You will have to make a new Item to do this.,股票交易後不能更改Variant屬性。你將不得不做一個新的項目來做到這一點。 +apps/erpnext/erpnext/stock/doctype/item/item.py +731,Cannot change Variant properties after stock transaction. You will have to make a new Item to do this.,庫存交易後不能更改Variant屬性。你將不得不做一個新的項目來做到這一點。 apps/erpnext/erpnext/config/integrations.py +18,GoCardless SEPA Mandate,GoCardless SEPA授權 DocType: Healthcare Practitioner,Charges,收費 DocType: Production Plan,Get Items For Work Order,獲取工作訂單的物品 DocType: Salary Detail,Default Amount,預設數量 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +96,Warehouse not found in the system,倉庫系統中未找到 DocType: Quality Inspection Reading,Quality Inspection Reading,質量檢驗閱讀 -apps/erpnext/erpnext/stock/doctype/stock_settings/stock_settings.py +26,`Freeze Stocks Older Than` should be smaller than %d days.,`凍結股票早於`應該是少於%d天。 +apps/erpnext/erpnext/stock/doctype/stock_settings/stock_settings.py +26,`Freeze Stocks Older Than` should be smaller than %d days.,`凍結庫存早於`應該是少於%d天。 DocType: Tax Rule,Purchase Tax Template,購置稅模板 apps/erpnext/erpnext/utilities/user_progress.py +48,Set a sales goal you'd like to achieve for your company.,為您的公司設定您想要實現的銷售目標。 apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +1553,Healthcare Services,醫療服務 @@ -5781,7 +5781,7 @@ apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +5 DocType: Warranty Claim,Resolved By,議決 apps/erpnext/erpnext/healthcare/doctype/patient_encounter/patient_encounter.js +32,Schedule Discharge,附表卸貨 apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +42,Cheques and Deposits incorrectly cleared,支票及存款不正確清除 -apps/erpnext/erpnext/accounts/doctype/account/account.py +53,Account {0}: You can not assign itself as parent account,帳戶{0}:你不能指定自己為父帳戶 +apps/erpnext/erpnext/accounts/doctype/account/account.py +53,Account {0}: You can not assign itself as parent account,科目{0}:你不能指定自己為上層科目 DocType: Purchase Invoice Item,Price List Rate,價格列表費率 apps/erpnext/erpnext/utilities/activation.py +72,Create customer quotes,創建客戶報價 apps/erpnext/erpnext/public/js/controllers/transaction.js +885,Service Stop Date cannot be after Service End Date,服務停止日期不能在服務結束日期之後 @@ -5817,7 +5817,7 @@ DocType: Daily Work Summary Settings,"Emails will be sent to all Active Employee DocType: Employee Leave Approver,Employee Leave Approver,員工請假審批 apps/erpnext/erpnext/stock/doctype/item/item.py +541,Row {0}: An Reorder entry already exists for this warehouse {1},行{0}:一個重新排序條目已存在這個倉庫{1} apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +99,"Cannot declare as lost, because Quotation has been made.",不能聲明為丟失,因為報價已經取得進展。 -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +68,CWIP Account,CWIP賬戶 +apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +68,CWIP Account,CWIP科目 apps/erpnext/erpnext/hr/doctype/training_event/training_event.js +16,Training Feedback,培訓反饋 apps/erpnext/erpnext/config/accounts.py +184,Tax Withholding rates to be applied on transactions.,稅收預扣稅率適用於交易。 DocType: Supplier Scorecard Criteria,Supplier Scorecard Criteria,供應商記分卡標準 @@ -5850,7 +5850,7 @@ DocType: Agriculture Analysis Criteria,Agriculture User,農業用戶 apps/erpnext/erpnext/stock/stock_ledger.py +386,{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction.,{0} {1}在需要{2}在{3} {4}:{5}來完成這一交易單位。 DocType: Fee Schedule,Student Category,學生組 DocType: Announcement,Student,學生 -apps/erpnext/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js +98,Stock quantity to start procedure is not available in the warehouse. Do you want to record a Stock Transfer,倉庫中不提供開始操作的庫存數量。你想記錄股票轉移嗎? +apps/erpnext/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js +98,Stock quantity to start procedure is not available in the warehouse. Do you want to record a Stock Transfer,倉庫中不提供開始操作的庫存數量。你想記錄庫存轉移嗎? DocType: Shipping Rule,Shipping Rule Type,運輸規則類型 apps/erpnext/erpnext/utilities/user_progress.py +239,Go to Rooms,去房間 apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.js +259,"Company, Payment Account, From Date and To Date is mandatory",公司,付款帳戶,從日期和日期是強制性的 @@ -5871,7 +5871,7 @@ DocType: Purchase Receipt Item,Received and Accepted,收貨及允收 DocType: Staffing Plan,Staffing Plan Details,人員配置計劃詳情 ,Serial No Service Contract Expiry,序號服務合同到期 DocType: Employee Health Insurance,Employee Health Insurance,員工健康保險 -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +331,You cannot credit and debit same account at the same time,你無法將貸方與借方在同一時間記在同一帳戶 +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +331,You cannot credit and debit same account at the same time,你無法將貸方與借方在同一時間記在同一科目 DocType: Vital Signs,Adults' pulse rate is anywhere between 50 and 80 beats per minute.,成年人的脈率在每分鐘50到80次之間。 DocType: Naming Series,Help HTML,HTML幫助 DocType: Student Group Creation Tool,Student Group Creation Tool,學生組創建工具 @@ -5954,7 +5954,7 @@ DocType: Shopping Cart Settings,Checkout Settings,結帳設定 DocType: Student Attendance,Present,現在 apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +37,Delivery Note {0} must not be submitted,送貨單{0}不能提交 DocType: Notification Control,Sales Invoice Message,銷售發票訊息 -apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +27,Closing Account {0} must be of type Liability / Equity,關閉帳戶{0}的類型必須是負債/權益 +apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +27,Closing Account {0} must be of type Liability / Equity,關閉科目{0}的類型必須是負債/權益 apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +407,Salary Slip of employee {0} already created for time sheet {1},員工的工資單{0}已為時間表創建{1} DocType: Production Plan Item,Ordered Qty,訂購數量 apps/erpnext/erpnext/stock/doctype/item/item.py +822,Item {0} is disabled,項目{0}無效 @@ -5997,11 +5997,11 @@ DocType: Subscription Plan,Subscription Plan,訂閱計劃 DocType: Employee External Work History,Salary,薪水 DocType: Serial No,Delivery Document Type,交付文件類型 DocType: Item Variant Settings,Do not update variants on save,不要在保存時更新變體 -DocType: Email Digest,Receivables,應收賬款 +DocType: Email Digest,Receivables,應收帳款 DocType: Lead Source,Lead Source,主導來源 DocType: Customer,Additional information regarding the customer.,對於客戶的其他訊息。 DocType: Quality Inspection Reading,Reading 5,閱讀5 -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +237,"{0} {1} is associated with {2}, but Party Account is {3}","{0} {1} 與 {2} 關聯, 但當事方帳戶為 {3}" +apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +237,"{0} {1} is associated with {2}, but Party Account is {3}","{0} {1} 與 {2} 關聯, 但當事方科目為 {3}" DocType: Bank Statement Settings Item,Bank Header,銀行標題 apps/erpnext/erpnext/healthcare/doctype/sample_collection/sample_collection.js +7,View Lab Tests,查看實驗室測試 DocType: Hub Users,Hub Users,Hub用戶 @@ -6060,12 +6060,12 @@ apps/erpnext/erpnext/education/doctype/program_enrollment_tool/program_enrollmen DocType: Fees,Student Details,學生細節 DocType: Purchase Invoice Item,Stock Qty,庫存數量 DocType: Purchase Invoice Item,Stock Qty,庫存數量 -DocType: QuickBooks Migrator,Default Shipping Account,默認運輸帳戶 +DocType: QuickBooks Migrator,Default Shipping Account,默認運輸科目 DocType: Loan,Repayment Period in Months,在月還款期 apps/erpnext/erpnext/templates/includes/footer/footer_extension.html +26,Error: Not a valid id?,錯誤:沒有有效的身份證? DocType: Naming Series,Update Series Number,更新序列號 DocType: Account,Equity,公平 -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +79,{0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry,{0} {1}:“損益”帳戶類型{2}不允許進入開 +apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +79,{0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry,{0} {1}:“損益”科目類型{2}不允許進入開 DocType: Job Offer,Printing Details,印刷詳情 DocType: Task,Closing Date,截止日期 DocType: Sales Order Item,Produced Quantity,生產的產品數量 @@ -6075,14 +6075,14 @@ DocType: Employee Tax Exemption Category,Max Amount,最大金額 DocType: Journal Entry,Total Amount Currency,總金額幣種 apps/erpnext/erpnext/stock/report/bom_search/bom_search.js +38,Search Sub Assemblies,搜索子組件 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +200,Item Code required at Row No {0},於列{0}需要產品編號 -DocType: GST Account,SGST Account,SGST賬戶 +DocType: GST Account,SGST Account,SGST科目 apps/erpnext/erpnext/utilities/user_progress.py +154,Go to Items,轉到項目 DocType: Sales Partner,Partner Type,合作夥伴類型 apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +72,Actual,實際 DocType: Restaurant Menu,Restaurant Manager,餐廳經理 DocType: Authorization Rule,Customerwise Discount,Customerwise折扣 apps/erpnext/erpnext/config/projects.py +46,Timesheet for tasks.,時間表的任務。 -DocType: Purchase Invoice,Against Expense Account,對費用帳戶 +DocType: Purchase Invoice,Against Expense Account,對費用科目 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +287,Installation Note {0} has already been submitted,安裝注意{0}已提交 DocType: Bank Reconciliation,Get Payment Entries,獲取付款項 DocType: Quotation Item,Against Docname,對Docname @@ -6098,7 +6098,7 @@ DocType: Training Event,Employee Emails,員工電子郵件 apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py +67,Series Updated,系列更新 apps/erpnext/erpnext/accounts/doctype/account/account.py +166,Report Type is mandatory,報告類型是強制性的 DocType: Item,Serial Number Series,序列號系列 -apps/erpnext/erpnext/buying/utils.py +68,Warehouse is mandatory for stock Item {0} in row {1},倉庫是強制性的股票項目{0}行{1} +apps/erpnext/erpnext/buying/utils.py +68,Warehouse is mandatory for stock Item {0} in row {1},倉庫是強制性的庫存項目{0}行{1} apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +45,Retail & Wholesale,零售及批發 DocType: Issue,First Responded On,首先作出回應 DocType: Website Item Group,Cross Listing of Item in multiple groups,在多組項目的交叉上市 @@ -6146,7 +6146,7 @@ DocType: Restaurant Reservation,Waitlisted,輪候 DocType: Employee Tax Exemption Declaration Category,Exemption Category,豁免類別 apps/erpnext/erpnext/accounts/doctype/account/account.py +131,Currency can not be changed after making entries using some other currency,貨幣不能使用其他貨幣進行輸入後更改 DocType: Vehicle Service,Clutch Plate,離合器壓盤 -DocType: Company,Round Off Account,四捨五入賬戶 +DocType: Company,Round Off Account,四捨五入科目 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +100,Administrative Expenses,行政開支 apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +18,Consulting,諮詢 DocType: Subscription Plan,Based on price list,基於價格表 @@ -6157,7 +6157,7 @@ DocType: Purchase Invoice,Contact Email,聯絡電郵 apps/erpnext/erpnext/education/doctype/fee_schedule/fee_schedule_list.js +11,Fee Creation Pending,費用創作待定 DocType: Appraisal Goal,Score Earned,得分 DocType: Asset Category,Asset Category Name,資產類別名稱 -apps/erpnext/erpnext/setup/doctype/territory/territory.js +13,This is a root territory and cannot be edited.,集團或Ledger ,借方或貸方,是特等帳戶 +apps/erpnext/erpnext/setup/doctype/territory/territory.js +13,This is a root territory and cannot be edited.,集團或Ledger ,借方或貸方,是特等科目 apps/erpnext/erpnext/setup/doctype/sales_person/sales_person_tree.js +5,New Sales Person Name,新銷售人員的姓名 DocType: Packing Slip,Gross Weight UOM,毛重計量單位 DocType: Employee Transfer,Create New Employee Id,創建新的員工ID @@ -6170,12 +6170,12 @@ DocType: Bin,Reserved Qty for Production,預留數量生產 DocType: Student Group Creation Tool,Leave unchecked if you don't want to consider batch while making course based groups. ,如果您不想在製作基於課程的組時考慮批量,請不要選中。 DocType: Student Group Creation Tool,Leave unchecked if you don't want to consider batch while making course based groups. ,如果您不想在製作基於課程的組時考慮批量,請不要選中。 DocType: Asset,Frequency of Depreciation (Months),折舊率(月) -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +542,Credit Account,信用賬戶 +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +542,Credit Account,信用科目 DocType: Landed Cost Item,Landed Cost Item,到岸成本項目 apps/erpnext/erpnext/accounts/report/profitability_analysis/profitability_analysis.js +58,Show zero values,顯示零值 DocType: BOM,Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,製造/從原材料數量給予重新包裝後獲得的項目數量 DocType: Lab Test,Test Group,測試組 -DocType: Payment Reconciliation,Receivable / Payable Account,應收/應付賬款 +DocType: Payment Reconciliation,Receivable / Payable Account,應收/應付帳款 DocType: Delivery Note Item,Against Sales Order Item,對銷售訂單項目 DocType: Company,Company Logo,公司標誌 apps/erpnext/erpnext/stock/doctype/item/item.py +787,Please specify Attribute Value for attribute {0},請指定屬性值的屬性{0} @@ -6199,10 +6199,10 @@ apps/erpnext/erpnext/stock/doctype/item/item.js +29,Balance,餘額 apps/erpnext/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py +66,Please select the Company,請選擇公司 DocType: Room,Seating Capacity,座位數 DocType: Lab Test Groups,Lab Test Groups,實驗室測試組 -apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py +151,Party Type and Party is mandatory for {0} account,{0}帳戶必須使用派對類型和派對 +apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py +151,Party Type and Party is mandatory for {0} account,{0}科目的參與方以及類型為必填 DocType: Project,Total Expense Claim (via Expense Claims),總費用報銷(通過費用報銷) DocType: GST Settings,GST Summary,消費稅總結 -apps/erpnext/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py +16,Please enable default incoming account before creating Daily Work Summary Group,請在創建日常工作摘要組之前啟用默認傳入帳戶 +apps/erpnext/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py +16,Please enable default incoming account before creating Daily Work Summary Group,請在創建日常工作摘要組之前啟用默認傳入科目 DocType: Assessment Result,Total Score,總得分 DocType: Crop Cycle,ISO 8601 standard,ISO 8601標準 DocType: Journal Entry,Debit Note,繳費單 @@ -6222,7 +6222,7 @@ DocType: Manufacturing Settings,Default Finished Goods Warehouse,預設成品倉 apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js +380,Please select Patient,請選擇患者 apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +74,Sales Person,銷售人員 DocType: Hotel Room Package,Amenities,設施 -DocType: QuickBooks Migrator,Undeposited Funds Account,未存入資金賬戶 +DocType: QuickBooks Migrator,Undeposited Funds Account,未存入資金科目 apps/erpnext/erpnext/config/accounts.py +201,Budget and Cost Center,預算和成本中心 apps/erpnext/erpnext/accounts/doctype/pos_profile/pos_profile.py +65,Multiple default mode of payment is not allowed,不允許多種默認付款方式 DocType: Sales Invoice,Loyalty Points Redemption,忠誠積分兌換 @@ -6230,7 +6230,7 @@ DocType: Sales Invoice,Loyalty Points Redemption,忠誠積分兌換 DocType: Lead,Blog Subscriber,網誌訂閱者 DocType: Guardian,Alternate Number,備用號碼 apps/erpnext/erpnext/config/setup.py +83,Create rules to restrict transactions based on values.,創建規則來限制基於價值的交易。 -DocType: Cash Flow Mapping Accounts,Cash Flow Mapping Accounts,現金流量映射賬戶 +DocType: Cash Flow Mapping Accounts,Cash Flow Mapping Accounts,現金流量映射科目 apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py +49, Group Roll No,組卷號 DocType: Batch,Manufacturing Date,生產日期 apps/erpnext/erpnext/education/doctype/fee_schedule/fee_schedule_list.js +9,Fee Creation Failed,費用創作失敗 @@ -6283,7 +6283,7 @@ DocType: Fiscal Year,Year Start Date,年結開始日期 DocType: Additional Salary,Employee Name,員工姓名 DocType: Restaurant Order Entry Item,Restaurant Order Entry Item,餐廳訂單錄入項目 DocType: Purchase Invoice,Rounded Total (Company Currency),整數總計(公司貨幣) -apps/erpnext/erpnext/accounts/doctype/account/account.py +103,Cannot covert to Group because Account Type is selected.,不能隱蔽到組,因為帳戶類型選擇的。 +apps/erpnext/erpnext/accounts/doctype/account/account.py +103,Cannot covert to Group because Account Type is selected.,不能轉換到群組科目,因為科目類型選擇的。 apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +276,{0} {1} has been modified. Please refresh.,{0} {1} 已修改。請更新。 DocType: Leave Block List,Stop users from making Leave Applications on following days.,停止用戶在下面日期提出休假申請。 apps/erpnext/erpnext/accounts/doctype/loyalty_program/loyalty_program.js +24,"If unlimited expiry for the Loyalty Points, keep the Expiry Duration empty or 0.",如果忠誠度積分無限期到期,請將到期時間保持為空或0。 @@ -6312,7 +6312,7 @@ DocType: Company,Basic Component,基本組件 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +578,Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2},行無{0}:金額不能大於金額之前對報銷{1}。待審核金額為{2} DocType: Patient Service Unit,Medical Administrator,醫療管理員 DocType: Assessment Plan,Schedule,時間表 -DocType: Account,Parent Account,父帳戶 +DocType: Account,Parent Account,上層科目 DocType: Quality Inspection Reading,Reading 3,閱讀3 DocType: Stock Entry,Source Warehouse Address,來源倉庫地址 DocType: GL Entry,Voucher Type,憑證類型 @@ -6356,7 +6356,7 @@ apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +249,Row {0 DocType: Employee Promotion,Employee Promotion,員工晉升 DocType: Maintenance Team Member,Maintenance Team Member,維護團隊成員 apps/erpnext/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.html +16,Course Code: ,課程編號: -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +241,Please enter Expense Account,請輸入您的費用帳戶 +apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +241,Please enter Expense Account,請輸入您的費用科目 DocType: Account,Stock,庫存 apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +1128,"Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry",行#{0}:參考文件類型必須是採購訂單之一,購買發票或日記帳分錄 DocType: Employee,Current Address,當前地址 @@ -6372,7 +6372,7 @@ DocType: Sales Order,Track this Sales Order against any Project,跟踪對任何 DocType: Bank Statement Transaction Entry,Bank Statement Transaction Entry,銀行對賬單交易分錄 DocType: Sales Invoice Item,Discount and Margin,折扣和保證金 DocType: Lab Test,Prescription,處方 -DocType: Company,Default Deferred Revenue Account,默認遞延收入賬戶 +DocType: Company,Default Deferred Revenue Account,默認遞延收入科目 DocType: Project,Second Email,第二封郵件 DocType: Budget,Action if Annual Budget Exceeded on Actual,年度預算超出實際的行動 DocType: Pricing Rule,Min Qty,最小數量 @@ -6394,7 +6394,7 @@ apps/erpnext/erpnext/config/manufacturing.py +18,Generate Material Requests (MRP apps/erpnext/erpnext/accounts/doctype/pos_profile/pos_profile.py +62,Set default mode of payment,設置默認付款方式 DocType: BOM,With Operations,加入作業 DocType: Support Search Source,Post Route Key List,發布路由密鑰列表 -apps/erpnext/erpnext/accounts/party.py +288,Accounting entries have already been made in currency {0} for company {1}. Please select a receivable or payable account with currency {0}.,會計分錄已取得貨幣{0}為公司{1}。請選擇一個應收或應付賬戶幣種{0}。 +apps/erpnext/erpnext/accounts/party.py +288,Accounting entries have already been made in currency {0} for company {1}. Please select a receivable or payable account with currency {0}.,會計分錄已取得貨幣{0}為公司{1}。請選擇一個應收或應付科目幣種{0}。 DocType: Asset,Is Existing Asset,是對現有資產 DocType: Salary Component,Statistical Component,統計組成部分 DocType: Salary Component,Statistical Component,統計組成部分 @@ -6482,7 +6482,7 @@ apps/erpnext/erpnext/public/js/hub/components/item_publish_dialog.js +3,Edit Pub DocType: Packing Slip,Package Weight Details,包裝重量詳情 DocType: Leave Type,Is Compensatory,是有補償的 DocType: Restaurant Reservation,Reservation Time,預訂時間 -DocType: Payment Gateway Account,Payment Gateway Account,網路支付閘道帳戶 +DocType: Payment Gateway Account,Payment Gateway Account,網路支付閘道科目 DocType: Shopping Cart Settings,After payment completion redirect user to selected page.,支付完成後重定向用戶選擇的頁面。 DocType: Company,Existing Company,現有的公司 DocType: Healthcare Settings,Result Emailed,電子郵件結果 @@ -6507,7 +6507,7 @@ DocType: Terms and Conditions,Terms and Conditions Help,條款和條件幫助 ,Item-wise Purchase Register,項目明智的購買登記 DocType: Loyalty Point Entry,Expiry Date,到期時間 DocType: Healthcare Settings,Employee name and designation in print,員工姓名和印刷品名稱 -,accounts-browser,賬戶瀏覽器 +,accounts-browser,科目瀏覽器 apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +381,Please select Category first,請先選擇分類 apps/erpnext/erpnext/config/projects.py +13,Project master.,專案主持。 apps/erpnext/erpnext/controllers/status_updater.py +215,"To allow over-billing or over-ordering, update ""Allowance"" in Stock Settings or the Item.",要允許對賬單或過度訂貨,庫存設置或更新項目“津貼”。 @@ -6526,11 +6526,11 @@ apps/erpnext/erpnext/patches/v11_0/add_default_dispatch_notification_template.py apps/erpnext/erpnext/controllers/accounts_controller.py +693,Row #{0}: Posting Date must be same as purchase date {1} of asset {2},行#{0}:過帳日期必須是相同的購買日期{1}資產的{2} DocType: Program Enrollment,Check this if the Student is residing at the Institute's Hostel.,如果學生住在學院的旅館,請檢查。 apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +125,Please enter Sales Orders in the above table,請在上表中輸入銷售訂單 -,Stock Summary,股票摘要 +,Stock Summary,庫存摘要 apps/erpnext/erpnext/config/assets.py +62,Transfer an asset from one warehouse to another,從一個倉庫轉移資產到另一 DocType: Employee Benefit Application,Remaining Benefits (Yearly),剩餘福利(每年) apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +873,Bill of Materials,材料清單 -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +137,Row {0}: Party Type and Party is required for Receivable / Payable account {1},行{0}:黨的類型和黨的需要應收/應付帳戶{1} +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +137,Row {0}: Party Type and Party is required for Receivable / Payable account {1},行{0}:參與方類型和參與方需要應收/應付科目{1} DocType: Employee,Leave Policy,離開政策 apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +865,Update Items,更新項目 apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +94,Ref Date,參考日期 @@ -6542,7 +6542,7 @@ DocType: GL Entry,Is Opening,是開幕 DocType: Department,Expense Approvers,費用審批人 apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +228,Row {0}: Debit entry can not be linked with a {1},行{0}:借方條目不能與{1}連接 DocType: Journal Entry,Subscription Section,認購科 -apps/erpnext/erpnext/accounts/doctype/account/account.py +238,Account {0} does not exist,帳戶{0}不存在 +apps/erpnext/erpnext/accounts/doctype/account/account.py +238,Account {0} does not exist,科目{0}不存在 DocType: Training Event,Training Program,培訓計劃 DocType: Account,Cash,現金 DocType: Employee,Short biography for website and other publications.,網站和其他出版物的短的傳記。