From 38aaba5720b28d0360339b5fb87d955eab392f6f Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Sat, 13 May 2023 13:00:05 +0530 Subject: [PATCH 1/9] fix: inventory dimension for inter company transfer return use case --- erpnext/controllers/accounts_controller.py | 3 + erpnext/controllers/stock_controller.py | 18 +- .../test_inventory_dimension.py | 171 ++++++++++++++++++ 3 files changed, 190 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index d0ec6541623..3d930d67e04 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -392,6 +392,9 @@ class AccountsController(TransactionBase): ) def validate_inter_company_reference(self): + if self.get("is_return"): + return + if self.doctype not in ("Purchase Invoice", "Purchase Receipt"): return diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 796a069651c..09089be8614 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -449,8 +449,22 @@ class StockController(AccountsController): "Delivery Note", "Stock Entry", ]: - if (sl_dict.actual_qty > 0 and self.doctype in ["Purchase Invoice", "Purchase Receipt"]) or ( - sl_dict.actual_qty < 0 and self.doctype in ["Sales Invoice", "Delivery Note", "Stock Entry"] + if ( + ( + sl_dict.actual_qty > 0 + and not self.get("is_return") + or sl_dict.actual_qty < 0 + and self.get("is_return") + ) + and self.doctype in ["Purchase Invoice", "Purchase Receipt"] + ) or ( + ( + sl_dict.actual_qty < 0 + and not self.get("is_return") + or sl_dict.actual_qty > 0 + and self.get("is_return") + ) + and self.doctype in ["Sales Invoice", "Delivery Note", "Stock Entry"] ): sl_dict[dimension.target_fieldname] = row.get(dimension.source_fieldname) else: diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py index ae5f521f2b8..2d273c66fa6 100644 --- a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py +++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py @@ -4,6 +4,7 @@ import frappe from frappe.custom.doctype.custom_field.custom_field import create_custom_field from frappe.tests.utils import FrappeTestCase +from frappe.utils import nowdate, nowtime from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note from erpnext.stock.doctype.inventory_dimension.inventory_dimension import ( @@ -257,6 +258,8 @@ class TestInventoryDimension(FrappeTestCase): ) def test_for_purchase_sales_and_stock_transaction(self): + from erpnext.controllers.sales_and_purchase_return import make_return_doc + create_inventory_dimension( reference_document="Store", type_of_transaction="Outward", @@ -319,6 +322,98 @@ class TestInventoryDimension(FrappeTestCase): self.assertEqual(entries[0].store, "Store 2") self.assertEqual(entries[0].actual_qty, -10.0) + return_dn = make_return_doc("Delivery Note", dn_doc.name) + return_dn.submit() + entries = get_voucher_sl_entries(return_dn.name, ["warehouse", "store", "actual_qty"]) + + self.assertEqual(entries[0].warehouse, warehouse) + self.assertEqual(entries[0].store, "Store 2") + self.assertEqual(entries[0].actual_qty, 10.0) + + se_doc = make_stock_entry( + item_code=item_code, qty=10, from_warehouse=warehouse, to_warehouse=warehouse, do_not_save=True + ) + + se_doc.items[0].store = "Store 2" + se_doc.items[0].to_store = "Store 1" + + se_doc.save() + se_doc.submit() + + return_pr = make_return_doc("Purchase Receipt", pr_doc.name) + return_pr.submit() + entries = get_voucher_sl_entries(return_pr.name, ["warehouse", "store", "actual_qty"]) + + self.assertEqual(entries[0].warehouse, warehouse) + self.assertEqual(entries[0].store, "Store 1") + self.assertEqual(entries[0].actual_qty, -10.0) + + def test_inter_transfer_return_against_inventory_dimension(self): + from erpnext.controllers.sales_and_purchase_return import make_return_doc + from erpnext.stock.doctype.delivery_note.delivery_note import make_inter_company_purchase_receipt + + data = prepare_data_for_internal_transfer() + + dn_doc = create_delivery_note( + customer=data.customer, + company=data.company, + warehouse=data.from_warehouse, + target_warehouse=data.to_warehouse, + qty=5, + cost_center=data.cost_center, + expense_account=data.expense_account, + do_not_submit=True, + ) + + dn_doc.items[0].store = "Inter Transfer Store 1" + dn_doc.items[0].to_store = "Inter Transfer Store 2" + dn_doc.save() + dn_doc.submit() + + for d in get_voucher_sl_entries(dn_doc.name, ["store", "actual_qty"]): + if d.actual_qty > 0: + self.assertEqual(d.store, "Inter Transfer Store 2") + else: + self.assertEqual(d.store, "Inter Transfer Store 1") + + pr_doc = make_inter_company_purchase_receipt(dn_doc.name) + pr_doc.items[0].warehouse = data.store_warehouse + pr_doc.items[0].from_store = "Inter Transfer Store 2" + pr_doc.items[0].store = "Inter Transfer Store 3" + pr_doc.save() + pr_doc.submit() + + for d in get_voucher_sl_entries(pr_doc.name, ["store", "actual_qty"]): + if d.actual_qty > 0: + self.assertEqual(d.store, "Inter Transfer Store 3") + else: + self.assertEqual(d.store, "Inter Transfer Store 2") + + return_doc = make_return_doc("Purchase Receipt", pr_doc.name) + return_doc.submit() + + for d in get_voucher_sl_entries(return_doc.name, ["store", "actual_qty"]): + if d.actual_qty > 0: + self.assertEqual(d.store, "Inter Transfer Store 2") + else: + self.assertEqual(d.store, "Inter Transfer Store 3") + + dn_doc.load_from_db() + + return_doc1 = make_return_doc("Delivery Note", dn_doc.name) + return_doc1.posting_date = nowdate() + return_doc1.posting_time = nowtime() + return_doc1.items[0].target_warehouse = dn_doc.items[0].target_warehouse + return_doc1.items[0].warehouse = dn_doc.items[0].warehouse + return_doc1.save() + return_doc1.submit() + + for d in get_voucher_sl_entries(return_doc1.name, ["store", "actual_qty"]): + if d.actual_qty > 0: + self.assertEqual(d.store, "Inter Transfer Store 1") + else: + self.assertEqual(d.store, "Inter Transfer Store 2") + def get_voucher_sl_entries(voucher_no, fields): return frappe.get_all( @@ -423,3 +518,79 @@ def create_inventory_dimension(**args): doc.insert(ignore_permissions=True) return doc + + +def prepare_data_for_internal_transfer(): + from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier + from erpnext.selling.doctype.customer.test_customer import create_internal_customer + from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt + from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + + company = "_Test Company with perpetual inventory" + + customer = create_internal_customer( + "_Test Internal Customer 3", + company, + company, + ) + + supplier = create_internal_supplier( + "_Test Internal Supplier 3", + company, + company, + ) + + for store in ["Inter Transfer Store 1", "Inter Transfer Store 2", "Inter Transfer Store 3"]: + if not frappe.db.exists("Store", store): + frappe.get_doc({"doctype": "Store", "store_name": store}).insert(ignore_permissions=True) + + warehouse = create_warehouse("_Test Internal Warehouse New A", company=company) + + to_warehouse = create_warehouse("_Test Internal Warehouse GIT A", company=company) + + pr_doc = make_purchase_receipt( + company=company, warehouse=warehouse, qty=10, rate=100, do_not_submit=True + ) + pr_doc.items[0].store = "Inter Transfer Store 1" + pr_doc.submit() + + if not frappe.db.get_value("Company", company, "unrealized_profit_loss_account"): + account = "Unrealized Profit and Loss - TCP1" + if not frappe.db.exists("Account", account): + frappe.get_doc( + { + "doctype": "Account", + "account_name": "Unrealized Profit and Loss", + "parent_account": "Direct Income - TCP1", + "company": company, + "is_group": 0, + "account_type": "Income Account", + } + ).insert() + + frappe.db.set_value("Company", company, "unrealized_profit_loss_account", account) + + cost_center = frappe.db.get_value("Company", company, "cost_center") or frappe.db.get_value( + "Cost Center", {"company": company}, "name" + ) + + expene_account = frappe.db.get_value( + "Company", company, "stock_adjustment_account" + ) or frappe.db.get_value( + "Account", {"company": company, "account_type": "Expense Account"}, "name" + ) + + return frappe._dict( + { + "from_warehouse": warehouse, + "to_warehouse": to_warehouse, + "customer": customer, + "supplier": supplier, + "company": company, + "cost_center": cost_center, + "expene_account": expene_account, + "store_warehouse": frappe.db.get_value( + "Warehouse", {"name": ("like", "Store%"), "company": company}, "name" + ), + } + ) From 2b59a95162c89743794ea6a0bcf719ee85e4504c Mon Sep 17 00:00:00 2001 From: Phanupong Janthapoon Date: Sun, 14 May 2023 09:36:58 +0700 Subject: [PATCH 2/9] fix: share_transfer display wrong currency symbo In multi-companies setting, on amount and rate field of Share Transfer doctype are displaying wrong currency symbol, when create a Share Transfer of others company that has different currency than the main company. This due to the lack of `options` on those fields. To fix this, add `options` to `amount` and `rate` fields. --- erpnext/accounts/doctype/share_transfer/share_transfer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/accounts/doctype/share_transfer/share_transfer.json b/erpnext/accounts/doctype/share_transfer/share_transfer.json index 59a305317d8..51f2ac19bc7 100644 --- a/erpnext/accounts/doctype/share_transfer/share_transfer.json +++ b/erpnext/accounts/doctype/share_transfer/share_transfer.json @@ -124,6 +124,7 @@ "fieldname": "rate", "fieldtype": "Currency", "label": "Rate", + "options": "Company:company:default_currency", "reqd": 1 }, { @@ -147,6 +148,7 @@ "fieldname": "amount", "fieldtype": "Currency", "label": "Amount", + "options": "Company:company:default_currency", "read_only": 1 }, { From e12e3bb0122fb280e17fd6ba7a436221adf00552 Mon Sep 17 00:00:00 2001 From: HarryPaulo Date: Sat, 13 May 2023 23:38:47 -0300 Subject: [PATCH 3/9] fix: allow search leads by doctype search fields * fix: allow search leads by doctype search fields * fix: allow search leads by doctype search fields, linters fix --- erpnext/controllers/queries.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 799fed99cc7..f1cef71452f 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -53,13 +53,17 @@ def lead_query(doctype, txt, searchfield, start, page_len, filters): doctype = "Lead" fields = get_fields(doctype, ["name", "lead_name", "company_name"]) + searchfields = frappe.get_meta(doctype).get_search_fields() + searchfields = " or ".join(field + " like %(txt)s" for field in searchfields) + return frappe.db.sql( """select {fields} from `tabLead` where docstatus < 2 and ifnull(status, '') != 'Converted' and ({key} like %(txt)s or lead_name like %(txt)s - or company_name like %(txt)s) + or company_name like %(txt)s + or {scond}) {mcond} order by (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end), @@ -68,7 +72,12 @@ def lead_query(doctype, txt, searchfield, start, page_len, filters): idx desc, name, lead_name limit %(page_len)s offset %(start)s""".format( - **{"fields": ", ".join(fields), "key": searchfield, "mcond": get_match_cond(doctype)} + **{ + "fields": ", ".join(fields), + "key": searchfield, + "scond": searchfields, + "mcond": get_match_cond(doctype), + } ), {"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len}, ) From 26c5cfabdc71d706265c2a44432bb7a28986db49 Mon Sep 17 00:00:00 2001 From: Kevin Shenk Date: Sat, 13 May 2023 23:19:28 -0400 Subject: [PATCH 4/9] feat: copy project from timesheet to invoice (#35146) copy project from timesheet to invoice --- erpnext/projects/doctype/timesheet/timesheet.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index d482a46053c..11156f4b506 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -374,6 +374,7 @@ def make_sales_invoice(source_name, item_code=None, customer=None, currency=None billing_rate = billing_amount / hours target.company = timesheet.company + target.project = timesheet.parent_project if customer: target.customer = customer From 19cd68778485525bcfcbc0105c4c2591e9aabff1 Mon Sep 17 00:00:00 2001 From: Daizy Modi Date: Sun, 14 May 2023 08:56:25 +0530 Subject: [PATCH 5/9] fix: function `batch_no` should only be declared once (#35115) fix: remove twice event call of `batch_no` to update batch qty --- erpnext/selling/sales_common.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index f1df3a11de4..e3de49c57d8 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -299,7 +299,8 @@ erpnext.selling.SellingController = class SellingController extends erpnext.Tran } batch_no(doc, cdt, cdn) { - var me = this; + super.batch_no(doc, cdt, cdn); + var item = frappe.get_doc(cdt, cdn); if (item.serial_no) { @@ -378,10 +379,6 @@ erpnext.selling.SellingController = class SellingController extends erpnext.Tran } } - batch_no(doc, cdt, cdn) { - super.batch_no(doc, cdt, cdn); - } - qty(doc, cdt, cdn) { super.qty(doc, cdt, cdn); From 870b02b03cec923bedf1fa75ffdc488ca958ded7 Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Sun, 14 May 2023 05:29:58 +0200 Subject: [PATCH 6/9] fix: allow over-payment against SO (#35079) --- erpnext/selling/doctype/sales_order/sales_order.js | 2 +- erpnext/startup/boot.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index 449d461561a..e9a6cc385d3 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -264,7 +264,7 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex } } // payment request - if(flt(doc.per_billed)<100) { + if(flt(doc.per_billed, precision('per_billed', doc)) < 100 + frappe.boot.sysdefaults.over_billing_allowance) { this.frm.add_custom_button(__('Payment Request'), () => this.make_payment_request(), __('Create')); this.frm.add_custom_button(__('Payment'), () => this.make_payment_entry(), __('Create')); } diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index 62936fcfb89..db1cc494e0b 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -21,6 +21,10 @@ def boot_session(bootinfo): bootinfo.sysdefaults.allow_stale = cint( frappe.db.get_single_value("Accounts Settings", "allow_stale") ) + bootinfo.sysdefaults.over_billing_allowance = frappe.db.get_single_value( + "Accounts Settings", "over_billing_allowance" + ) + bootinfo.sysdefaults.quotation_valid_till = cint( frappe.db.get_single_value("CRM Settings", "default_valid_till") ) From 0c8276ec82c1d4b8cfd1d852b6e2e9a8c3cd3f1a Mon Sep 17 00:00:00 2001 From: "Indrajith.vs" <91895505+Gubbu77@users.noreply.github.com> Date: Sun, 14 May 2023 11:47:46 +0530 Subject: [PATCH 7/9] fix: sales person allocated amount calculation error nonetype and float (#35293) fix: sales person allocated amount calculation error nontype and float --- erpnext/controllers/selling_controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index fc16a917d1f..7687aad8b83 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -168,7 +168,7 @@ class SellingController(StockController): self.round_floats_in(sales_person) sales_person.allocated_amount = flt( - self.amount_eligible_for_commission * sales_person.allocated_percentage / 100.0, + flt(self.amount_eligible_for_commission) * sales_person.allocated_percentage / 100.0, self.precision("allocated_amount", sales_person), ) From 2a609616d9da0eaf078ef3f6763aa4b643eafc97 Mon Sep 17 00:00:00 2001 From: Smit Vora Date: Mon, 15 May 2023 13:24:39 +0530 Subject: [PATCH 8/9] fix: port option for additional_conditions in item wise sales register (#35187) Co-authored-by: Deepesh Garg --- .../item_wise_sales_register.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index c987231fe17..dd9c0736128 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -19,14 +19,19 @@ def execute(filters=None): return _execute(filters) -def _execute(filters=None, additional_table_columns=None, additional_query_columns=None): +def _execute( + filters=None, + additional_table_columns=None, + additional_query_columns=None, + additional_conditions=None, +): if not filters: filters = {} columns = get_columns(additional_table_columns, filters) company_currency = frappe.get_cached_value("Company", filters.get("company"), "default_currency") - item_list = get_items(filters, additional_query_columns) + item_list = get_items(filters, additional_query_columns, additional_conditions) if item_list: itemised_tax, tax_columns = get_tax_accounts(item_list, columns, company_currency) @@ -328,7 +333,7 @@ def get_columns(additional_table_columns, filters): return columns -def get_conditions(filters): +def get_conditions(filters, additional_conditions=None): conditions = "" for opts in ( @@ -341,6 +346,9 @@ def get_conditions(filters): if filters.get(opts[0]): conditions += opts[1] + if additional_conditions: + conditions += additional_conditions + if filters.get("mode_of_payment"): conditions += """ and exists(select name from `tabSales Invoice Payment` where parent=`tabSales Invoice`.name @@ -376,8 +384,8 @@ def get_group_by_conditions(filters, doctype): return "ORDER BY `tab{0}`.{1}".format(doctype, frappe.scrub(filters.get("group_by"))) -def get_items(filters, additional_query_columns): - conditions = get_conditions(filters) +def get_items(filters, additional_query_columns, additional_conditions=None): + conditions = get_conditions(filters, additional_conditions) if additional_query_columns: additional_query_columns = ", " + ", ".join(additional_query_columns) From c236979508c00f4104fa2f45bcc925634f5905fd Mon Sep 17 00:00:00 2001 From: Wolfram Schmidt Date: Mon, 15 May 2023 09:55:23 +0200 Subject: [PATCH 9/9] fix: Update de.csv (#35278) added many fixes on the base of 'No' which is often wrongly translated to 'Kein'. Also removed translation of Naming Seris like ACC-INV-.YYYY.- to ACC-INV-.YYYY.- --- erpnext/translations/de.csv | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index 57556f3ef1d..b4fd76d46cb 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -7638,20 +7638,19 @@ Restaurant Order Entry Item,Restaurantbestellzugangsposten, Served,Serviert, Restaurant Reservation,Restaurant Reservierung, Waitlisted,Auf der Warteliste, -No Show,Keine Show, -No of People,Nein von Menschen, +No Show,Nicht angetreten, +No of People,Anzahl von Personen, Reservation Time,Reservierungszeit, Reservation End Time,Reservierungsendzeit, No of Seats,Anzahl der Sitze, Minimum Seating,Mindestbestuhlung, "Keep Track of Sales Campaigns. Keep track of Leads, Quotations, Sales Order etc from Campaigns to gauge Return on Investment. ","Verkaufskampagne verfolgen: Leads, Angebote, Aufträge usw. von Kampagnen beobachten um die Kapitalverzinsung (RoI) zu messen.", -SAL-CAM-.YYYY.-,SAL-CAM-.YYYY.-, Campaign Schedules,Kampagnenpläne, Buyer of Goods and Services.,Käufer von Waren und Dienstleistungen., -CUST-.YYYY.-,CUST-.YYYY.-, Default Company Bank Account,Standard-Bankkonto des Unternehmens, From Lead,Aus Lead, -Account Manager,Buchhalter, +Account Manager,Kundenberater, +Accounts Manager,Buchhalter, Allow Sales Invoice Creation Without Sales Order,Ermöglichen Sie die Erstellung von Kundenrechnungen ohne Auftrag, Allow Sales Invoice Creation Without Delivery Note,Ermöglichen Sie die Erstellung einer Ausgangsrechnung ohne Lieferschein, Default Price List,Standardpreisliste, @@ -7692,7 +7691,6 @@ Quantity of Items,Anzahl der Artikel, "Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. \n\nThe package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"".\n\nFor 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.\n\nNote: BOM = Bill of Materials","Fassen Sie eine Gruppe von Artikeln zu einem neuen Artikel zusammen. Dies ist nützlich, wenn Sie bestimmte Artikel zu einem Paket bündeln und einen Bestand an Artikel-Bündeln erhalten und nicht einen Bestand der einzelnen Artikel. Das Artikel-Bündel erhält für das Attribut ""Ist Lagerartikel"" den Wert ""Nein"" und für das Attribut ""Ist Verkaufsartikel"" den Wert ""Ja"". Beispiel: Wenn Sie Laptops und Tragetaschen getrennt verkaufen und einen bestimmten Preis anbieten, wenn der Kunde beides zusammen kauft, dann wird der Laptop mit der Tasche zusammen ein neuer Bündel-Artikel. Anmerkung: BOM = Stückliste", Parent Item,Übergeordneter Artikel, List items that form the package.,"Die Artikel auflisten, die das Paket bilden.", -SAL-QTN-.YYYY.-,SAL-QTN-.YYYY.-, Quotation To,Angebot für, Rate at which customer's currency is converted to company's base currency,"Kurs, zu dem die Währung des Kunden in die Basiswährung des Unternehmens umgerechnet wird", Rate at which Price list currency is converted to company's base currency,"Kurs, zu dem die Währung der Preisliste in die Basiswährung des Unternehmens umgerechnet wird", @@ -7704,7 +7702,6 @@ Quotation Item,Angebotsposition, Against Doctype,Zu DocType, Against Docname,Zu Dokumentenname, Additional Notes,Zusätzliche Bemerkungen, -SAL-ORD-.YYYY.-,SAL-ORD-.YYYY.-, Skip Delivery Note,Lieferschein überspringen, In Words will be visible once you save the Sales Order.,"""In Worten"" wird sichtbar, sobald Sie den Auftrag speichern.", Track this Sales Order against any Project,Diesen Auftrag in jedem Projekt nachverfolgen, @@ -7935,7 +7932,7 @@ For reference,Zu Referenzzwecken, Territory Targets,Ziele für die Region, Set Item Group-wise budgets on this Territory. You can also include seasonality by setting the Distribution.,Artikelgruppenbezogene Budgets für diese Region erstellen. Durch Setzen der Auslieferungseinstellungen können auch saisonale Aspekte mit einbezogen werden., UOM Name,Maßeinheit-Name, -Check this to disallow fractions. (for Nos),"Hier aktivieren, um keine Bruchteile zuzulassen (für Nr.)", +Check this to disallow fractions. (for Nos),"Hier aktivieren, um keine Bruchteile zuzulassen (für Anzahl)", Website Item Group,Webseiten-Artikelgruppe, Cross Listing of Item in multiple groups,Kreuzweise Auflistung des Artikels in mehreren Gruppen, Default settings for Shopping Cart,Standardeinstellungen für den Warenkorb, @@ -8016,7 +8013,6 @@ Contact Information,Kontaktinformationen, Email sent to,E-Mail versandt an, Dispatch Information,Versandinformationen, Estimated Arrival,Voraussichtliche Ankunft, -MAT-DT-.YYYY.-,MAT-DT-.YYYY.-, Initial Email Notification Sent,Erste E-Mail-Benachrichtigung gesendet, Delivery Details,Lieferdetails, Driver Email,Fahrer-E-Mail, @@ -8176,7 +8172,6 @@ Purchase Receipt Item,Kaufbeleg-Artikel, Landed Cost Purchase Receipt,Einstandspreis-Kaufbeleg, Landed Cost Taxes and Charges,Einstandspreis Steuern und Gebühren, Landed Cost Voucher,Beleg über Einstandskosten, -MAT-LCV-.YYYY.-,MAT-LCV-.YYYY.-, Purchase Receipts,Kaufbelege, Purchase Receipt Items,Kaufbeleg-Artikel, Get Items From Purchase Receipts,Artikel vom Kaufbeleg übernehmen, @@ -8184,7 +8179,6 @@ Distribute Charges Based On,Kosten auf folgender Grundlage verteilen, Landed Cost Help,Hilfe zum Einstandpreis, Manufacturers used in Items,Hersteller im Artikel verwendet, Limited to 12 characters,Limitiert auf 12 Zeichen, -MAT-MR-.YYYY.-,MAT-MR-.YYYY.-, Partially Ordered,Teilweise bestellt, Transferred,Übergeben, % Ordered,% bestellt, @@ -8199,7 +8193,6 @@ Prevdoc DocType,Prevdoc DocType, Parent Detail docname,Übergeordnetes Detail Dokumentenname, "Generate packing slips for packages to be delivered. Used to notify package number, package contents and its weight.","Packzettel für zu liefernde Pakete generieren. Wird verwendet, um Paketnummer, Packungsinhalt und das Gewicht zu dokumentieren.", Indicates that the package is a part of this delivery (Only Draft),"Zeigt an, dass das Paket ein Teil dieser Lieferung ist (nur Entwurf)", -MAT-PAC-.YYYY.-,MAT-PAC-.YYYY.-, From Package No.,Von Paket Nr., Identification of the package for the delivery (for print),Kennzeichnung des Paketes für die Lieferung (für den Druck), To Package No.,Bis Paket Nr., @@ -8290,7 +8283,6 @@ Under AMC,Innerhalb des jährlichen Wartungsvertrags, Out of AMC,Außerhalb des jährlichen Wartungsvertrags, Warranty Period (Days),Garantiefrist (Tage), Serial No Details,Details zur Seriennummer, -MAT-STE-.YYYY.-,MAT-STE-.JJJJ.-, Stock Entry Type,Bestandsbuchungsart, Stock Entry (Outward GIT),Bestandsbuchung (Outward GIT), Material Consumption for Manufacture,Materialverbrauch für die Herstellung, @@ -8336,7 +8328,6 @@ Stock Queue (FIFO),Lagerverfahren (FIFO), Is Cancelled,Ist storniert, Stock Reconciliation,Bestandsabgleich, This tool helps you to update or fix the quantity and valuation of stock in the system. It is typically used to synchronise the system values and what actually exists in your warehouses.,"Dieses Werkzeug hilft Ihnen dabei, die Menge und die Bewertung von Bestand im System zu aktualisieren oder zu ändern. Es wird in der Regel verwendet, um die Systemwerte und den aktuellen Bestand Ihrer Lager zu synchronisieren.", -MAT-RECO-.YYYY.-,MAT-RECO-.YYYY.-, Reconciliation JSON,Abgleich JSON (JavaScript Object Notation), Stock Reconciliation Item,Bestandsabgleich-Artikel, Before reconciliation,Vor Ausgleich, @@ -8796,8 +8787,7 @@ Availed ITC State/UT Tax,Verfügbare ITC State / UT Tax, Availed ITC Cess,ITC Cess verfügbar, Is Nil Rated or Exempted,Ist gleich Null oder ausgenommen, Is Non GST,Ist nicht GST, -ACC-SINV-RET-.YYYY.-,ACC-SINV-RET-.YYYY.-, -E-Way Bill No.,E-Way Bill No., +E-Way Bill No.,E-Way Bill Nr., Is Consolidated,Ist konsolidiert, Billing Address GSTIN,Rechnungsadresse GSTIN, Customer GSTIN,Kunde GSTIN, @@ -9216,7 +9206,7 @@ Id,Ich würde, Time Required (In Mins),Erforderliche Zeit (in Minuten), From Posting Date,Ab dem Buchungsdatum, To Posting Date,Zum Buchungsdatum, -No records found,Keine Aufzeichnungen gefunden, +No records found,Keine Einträge gefunden, Customer/Lead Name,Name des Kunden / Lead, Unmarked Days,Nicht markierte Tage, Jan,Jan., @@ -9275,7 +9265,7 @@ Delay (in Days),Verzögerung (in Tagen), Group by Sales Order,Nach Auftrag gruppieren, Sales Value,Verkaufswert, Stock Qty vs Serial No Count,Lagermenge vs Seriennummer, -Serial No Count,Seriennummer nicht gezählt, +Serial No Count,Seriennummern gezählt, Work Order Summary,Arbeitsauftragsübersicht, Produce Qty,Menge produzieren, Lead Time (in mins),Vorlaufzeit (in Minuten), @@ -9569,7 +9559,7 @@ Row #{}: Selling rate for item {} is lower than its {}. Selling {} should be atl You can alternatively disable selling price validation in {} to bypass this validation.,"Alternativ können Sie die Validierung des Verkaufspreises in {} deaktivieren, um diese Validierung zu umgehen.", Invalid Selling Price,Ungültiger Verkaufspreis, Address needs to be linked to a Company. Please add a row for Company in the Links table.,Die Adresse muss mit einem Unternehmen verknüpft sein. Bitte fügen Sie eine Zeile für Firma in die Tabelle Links ein., -Company Not Linked,Firma nicht verbunden, +Company Not Linked,Firma nicht verknüpft, Import Chart of Accounts from CSV / Excel files,Kontenplan aus CSV / Excel-Dateien importieren, Completed Qty cannot be greater than 'Qty to Manufacture',Die abgeschlossene Menge darf nicht größer sein als die Menge bis zur Herstellung., "Row {0}: For Supplier {1}, Email Address is Required to send an email","Zeile {0}: Für Lieferant {1} ist eine E-Mail-Adresse erforderlich, um eine E-Mail zu senden", @@ -9656,7 +9646,7 @@ Hide Customer's Tax ID from Sales Transactions,Steuer-ID des Kunden vor Verkaufs Action If Quality Inspection Is Not Submitted,Maßnahme Wenn keine Qualitätsprüfung eingereicht wird, Auto Insert Price List Rate If Missing,"Preisliste automatisch einfügen, falls fehlt", Automatically Set Serial Nos Based on FIFO,Seriennummern basierend auf FIFO automatisch einstellen, -Set Qty in Transactions Based on Serial No Input,Stellen Sie die Menge in Transaktionen basierend auf Seriennummer ohne Eingabe ein, +Set Qty in Transactions Based on Serial No Input,Setze die Anzahl in der Transaktion basierend auf den Seriennummern, Raise Material Request When Stock Reaches Re-order Level,"Erhöhen Sie die Materialanforderung, wenn der Lagerbestand die Nachbestellmenge erreicht", Notify by Email on Creation of Automatic Material Request,Benachrichtigen Sie per E-Mail über die Erstellung einer automatischen Materialanforderung, Allow Material Transfer from Delivery Note to Sales Invoice,Materialübertragung vom Lieferschein zur Ausgangsrechnung zulassen, @@ -9765,7 +9755,7 @@ Open Form View,Öffnen Sie die Formularansicht, POS invoice {0} created succesfully,POS-Rechnung {0} erfolgreich erstellt, Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2}.,Lagermenge nicht ausreichend für Artikelcode: {0} unter Lager {1}. Verfügbare Menge {2}., Serial No: {0} has already been transacted into another POS Invoice.,Seriennummer: {0} wurde bereits in eine andere POS-Rechnung übertragen., -Balance Serial No,Balance Seriennr, +Balance Serial No,Stand Seriennummern, Warehouse: {0} does not belong to {1},Lager: {0} gehört nicht zu {1}, Please select batches for batched item {0},Bitte wählen Sie Chargen für Chargenartikel {0} aus, Please select quantity on row {0},Bitte wählen Sie die Menge in Zeile {0},