mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-31 15:32:27 +00:00
Merge branch 'develop' into project-duplicate-read-permission-check
This commit is contained in:
@@ -22,6 +22,6 @@ jobs:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: alyf-de/po-review-action@v1.1.0
|
||||
- uses: alyf-de/po-review-action@5928f84d6bc9094f9ad6e2c5780f01c0044b800e # v1.1.1
|
||||
with:
|
||||
hidden-po-files: eo.po
|
||||
|
||||
@@ -204,8 +204,8 @@ class AccountsSettings(Document):
|
||||
if self.add_taxes_from_item_tax_template and self.add_taxes_from_taxes_and_charges_template:
|
||||
frappe.throw(
|
||||
_("You cannot enable both the settings '{0}' and '{1}'.").format(
|
||||
frappe.bold(_(self.meta.get_label("add_taxes_from_item_tax_template"))),
|
||||
frappe.bold(_(self.meta.get_label("add_taxes_from_taxes_and_charges_template"))),
|
||||
frappe.bold(self.meta.get_translated_label("add_taxes_from_item_tax_template")),
|
||||
frappe.bold(self.meta.get_translated_label("add_taxes_from_taxes_and_charges_template")),
|
||||
),
|
||||
title=_("Auto Tax Settings Error"),
|
||||
)
|
||||
|
||||
@@ -442,7 +442,9 @@ class AccountFilterValidator(Validator):
|
||||
if not isinstance(field, str) or not isinstance(operator, str):
|
||||
return "Field and operator must be strings"
|
||||
|
||||
display = (field if advanced_filtering else self.account_meta.get_label(field)) or field
|
||||
display = (
|
||||
field if advanced_filtering else self.account_meta.get_translated_label(field)
|
||||
) or field
|
||||
|
||||
if field not in account_fields:
|
||||
return f"Field '{display}' is not a valid Account field"
|
||||
|
||||
@@ -134,7 +134,7 @@ class GLEntry(Document):
|
||||
mandatory = ["account", "voucher_type", "voucher_no", "company"]
|
||||
for k in mandatory:
|
||||
if not self.get(k):
|
||||
frappe.throw(_("{0} is required").format(_(self.meta.get_label(k))))
|
||||
frappe.throw(_("{0} is required").format(self.meta.get_translated_label(k)))
|
||||
|
||||
if not self.is_cancelled and not (self.party_type and self.party):
|
||||
account_type = frappe.get_cached_value("Account", self.account, "account_type")
|
||||
|
||||
@@ -677,6 +677,6 @@ Object.assign(erpnext.journal_entry, {
|
||||
} else {
|
||||
erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
|
||||
}
|
||||
frm.refresh_field("accounts");
|
||||
frm.get_field("accounts").grid.refresh_row(cdn);
|
||||
},
|
||||
});
|
||||
|
||||
@@ -278,7 +278,8 @@ class PaymentEntry(AccountsController):
|
||||
if not liability_account:
|
||||
throw(
|
||||
_("Please set default {0} in Company {1}").format(
|
||||
frappe.bold(frappe.get_meta("Company").get_label(fieldname)), frappe.bold(self.company)
|
||||
frappe.bold(frappe.get_meta("Company").get_translated_label(fieldname)),
|
||||
frappe.bold(self.company),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -661,7 +662,7 @@ class PaymentEntry(AccountsController):
|
||||
def validate_mandatory(self):
|
||||
for field in ("paid_amount", "received_amount", "source_exchange_rate", "target_exchange_rate"):
|
||||
if not self.get(field):
|
||||
frappe.throw(_("{0} is mandatory").format(_(self.meta.get_label(field))))
|
||||
frappe.throw(_("{0} is mandatory").format(self.meta.get_translated_label(field)))
|
||||
|
||||
def validate_reference_documents(self):
|
||||
valid_reference_doctypes = self.get_valid_reference_doctypes()
|
||||
@@ -1151,7 +1152,7 @@ class PaymentEntry(AccountsController):
|
||||
if value:
|
||||
continue
|
||||
|
||||
label = _(frappe.get_meta("Company").get_label(fieldname))
|
||||
label = frappe.get_meta("Company").get_translated_label(fieldname)
|
||||
return frappe.msgprint(
|
||||
_("Please set {0} in Company {1} to account for Exchange Gain / Loss").format(
|
||||
label, get_link_to_form("Company", self.company)
|
||||
|
||||
@@ -647,7 +647,7 @@ class PaymentReconciliation(Document):
|
||||
def check_mandatory_to_fetch(self):
|
||||
for fieldname in ["company", "party_type", "party", "receivable_payable_account"]:
|
||||
if not self.get(fieldname):
|
||||
frappe.throw(_("Please select {0} first").format(_(self.meta.get_label(fieldname))))
|
||||
frappe.throw(_("Please select {0} first").format(self.meta.get_translated_label(fieldname)))
|
||||
|
||||
def validate_entries(self):
|
||||
if not self.get("invoices"):
|
||||
|
||||
@@ -187,7 +187,10 @@ class PricingRule(Document):
|
||||
|
||||
tocheck = frappe.scrub(self.get("applicable_for", ""))
|
||||
if tocheck and not self.get(tocheck):
|
||||
throw(_("{0} is required").format(_(self.meta.get_label(tocheck))), frappe.MandatoryError)
|
||||
throw(
|
||||
_("{0} is required").format(self.meta.get_translated_label(tocheck)),
|
||||
frappe.MandatoryError,
|
||||
)
|
||||
|
||||
if self.apply_rule_on_other:
|
||||
o_field = "other_" + frappe.scrub(self.apply_rule_on_other)
|
||||
|
||||
@@ -94,10 +94,15 @@ frappe.query_reports["Accounts Payable"] = {
|
||||
options: get_party_type_options(),
|
||||
on_change: function () {
|
||||
frappe.query_report.set_filter_value("party", "");
|
||||
frappe.query_report.toggle_filter_display(
|
||||
"supplier_group",
|
||||
frappe.query_report.get_filter_value("party_type") !== "Supplier"
|
||||
);
|
||||
let is_supplier = frappe.query_report.get_filter_value("party_type") === "Supplier";
|
||||
let supplier_group_filter = frappe.query_report.get_filter("supplier_group");
|
||||
if (supplier_group_filter) {
|
||||
supplier_group_filter.df.hidden = !is_supplier;
|
||||
}
|
||||
frappe.query_report.toggle_filter_display("supplier_group", !is_supplier);
|
||||
if (!is_supplier) {
|
||||
frappe.query_report.set_filter_value("supplier_group", []);
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -183,7 +183,7 @@ class PartyValidator:
|
||||
):
|
||||
frappe.throw(
|
||||
_("{0} does not belong to the Company {1}.").format(
|
||||
_(doc.meta.get_label(field)), frappe.bold(doc.company)
|
||||
doc.meta.get_translated_label(field), frappe.bold(doc.company)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1168,7 +1168,7 @@ def get_company_default(company: str, fieldname: str, ignore_validation: bool =
|
||||
if not ignore_validation and not value:
|
||||
throw(
|
||||
_("Please set default {0} in Company {1}").format(
|
||||
_(frappe.get_meta("Company").get_label(fieldname)), company
|
||||
frappe.get_meta("Company").get_translated_label(fieldname), company
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -524,7 +524,7 @@ class AccountsController(TransactionBase):
|
||||
_(
|
||||
"Please set {0} to {1}, the same account that was used in the original invoice {2}."
|
||||
).format(
|
||||
frappe.bold(_(self.meta.get_label(cr_dr_account_field), context=self.doctype)),
|
||||
frappe.bold(self.meta.get_translated_label(cr_dr_account_field)),
|
||||
frappe.bold(original_account),
|
||||
frappe.bold(self.return_against),
|
||||
)
|
||||
|
||||
@@ -304,8 +304,8 @@ class BuyingController(SubcontractingController):
|
||||
frappe.throw(
|
||||
_("Row #{idx}: {from_warehouse_field} and {to_warehouse_field} cannot be same.").format(
|
||||
idx=item.idx,
|
||||
from_warehouse_field=_(item.meta.get_label("from_warehouse")),
|
||||
to_warehouse_field=_(item.meta.get_label("warehouse")),
|
||||
from_warehouse_field=item.meta.get_translated_label("from_warehouse"),
|
||||
to_warehouse_field=item.meta.get_translated_label("warehouse"),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -710,7 +710,7 @@ class BuyingController(SubcontractingController):
|
||||
frappe.throw(
|
||||
_("Row #{idx}: {field_label} is mandatory.").format(
|
||||
idx=d.idx,
|
||||
field_label=_(d.meta.get_label("conversion_factor")),
|
||||
field_label=d.meta.get_translated_label("conversion_factor"),
|
||||
)
|
||||
)
|
||||
d.stock_qty = flt(d.qty) * flt(d.conversion_factor)
|
||||
@@ -757,7 +757,7 @@ class BuyingController(SubcontractingController):
|
||||
frappe.throw(
|
||||
_("Row #{idx}: {field_label} can not be negative for item {item_code}.").format(
|
||||
idx=item_row["idx"],
|
||||
field_label=_(frappe.get_meta(item_row.doctype).get_label(fieldname)),
|
||||
field_label=frappe.get_meta(item_row.doctype).get_translated_label(fieldname),
|
||||
item_code=frappe.bold(item_row["item_code"]),
|
||||
)
|
||||
)
|
||||
@@ -1210,14 +1210,14 @@ class BuyingController(SubcontractingController):
|
||||
frappe.throw(
|
||||
_("Row #{idx}: {schedule_date} cannot be before {transaction_date}.").format(
|
||||
idx=d.idx,
|
||||
schedule_date=_(self.meta.get_label("schedule_date")),
|
||||
transaction_date=_(self.meta.get_label("transaction_date")),
|
||||
schedule_date=self.meta.get_translated_label("schedule_date"),
|
||||
transaction_date=self.meta.get_translated_label("transaction_date"),
|
||||
)
|
||||
)
|
||||
else:
|
||||
frappe.throw(
|
||||
_("Please enter the {schedule_date}.").format(
|
||||
schedule_date=_(self.meta.get_label("schedule_date"))
|
||||
schedule_date=self.meta.get_translated_label("schedule_date")
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -31,7 +31,9 @@ def validate_return(doc):
|
||||
|
||||
def validate_return_against(doc):
|
||||
if not frappe.db.exists(doc.doctype, doc.return_against):
|
||||
frappe.throw(_("Invalid {0}: {1}").format(doc.meta.get_label("return_against"), doc.return_against))
|
||||
frappe.throw(
|
||||
_("Invalid {0}: {1}").format(doc.meta.get_translated_label("return_against"), doc.return_against)
|
||||
)
|
||||
else:
|
||||
ref_doc = frappe.get_doc(doc.doctype, doc.return_against)
|
||||
|
||||
@@ -40,7 +42,7 @@ def validate_return_against(doc):
|
||||
if ref_doc.get(party_type) != doc.get(party_type):
|
||||
frappe.throw(
|
||||
_("The {0} {1} does not match with the {0} {2} in the {3} {4}").format(
|
||||
doc.meta.get_label(party_type),
|
||||
doc.meta.get_translated_label(party_type),
|
||||
bold(doc.get(party_type)),
|
||||
bold(ref_doc.get(party_type)),
|
||||
ref_doc.doctype,
|
||||
|
||||
@@ -215,7 +215,7 @@ class SellingController(StockController):
|
||||
if not (0 <= self.commission_rate <= 100.0):
|
||||
throw(
|
||||
"{} {}".format(
|
||||
_(self.meta.get_label("commission_rate")),
|
||||
self.meta.get_translated_label("commission_rate"),
|
||||
_("must be between 0 and 100"),
|
||||
)
|
||||
)
|
||||
@@ -306,7 +306,7 @@ class SellingController(StockController):
|
||||
bold(ref_rate_field),
|
||||
bold("net rate"),
|
||||
bold(rate),
|
||||
bold(frappe.get_meta("Selling Settings").get_label("validate_selling_price")),
|
||||
bold(frappe.get_meta("Selling Settings").get_translated_label("validate_selling_price")),
|
||||
get_link_to_form("Selling Settings"),
|
||||
),
|
||||
title=_("Invalid Selling Price"),
|
||||
|
||||
@@ -103,7 +103,7 @@ class StockController(AccountsController):
|
||||
_("Row #{0}: Item {1} has zero rate but '{2}' is not enabled.").format(
|
||||
item.idx,
|
||||
frappe.bold(item.item_code),
|
||||
item.meta.get_label("allow_zero_valuation_rate"),
|
||||
item.meta.get_translated_label("allow_zero_valuation_rate"),
|
||||
),
|
||||
indicator="orange",
|
||||
)
|
||||
|
||||
@@ -157,7 +157,7 @@ class calculate_taxes_and_totals:
|
||||
validate_conversion_rate(
|
||||
self.doc.currency,
|
||||
self.doc.conversion_rate,
|
||||
self.doc.meta.get_label("conversion_rate"),
|
||||
self.doc.meta.get_translated_label("conversion_rate"),
|
||||
self.doc.company,
|
||||
)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: hello@frappe.io\n"
|
||||
"POT-Creation-Date: 2026-08-16 09:41+0000\n"
|
||||
"PO-Revision-Date: 2026-08-18 01:44\n"
|
||||
"PO-Revision-Date: 2026-08-20 02:36\n"
|
||||
"Last-Translator: hello@frappe.io\n"
|
||||
"Language-Team: Bosnian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -343,7 +343,7 @@ msgstr "'Trajanje Važenja Verifikacijskog Linka' mora biti između 15 i 60 minu
|
||||
|
||||
#: erpnext/accounts/doctype/bank_account/bank_account.py:79
|
||||
msgid "'{0}' account is already used by {1}. Use another account."
|
||||
msgstr "Račun '{0}' već koristi {1}. Koristite drugi račun."
|
||||
msgstr "Račun '{0}' već koristi {1}. Koristi drugi račun."
|
||||
|
||||
#: erpnext/accounts/doctype/pos_settings/pos_settings.py:44
|
||||
msgid "'{0}' has been already added."
|
||||
@@ -48100,7 +48100,7 @@ msgstr "Red {0}: Dodijeljeni iznos {1} mora biti manji ili jednak preostalom izn
|
||||
|
||||
#: erpnext/stock/doctype/stock_entry/stock_entry.py:810
|
||||
msgid "Row {0}: As {1} is enabled, raw materials cannot be added to {2} entry. Use {3} entry to consume raw materials."
|
||||
msgstr "Red {0}: Kako je {1} omogućen, sirovine se ne mogu dodati u {2} unos. Koristite {3} unos za potrošnju sirovina."
|
||||
msgstr "Red {0}: Kako je {1} omogućen, sirovine se ne mogu dodati u {2} unos. Koristi {3} unos za potrošnju sirovina."
|
||||
|
||||
#: erpnext/stock/doctype/material_request/material_request.py:625
|
||||
msgid "Row {0}: Bill of Materials not found for the Item {1}"
|
||||
@@ -60958,7 +60958,7 @@ msgstr "Hitno"
|
||||
|
||||
#: erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js:36
|
||||
msgid "Use 'Repost in background' button to trigger background job. Job can only be triggered when document is in Queued or Failed status."
|
||||
msgstr "Koristite dugme 'Ponovo knjiži u pozadini' da pokrenete posao u pozadini. Zadatak se može pokrenuti samo kada je dokument u stanju čekanja ili neuspješan."
|
||||
msgstr "Koristi dugme 'Ponovo knjiži u pozadini' da pokrenete posao u pozadini. Zadatak se može pokrenuti samo kada je dokument u stanju čekanja ili neuspješan."
|
||||
|
||||
#. Description of the 'Advanced Filtering' (Check) field in DocType 'Financial
|
||||
#. Report Row'
|
||||
@@ -61105,7 +61105,7 @@ msgstr "Koristi Devizni Kurs Datuma Transakcije"
|
||||
|
||||
#: erpnext/projects/doctype/project/project.py:671
|
||||
msgid "Use a name that is different from previous project name"
|
||||
msgstr "Koristite naziv koji se razlikuje od naziva prethodnog projekta"
|
||||
msgstr "Koristi naziv koji se razlikuje od naziva prethodnog projekta"
|
||||
|
||||
#. Label of the use_for_shopping_cart (Check) field in DocType 'Tax Rule'
|
||||
#: erpnext/accounts/doctype/tax_rule/tax_rule.json
|
||||
@@ -61122,13 +61122,13 @@ msgstr "Koristi stari Kontroler Proračuna"
|
||||
#. 'Accounts Settings'
|
||||
#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json
|
||||
msgid "Use legacy controller for Period Closing Voucher"
|
||||
msgstr "Koristite stari kontroler za Verifikat Zatvaranje Perioda"
|
||||
msgstr "Koristi stari kontroler za Verifikat Zatvaranje Perioda"
|
||||
|
||||
#. Label of the fallback_to_default_price_list (Check) field in DocType
|
||||
#. 'Selling Settings'
|
||||
#: erpnext/selling/doctype/selling_settings/selling_settings.json
|
||||
msgid "Use prices from Default Price List as fallback"
|
||||
msgstr "Koristite cjene iz Standard Cjenovnika kao Rezervnu Opciju"
|
||||
msgstr "Koristi cjene iz Standard Cjenovnika kao Rezervnu Opciju"
|
||||
|
||||
#. Description of the 'No of Shifts' (Int) field in DocType 'Production Plan'
|
||||
#: erpnext/manufacturing/doctype/production_plan/production_plan.json
|
||||
@@ -64110,7 +64110,7 @@ msgstr "po satu"
|
||||
|
||||
#: erpnext/stock/stock_ledger.py:2251
|
||||
msgid "performing either one below:"
|
||||
msgstr "izvodi bilo koje dolje:"
|
||||
msgstr "izvodi bilo koje niže:"
|
||||
|
||||
#. Description of the 'Product Bundle Item' (Data) field in DocType 'Pick List
|
||||
#. Item'
|
||||
|
||||
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: hello@frappe.io\n"
|
||||
"POT-Creation-Date: 2026-08-16 09:41+0000\n"
|
||||
"PO-Revision-Date: 2026-08-17 01:43\n"
|
||||
"PO-Revision-Date: 2026-08-23 02:59\n"
|
||||
"Last-Translator: hello@frappe.io\n"
|
||||
"Language-Team: Persian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -22508,7 +22508,7 @@ msgstr "دفتر کل"
|
||||
#. Settings'
|
||||
#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json
|
||||
msgid "General Ledger Report"
|
||||
msgstr ""
|
||||
msgstr "گزارش دفتر کل"
|
||||
|
||||
#. Label of the general_ledger_remarks_length (Int) field in DocType 'Accounts
|
||||
#. Settings'
|
||||
@@ -26090,7 +26090,7 @@ msgstr ""
|
||||
|
||||
#: erpnext/controllers/queries.py:227
|
||||
msgid "Invalid party type: {0}"
|
||||
msgstr ""
|
||||
msgstr "نوع طرف نامعتبر: {0}"
|
||||
|
||||
#: erpnext/public/js/utils/serial_batch_inline_editor.js:773
|
||||
msgid "Invalid range. Use the format {0}"
|
||||
@@ -27226,7 +27226,7 @@ msgstr "آیتم"
|
||||
#. Schedule'
|
||||
#: erpnext/manufacturing/doctype/production_plan_schedule/production_plan_schedule.json
|
||||
msgid "Item & Operation"
|
||||
msgstr ""
|
||||
msgstr "آیتم و عملیات"
|
||||
|
||||
#: erpnext/stock/report/bom_search/bom_search.js:8
|
||||
msgid "Item 1"
|
||||
|
||||
11645
erpnext/locale/hu.po
11645
erpnext/locale/hu.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: hello@frappe.io\n"
|
||||
"POT-Creation-Date: 2026-08-16 09:41+0000\n"
|
||||
"PO-Revision-Date: 2026-08-17 01:43\n"
|
||||
"PO-Revision-Date: 2026-08-21 02:30\n"
|
||||
"Last-Translator: hello@frappe.io\n"
|
||||
"Language-Team: Swedish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -29827,7 +29827,7 @@ msgstr "Begränsad till tolv tecken"
|
||||
#. Settings'
|
||||
#: erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json
|
||||
msgid "Limits don't apply on"
|
||||
msgstr "Begränsningar gäller inte för"
|
||||
msgstr "Begränsning gäller inte för"
|
||||
|
||||
#. Label of the reference_code (Data) field in DocType 'Financial Report Row'
|
||||
#: erpnext/accounts/doctype/financial_report_row/financial_report_row.json
|
||||
@@ -36153,7 +36153,7 @@ msgstr "Sidbrytning efter varje SoA"
|
||||
|
||||
#: banking/src/components/features/BankStatementImporter/PDF/PDFTableEditor.tsx:302
|
||||
msgid "Page preview"
|
||||
msgstr "Förhandsgranska Sida"
|
||||
msgstr "Förhandsvisa Sida"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Payment Request'
|
||||
#. Option for the 'Status' (Select) field in DocType 'POS Invoice'
|
||||
@@ -40391,17 +40391,17 @@ msgstr "Förhindrar att system automatiskt använder pris från senaste inköp t
|
||||
#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:268
|
||||
#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
|
||||
msgid "Preview Email"
|
||||
msgstr "Förhandsgranska E-post"
|
||||
msgstr "Förhandsvisa E-post"
|
||||
|
||||
#. Label of the download_materials_request_plan_section_section (Section Break)
|
||||
#. field in DocType 'Production Plan'
|
||||
#: erpnext/manufacturing/doctype/production_plan/production_plan.json
|
||||
msgid "Preview Required Materials"
|
||||
msgstr "Förhandsgranska Erfordrad Material"
|
||||
msgstr "Förhandsvisa Erfordrad Material"
|
||||
|
||||
#: banking/src/components/features/BankStatementImporter/CSV/StatementDetails.tsx:230
|
||||
msgid "Preview Transactions"
|
||||
msgstr "Förhandsgranska Transaktioner"
|
||||
msgstr "Förhandsvisa Transaktioner"
|
||||
|
||||
#. Label of the preview_mode (Check) field in DocType 'Accounts Settings'
|
||||
#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json
|
||||
|
||||
20910
erpnext/locale/zh_TW.po
20910
erpnext/locale/zh_TW.po
File diff suppressed because it is too large
Load Diff
@@ -1018,7 +1018,9 @@ class BOM(WebsiteGenerator):
|
||||
self.transfer_material_against = "Work Order"
|
||||
if not self.transfer_material_against and not self.track_semi_finished_goods and not self.is_new():
|
||||
frappe.throw(
|
||||
_("Setting {0} is required").format(_(self.meta.get_label("transfer_material_against"))),
|
||||
_("Setting {0} is required").format(
|
||||
self.meta.get_translated_label("transfer_material_against")
|
||||
),
|
||||
title=_("Missing value"),
|
||||
)
|
||||
|
||||
|
||||
@@ -203,7 +203,10 @@ class StatusService:
|
||||
if qty > completed_qty:
|
||||
frappe.throw(
|
||||
_("{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3}").format(
|
||||
_(self.doc.meta.get_label(fieldname)), qty, completed_qty, self.doc.name
|
||||
self.doc.meta.get_translated_label(fieldname),
|
||||
qty,
|
||||
completed_qty,
|
||||
self.doc.name,
|
||||
),
|
||||
StockOverProductionError,
|
||||
)
|
||||
|
||||
@@ -941,7 +941,9 @@ class WorkOrder(Document):
|
||||
self.transfer_material_against = "Work Order"
|
||||
if not self.transfer_material_against:
|
||||
frappe.throw(
|
||||
_("Setting {0} is required").format(_(self.meta.get_label("transfer_material_against"))),
|
||||
_("Setting {0} is required").format(
|
||||
self.meta.get_translated_label("transfer_material_against")
|
||||
),
|
||||
title=_("Missing value"),
|
||||
)
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ erpnext.BOMComparisonTool = class BOMComparisonTool {
|
||||
let [fieldname, value1, value2] = change;
|
||||
return `
|
||||
<tr>
|
||||
<td>${frappe.meta.get_label(doctype, fieldname)}</td>
|
||||
<td>${frappe.meta.get_translated_label(doctype, fieldname)}</td>
|
||||
<td>${frappe.utils.escape_html(cstr(value1))}</td>
|
||||
<td>${frappe.utils.escape_html(cstr(value2))}</td>
|
||||
</tr>
|
||||
@@ -146,7 +146,7 @@ erpnext.BOMComparisonTool = class BOMComparisonTool {
|
||||
return `
|
||||
<tr>
|
||||
${th}
|
||||
<td>${frappe.meta.get_label(child_doctype, fieldname)}</td>
|
||||
<td>${frappe.meta.get_translated_label(child_doctype, fieldname)}</td>
|
||||
<td>${frappe.utils.escape_html(cstr(value1))}</td>
|
||||
<td>${frappe.utils.escape_html(cstr(value2))}</td>
|
||||
</tr>
|
||||
|
||||
@@ -136,7 +136,7 @@ class Task(NestedSet):
|
||||
frappe.throw(
|
||||
_("{0}'s {1} cannot be after {2}'s Expected End Date.").format(
|
||||
get_link_to_form("Task", self.name),
|
||||
_(self.meta.get_label(fieldname)),
|
||||
self.meta.get_translated_label(fieldname),
|
||||
get_link_to_form("Project", self.project),
|
||||
),
|
||||
frappe.exceptions.InvalidDates,
|
||||
@@ -146,7 +146,7 @@ class Task(NestedSet):
|
||||
frappe.throw(
|
||||
_("{0}'s {1} cannot be before {2}'s Expected Start Date.").format(
|
||||
get_link_to_form("Task", self.name),
|
||||
_(self.meta.get_label(fieldname)),
|
||||
self.meta.get_translated_label(fieldname),
|
||||
get_link_to_form("Project", self.project),
|
||||
),
|
||||
frappe.exceptions.InvalidDates,
|
||||
|
||||
@@ -263,7 +263,7 @@ erpnext.buying = {
|
||||
frappe.msgprint(
|
||||
__("Row #{0}: {1} can not be negative for item {2}", [
|
||||
item.idx,
|
||||
__(frappe.meta.get_label(cdt, fieldnames[i], cdn)),
|
||||
frappe.meta.get_translated_label(cdt, fieldnames[i], cdn),
|
||||
item.item_code,
|
||||
])
|
||||
);
|
||||
|
||||
@@ -122,7 +122,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
||||
this.frm.doc.conversion_rate,
|
||||
cur_frm ? precision("conversion_rate") : 9
|
||||
);
|
||||
var conversion_rate_label = frappe.meta.get_label(
|
||||
var conversion_rate_label = frappe.meta.get_translated_label(
|
||||
this.frm.doc.doctype,
|
||||
"conversion_rate",
|
||||
this.frm.doc.name
|
||||
|
||||
@@ -1438,17 +1438,17 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
||||
) {
|
||||
const to_clear = [];
|
||||
if (doc.payment_terms_template) {
|
||||
to_clear.push(__(frappe.meta.get_label(cdt, "payment_terms_template")));
|
||||
to_clear.push(frappe.meta.get_translated_label(cdt, "payment_terms_template"));
|
||||
}
|
||||
|
||||
if (doc.payment_schedule?.length) {
|
||||
to_clear.push(__(frappe.meta.get_label(cdt, "payment_schedule")));
|
||||
to_clear.push(frappe.meta.get_translated_label(cdt, "payment_schedule"));
|
||||
}
|
||||
|
||||
frappe.confirm(
|
||||
__(
|
||||
"For the new {0} to take effect, would you like to clear the current {1}?",
|
||||
[__(frappe.meta.get_label(cdt, "due_date")), frappe.utils.comma_and(to_clear)],
|
||||
[frappe.meta.get_translated_label(cdt, "due_date"), frappe.utils.comma_and(to_clear)],
|
||||
"Clear payment terms template and/or payment schedule when due date is changed"
|
||||
),
|
||||
() => {
|
||||
@@ -2646,7 +2646,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
||||
if (!me.frm.doc[fieldname]) {
|
||||
frappe.msgprint(
|
||||
__("Please specify {0}. It is needed to fetch Item Details.", [
|
||||
__(frappe.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name)),
|
||||
frappe.meta.get_translated_label(me.frm.doc.doctype, fieldname, me.frm.doc.name),
|
||||
])
|
||||
);
|
||||
valid = false;
|
||||
|
||||
@@ -46,7 +46,7 @@ $.extend(erpnext.queries, {
|
||||
cur_frm.scroll_to_field("customer");
|
||||
frappe.show_alert({
|
||||
message: __("Please set {0} first.", [
|
||||
__(frappe.meta.get_label(doc.doctype, "customer", doc.name)),
|
||||
frappe.meta.get_translated_label(doc.doctype, "customer", doc.name),
|
||||
]),
|
||||
indicator: "orange",
|
||||
});
|
||||
@@ -61,7 +61,11 @@ $.extend(erpnext.queries, {
|
||||
cur_frm.scroll_to_field(frappe.dynamic_link.fieldname);
|
||||
frappe.show_alert({
|
||||
message: __("Please set {0} first.", [
|
||||
__(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)),
|
||||
frappe.meta.get_translated_label(
|
||||
doc.doctype,
|
||||
frappe.dynamic_link.fieldname,
|
||||
doc.name
|
||||
),
|
||||
]),
|
||||
indicator: "orange",
|
||||
});
|
||||
@@ -79,7 +83,9 @@ $.extend(erpnext.queries, {
|
||||
|
||||
company_contact_query: function (doc) {
|
||||
if (!doc.company) {
|
||||
frappe.throw(__("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "company", doc.name))]));
|
||||
frappe.throw(
|
||||
__("Please set {0}", [frappe.meta.get_translated_label(doc.doctype, "company", doc.name)])
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -94,7 +100,11 @@ $.extend(erpnext.queries, {
|
||||
cur_frm.scroll_to_field(frappe.dynamic_link.fieldname);
|
||||
frappe.show_alert({
|
||||
message: __("Please set {0} first.", [
|
||||
__(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)),
|
||||
frappe.meta.get_translated_label(
|
||||
doc.doctype,
|
||||
frappe.dynamic_link.fieldname,
|
||||
doc.name
|
||||
),
|
||||
]),
|
||||
indicator: "orange",
|
||||
});
|
||||
@@ -115,7 +125,7 @@ $.extend(erpnext.queries, {
|
||||
cur_frm.scroll_to_field("company");
|
||||
frappe.show_alert({
|
||||
message: __("Please set {0} first.", [
|
||||
__(frappe.meta.get_label(doc.doctype, "company", doc.name)),
|
||||
frappe.meta.get_translated_label(doc.doctype, "company", doc.name),
|
||||
]),
|
||||
indicator: "orange",
|
||||
});
|
||||
@@ -146,7 +156,7 @@ $.extend(erpnext.queries, {
|
||||
cur_frm.scroll_to_field("supplier");
|
||||
frappe.show_alert({
|
||||
message: __("Please set {0} first.", [
|
||||
__(frappe.meta.get_label(doc.doctype, "supplier", doc.name)),
|
||||
frappe.meta.get_translated_label(doc.doctype, "supplier", doc.name),
|
||||
]),
|
||||
indicator: "orange",
|
||||
});
|
||||
@@ -160,7 +170,7 @@ $.extend(erpnext.queries, {
|
||||
cur_frm.scroll_to_field("lead");
|
||||
frappe.show_alert({
|
||||
message: __("Please specify a {0} first.", [
|
||||
__(frappe.meta.get_label(doc.doctype, "lead", doc.name)),
|
||||
frappe.meta.get_translated_label(doc.doctype, "lead", doc.name),
|
||||
]),
|
||||
indicator: "orange",
|
||||
});
|
||||
|
||||
@@ -529,7 +529,7 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner {
|
||||
this.show_alert(
|
||||
__("{0} will be set as the {1} in subsequently scanned items", [
|
||||
__(warehouse).bold(),
|
||||
__(warehouse_field_label).bold(),
|
||||
__(warehouse_field_label, null, cur_grid.doctype).bold(),
|
||||
]),
|
||||
"green",
|
||||
6
|
||||
|
||||
@@ -353,12 +353,10 @@ erpnext.sales_common = {
|
||||
this.frm.set_value("commission_rate", 100);
|
||||
frappe.throw(
|
||||
__("{0} cannot be greater than 100", [
|
||||
__(
|
||||
frappe.meta.get_label(
|
||||
this.frm.doc.doctype,
|
||||
"commission_rate",
|
||||
this.frm.doc.name
|
||||
)
|
||||
frappe.meta.get_translated_label(
|
||||
this.frm.doc.doctype,
|
||||
"commission_rate",
|
||||
this.frm.doc.name
|
||||
),
|
||||
])
|
||||
);
|
||||
|
||||
@@ -257,7 +257,7 @@ def handle_mandatory_error(e, customer, lead_name):
|
||||
from frappe.utils import get_link_to_form
|
||||
|
||||
mandatory_fields = e.args[0].split(":")[1].split(",")
|
||||
mandatory_fields = [_(customer.meta.get_label(field.strip())) for field in mandatory_fields]
|
||||
mandatory_fields = [customer.meta.get_translated_label(field.strip()) for field in mandatory_fields]
|
||||
|
||||
frappe.local.message_log = []
|
||||
message = _("Could not auto create Customer due to the following missing mandatory field(s):") + "<br>"
|
||||
|
||||
@@ -118,8 +118,10 @@ class SellingSettings(Document):
|
||||
_(
|
||||
"You have enabled {0} and {1} in {2}. This can lead to prices from the default price list being inserted into the transaction price list."
|
||||
).format(
|
||||
"<i>{}</i>".format(_(self.meta.get_label("fallback_to_default_price_list"))),
|
||||
"<i>{}</i>".format(_(stock_meta.get_label("auto_insert_price_list_rate_if_missing"))),
|
||||
"<i>{}</i>".format(self.meta.get_translated_label("fallback_to_default_price_list")),
|
||||
"<i>{}</i>".format(
|
||||
stock_meta.get_translated_label("auto_insert_price_list_rate_if_missing")
|
||||
),
|
||||
frappe.bold(_("Stock Settings")),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -323,7 +323,7 @@ class Company(NestedSet):
|
||||
if not details:
|
||||
continue
|
||||
|
||||
label = _(self.meta.get_label(fieldname))
|
||||
label = self.meta.get_translated_label(fieldname)
|
||||
|
||||
if details.is_group:
|
||||
frappe.throw(
|
||||
|
||||
@@ -393,7 +393,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
"General Ledger",
|
||||
_(self.meta.get_label("income")),
|
||||
self.meta.get_translated_label("income"),
|
||||
filters={
|
||||
"from_date": self.future_from_date,
|
||||
"to_date": self.future_to_date,
|
||||
@@ -425,7 +425,7 @@ class EmailDigest(Document):
|
||||
filters = {"currency": self.currency}
|
||||
label = get_link_to_report(
|
||||
"Profit and Loss Statement",
|
||||
label=_(self.meta.get_label(root_type + "_year_to_date")),
|
||||
label=self.meta.get_translated_label(root_type + "_year_to_date"),
|
||||
filters=filters,
|
||||
)
|
||||
|
||||
@@ -433,7 +433,7 @@ class EmailDigest(Document):
|
||||
filters = {"currency": self.currency}
|
||||
label = get_link_to_report(
|
||||
"Profit and Loss Statement",
|
||||
label=_(self.meta.get_label(root_type + "_year_to_date")),
|
||||
label=self.meta.get_translated_label(root_type + "_year_to_date"),
|
||||
filters=filters,
|
||||
)
|
||||
|
||||
@@ -464,7 +464,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
"General Ledger",
|
||||
_(self.meta.get_label("expenses_booked")),
|
||||
self.meta.get_translated_label("expenses_booked"),
|
||||
filters={
|
||||
"company": self.company,
|
||||
"from_date": self.future_from_date,
|
||||
@@ -506,7 +506,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
"Sales Order",
|
||||
label=_(self.meta.get_label("sales_orders_to_bill")),
|
||||
label=self.meta.get_translated_label("sales_orders_to_bill"),
|
||||
report_type="Report Builder",
|
||||
doctype="Sales Order",
|
||||
filters={
|
||||
@@ -540,7 +540,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
"Sales Order",
|
||||
label=_(self.meta.get_label("sales_orders_to_deliver")),
|
||||
label=self.meta.get_translated_label("sales_orders_to_deliver"),
|
||||
report_type="Report Builder",
|
||||
doctype="Sales Order",
|
||||
filters={
|
||||
@@ -574,7 +574,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
"Purchase Order",
|
||||
label=_(self.meta.get_label("purchase_orders_to_receive")),
|
||||
label=self.meta.get_translated_label("purchase_orders_to_receive"),
|
||||
report_type="Report Builder",
|
||||
doctype="Purchase Order",
|
||||
filters={
|
||||
@@ -608,7 +608,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
"Purchase Order",
|
||||
label=_(self.meta.get_label("purchase_orders_to_bill")),
|
||||
label=self.meta.get_translated_label("purchase_orders_to_bill"),
|
||||
report_type="Report Builder",
|
||||
doctype="Purchase Order",
|
||||
filters={
|
||||
@@ -660,7 +660,9 @@ class EmailDigest(Document):
|
||||
"company": self.company,
|
||||
}
|
||||
label = get_link_to_report(
|
||||
"Account Balance", label=_(self.meta.get_label(fieldname)), filters=filters
|
||||
"Account Balance",
|
||||
label=self.meta.get_translated_label(fieldname),
|
||||
filters=filters,
|
||||
)
|
||||
else:
|
||||
filters = {
|
||||
@@ -670,7 +672,9 @@ class EmailDigest(Document):
|
||||
"company": self.company,
|
||||
}
|
||||
label = get_link_to_report(
|
||||
"Account Balance", label=_(self.meta.get_label(fieldname)), filters=filters
|
||||
"Account Balance",
|
||||
label=self.meta.get_translated_label(fieldname),
|
||||
filters=filters,
|
||||
)
|
||||
|
||||
return {"label": label, "value": balance, "last_value": prev_balance}
|
||||
@@ -678,17 +682,17 @@ class EmailDigest(Document):
|
||||
if account_type == "Payable":
|
||||
label = get_link_to_report(
|
||||
"Accounts Payable",
|
||||
label=_(self.meta.get_label(fieldname)),
|
||||
label=self.meta.get_translated_label(fieldname),
|
||||
filters={"report_date": self.future_to_date, "company": self.company},
|
||||
)
|
||||
elif account_type == "Receivable":
|
||||
label = get_link_to_report(
|
||||
"Accounts Receivable",
|
||||
label=_(self.meta.get_label(fieldname)),
|
||||
label=self.meta.get_translated_label(fieldname),
|
||||
filters={"report_date": self.future_to_date, "company": self.company},
|
||||
)
|
||||
else:
|
||||
label = _(self.meta.get_label(fieldname))
|
||||
label = self.meta.get_translated_label(fieldname)
|
||||
|
||||
return {"label": label, "value": balance, "last_value": prev_balance, "count": count}
|
||||
|
||||
@@ -760,7 +764,7 @@ class EmailDigest(Document):
|
||||
)[0]
|
||||
|
||||
return {
|
||||
"label": self.meta.get_label(fieldname),
|
||||
"label": self.meta.get_translated_label(fieldname),
|
||||
"value": value,
|
||||
"billed_value": billed_value,
|
||||
"delivered_value": delivered_value,
|
||||
@@ -793,7 +797,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
"Quotation",
|
||||
label=_(self.meta.get_label(fieldname)),
|
||||
label=self.meta.get_translated_label(fieldname),
|
||||
report_type="Report Builder",
|
||||
doctype="Quotation",
|
||||
filters={
|
||||
@@ -824,7 +828,7 @@ class EmailDigest(Document):
|
||||
|
||||
label = get_link_to_report(
|
||||
doc_type,
|
||||
label=_(self.meta.get_label(fieldname)),
|
||||
label=self.meta.get_translated_label(fieldname),
|
||||
report_type="Report Builder",
|
||||
filters=filters,
|
||||
doctype=doc_type,
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
import os
|
||||
|
||||
import frappe
|
||||
from frappe import N_ as _
|
||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
||||
from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to
|
||||
|
||||
from erpnext.setup.doctype.incoterm.incoterm import create_incoterms
|
||||
from erpnext.setup.utils import identity as _
|
||||
|
||||
from .default_success_action import get_default_success_action
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import os
|
||||
from pathlib import Path
|
||||
|
||||
import frappe
|
||||
from frappe import N_ as _
|
||||
from frappe.desk.doctype.global_search_settings.global_search_settings import (
|
||||
update_global_search_doctypes,
|
||||
)
|
||||
@@ -16,7 +17,6 @@ from frappe.utils.nestedset import get_root_of
|
||||
|
||||
from erpnext.accounts.doctype.account.account import RootNotEditable
|
||||
from erpnext.regional.address_template.setup import set_up_address_templates
|
||||
from erpnext.setup.utils import identity as _
|
||||
|
||||
|
||||
def read_lines(filename: str) -> list[str]:
|
||||
|
||||
@@ -210,15 +210,3 @@ def welcome_email():
|
||||
site_name = get_default_company() or "ERPNext"
|
||||
title = _("Welcome to {0}").format(site_name)
|
||||
return title
|
||||
|
||||
|
||||
def identity(x, *args, **kwargs):
|
||||
"""Used for redefining the translation function to return the string as is.
|
||||
|
||||
We want to create english records but still mark the strings as translatable.
|
||||
E.g. when the respective DocTypes have 'Translate Link Fields' enabled or
|
||||
we're creating custom fields.
|
||||
|
||||
Use like this: `from erpnext.setup.utils import identity as _`
|
||||
"""
|
||||
return x
|
||||
|
||||
@@ -370,7 +370,7 @@ class DeliveryNote(SellingController):
|
||||
if missing_label and missing_label != "No Label":
|
||||
errors.append(
|
||||
_("The field {0} in row {1} is not set").format(
|
||||
frappe.bold(_(missing_label)), frappe.bold(item.idx)
|
||||
frappe.bold(_(missing_label, context=item.doctype)), frappe.bold(item.idx)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@ class Item(Document):
|
||||
_(
|
||||
'Image in the description has been removed. To disable this behavior, uncheck "{0}" in {1}.'
|
||||
).format(
|
||||
frappe.get_meta("Stock Settings").get_label("clean_description_html"),
|
||||
frappe.get_meta("Stock Settings").get_translated_label("clean_description_html"),
|
||||
get_link_to_form("Stock Settings"),
|
||||
),
|
||||
alert=True,
|
||||
@@ -424,8 +424,8 @@ class Item(Document):
|
||||
frappe.throw(
|
||||
_("Taxes row #{0}: {1} cannot be smaller than {2}").format(
|
||||
tax.idx,
|
||||
bold(_(tax.meta.get_label("maximum_net_rate"))),
|
||||
bold(_(tax.meta.get_label("minimum_net_rate"))),
|
||||
bold(tax.meta.get_translated_label("maximum_net_rate")),
|
||||
bold(tax.meta.get_translated_label("minimum_net_rate")),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -702,7 +702,7 @@ class Item(Document):
|
||||
|
||||
if new_properties != [cstr(self.get(field)) for field in field_list]:
|
||||
msg = _("To merge, following properties must be same for both items")
|
||||
msg += ": \n" + ", ".join([_(self.meta.get_label(fld)) for fld in field_list])
|
||||
msg += ": \n" + ", ".join([self.meta.get_translated_label(fld) for fld in field_list])
|
||||
frappe.throw(msg, title=_("Cannot Merge"), exc=DataValidationError)
|
||||
|
||||
def validate_duplicate_product_bundles_before_merge(self, old_name, new_name):
|
||||
@@ -1134,7 +1134,7 @@ class Item(Document):
|
||||
return
|
||||
|
||||
if linked_doc := self._get_linked_submitted_documents(changed_fields):
|
||||
changed_field_labels = [frappe.bold(_(self.meta.get_label(f))) for f in changed_fields]
|
||||
changed_field_labels = [frappe.bold(self.meta.get_translated_label(f)) for f in changed_fields]
|
||||
msg = _(
|
||||
"As there are existing submitted transactions against item {0}, you can not change the value of {1}."
|
||||
).format(self.name, ", ".join(changed_field_labels))
|
||||
|
||||
@@ -56,7 +56,7 @@ class ItemAlternative(Document):
|
||||
|
||||
frappe.msgprint(
|
||||
_("The value of {0} differs between Items {1} and {2}").format(
|
||||
frappe.bold(item_meta.get_label(field)),
|
||||
frappe.bold(item_meta.get_translated_label(field)),
|
||||
frappe.bold(self.alternative_item_code),
|
||||
frappe.bold(self.item_code),
|
||||
),
|
||||
|
||||
@@ -805,7 +805,9 @@ class StockEntry(StockController, SubcontractingInwardController):
|
||||
def _validate_no_raw_materials_in_manufacture_entry(self, settings):
|
||||
for item in self.items:
|
||||
if not item.is_finished_item and not item.secondary_item_type and not item.is_legacy_scrap_item:
|
||||
label = frappe.get_meta(settings.doctype).get_label("get_rm_cost_from_consumption_entry")
|
||||
label = frappe.get_meta(settings.doctype).get_translated_label(
|
||||
"get_rm_cost_from_consumption_entry"
|
||||
)
|
||||
frappe.throw(
|
||||
_(
|
||||
"Row {0}: As {1} is enabled, raw materials cannot be added to {2} entry. Use {3} entry to consume raw materials."
|
||||
|
||||
@@ -195,7 +195,7 @@ class StockLedgerEntry(Document):
|
||||
mandatory = ["warehouse", "posting_date", "voucher_type", "voucher_no", "company"]
|
||||
for k in mandatory:
|
||||
if not self.get(k):
|
||||
frappe.throw(_("{0} is required").format(_(self.meta.get_label(k))))
|
||||
frappe.throw(_("{0} is required").format(self.meta.get_translated_label(k)))
|
||||
|
||||
if self.voucher_type != "Stock Reconciliation" and not self.actual_qty:
|
||||
frappe.throw(_("Actual Qty is mandatory"))
|
||||
|
||||
@@ -245,7 +245,7 @@ class StockReservationEntry(Document):
|
||||
]
|
||||
for d in mandatory:
|
||||
if not self.get(d):
|
||||
msg = _("{0} is required").format(_(self.meta.get_label(d)))
|
||||
msg = _("{0} is required").format(self.meta.get_translated_label(d))
|
||||
frappe.throw(msg)
|
||||
|
||||
def validate_group_warehouse(self) -> None:
|
||||
|
||||
@@ -264,8 +264,10 @@ class StockSettings(Document):
|
||||
_(
|
||||
"You have enabled {0} and {1} in {2}. This can lead to prices from the default price list being inserted in the transaction price list."
|
||||
).format(
|
||||
"<i>{}</i>".format(_(self.meta.get_label("auto_insert_price_list_rate_if_missing"))),
|
||||
"<i>{}</i>".format(_(selling_meta.get_label("fallback_to_default_price_list"))),
|
||||
"<i>{}</i>".format(
|
||||
self.meta.get_translated_label("auto_insert_price_list_rate_if_missing")
|
||||
),
|
||||
"<i>{}</i>".format(selling_meta.get_translated_label("fallback_to_default_price_list")),
|
||||
frappe.bold(_("Selling Settings")),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1440,7 +1440,10 @@ def validate_conversion_rate(ctx: frappe._dict, meta):
|
||||
|
||||
# validate currency conversion rate
|
||||
validate_conversion_rate(
|
||||
ctx.currency, ctx.conversion_rate, meta.get_label("conversion_rate"), ctx.company
|
||||
ctx.currency,
|
||||
ctx.conversion_rate,
|
||||
meta.get_translated_label("conversion_rate"),
|
||||
ctx.company,
|
||||
)
|
||||
|
||||
ctx.conversion_rate = flt(
|
||||
@@ -1461,7 +1464,7 @@ def validate_conversion_rate(ctx: frappe._dict, meta):
|
||||
validate_conversion_rate(
|
||||
ctx.price_list_currency,
|
||||
ctx.plc_conversion_rate,
|
||||
meta.get_label("plc_conversion_rate"),
|
||||
meta.get_translated_label("plc_conversion_rate"),
|
||||
ctx.company,
|
||||
)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
{%- for fieldname in columns -%}
|
||||
{% if doc.get(fieldname) and doc.in_format_data(fieldname) -%}
|
||||
<p>
|
||||
<strong>{{ _(doc.meta.get_label(fieldname)) }}:</strong>
|
||||
<strong>{{ doc.meta.get_translated_label(fieldname) }}:</strong>
|
||||
{{ doc.get_formatted(fieldname, translated=True) }}
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{%- if doc.discount_amount -%}
|
||||
<div class="row">
|
||||
<div class="col-xs-5 {%- if doc.align_labels_right %} text-right{%- endif -%}">
|
||||
<label>{{ _(doc.meta.get_label('discount_amount')) }}</label></div>
|
||||
<label>{{ doc.meta.get_translated_label('discount_amount') }}</label></div>
|
||||
<div class="col-xs-7 text-right">
|
||||
- {{ doc.get_formatted("discount_amount", doc) }}
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
{%- macro render_discount_amount(doc) -%}
|
||||
{%- if doc.discount_amount -%}
|
||||
{{ render_row(_(doc.meta.get_label('discount_amount')), '- ' + doc.get_formatted("discount_amount", doc)) }}
|
||||
{{ render_row(doc.meta.get_translated_label('discount_amount'), '- ' + doc.get_formatted("discount_amount", doc)) }}
|
||||
{%- endif -%}
|
||||
{%- endmacro -%}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user