diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index f4367cdafd61..f0d7d57fc648 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -7,7 +7,7 @@ import frappe from frappe import ValidationError, _, scrub, throw -from frappe.utils import cint, comma_or, flt, getdate, nowdate +from frappe.utils import cint, comma_or, flt, get_link_to_form, getdate, nowdate from six import iteritems, string_types import erpnext @@ -168,8 +168,31 @@ def delink_advance_entry_references(self): for reference in self.references: if reference.reference_doctype in ("Sales Invoice", "Purchase Invoice"): doc = frappe.get_doc(reference.reference_doctype, reference.reference_name) + + repost_required = False + for adv_reference in doc.get("advances"): + if adv_reference.exchange_gain_loss != 0: + repost_required = True + break + if repost_required: + for item in doc.get("items"): + if item.get("enable_deferred_revenue") or item.get("enable_deferred_expense"): + frappe.msgprint( + _( + "Linked Invoice {0} has Exchange Gain/Loss GL entries due to this Payment. Submit a Journal manually to reverse its effects." + ).format(get_link_to_form(doc.doctype, doc.name)) + ) + repost_required = False + doc.delink_advance_entries(self.name) + if repost_required: + doc.reload() + doc.docstatus = 2 + doc.make_gl_entries() + doc.docstatus = 1 + doc.make_gl_entries() + def set_missing_values(self): if self.payment_type == "Internal Transfer": for field in ( diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 6035e86d067c..46ffd7e18d0c 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -3470,6 +3470,78 @@ def test_gain_loss_with_advance_entry(self): "Accounts Settings", "Accounts Settings", "unlink_payment_on_cancel_of_invoice", unlink_enabled ) + def test_gain_loss_on_advance_cancellation(self): + unlink_enabled = frappe.db.get_single_value( + "Accounts Settings", "unlink_payment_on_cancellation_of_invoice" + ) + + frappe.db.set_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice", 1) + + pe = frappe.get_doc( + { + "doctype": "Payment Entry", + "payment_type": "Receive", + "party_type": "Customer", + "party": "_Test Customer USD", + "company": "_Test Company", + "paid_from_account_currency": "USD", + "paid_to_account_currency": "INR", + "source_exchange_rate": 70, + "target_exchange_rate": 1, + "reference_no": "1", + "reference_date": nowdate(), + "received_amount": 70, + "paid_amount": 1, + "paid_from": "_Test Receivable USD - _TC", + "paid_to": "_Test Cash - _TC", + } + ) + pe.insert() + pe.submit() + + si = create_sales_invoice( + customer="_Test Customer USD", + debit_to="_Test Receivable USD - _TC", + currency="USD", + conversion_rate=75, + do_not_save=1, + rate=1, + ) + si = si.save() + + si.append( + "advances", + { + "reference_type": "Payment Entry", + "reference_name": pe.name, + "advance_amount": 1, + "allocated_amount": 1, + "ref_exchange_rate": 70, + }, + ) + si.save() + si.submit() + expected_gle = [ + ["_Test Receivable USD - _TC", 75.0, 5.0], + ["Exchange Gain/Loss - _TC", 5.0, 0.0], + ["Sales - _TC", 0.0, 75.0], + ] + check_gl_entries(self, si.name, expected_gle, nowdate()) + + # cancel advance payment + pe.reload() + pe.cancel() + + expected_gle_after = [ + ["_Test Receivable USD - _TC", 75.0, 0.0], + ["Sales - _TC", 0.0, 75.0], + ] + check_gl_entries(self, si.name, expected_gle_after, nowdate()) + + frappe.db.set_single_value( + "Accounts Settings", "unlink_payment_on_cancellation_of_invoice", unlink_enabled + ) + def test_batch_expiry_for_sales_invoice_return(self): from erpnext.controllers.sales_and_purchase_return import make_return_doc from erpnext.stock.doctype.item.test_item import make_item diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index c73cb050f01e..35213121b325 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -8,6 +8,7 @@ from frappe.utils import cint, flt from erpnext.controllers.queries import get_match_cond +from erpnext.stock.report.stock_ledger.stock_ledger import get_item_group_condition from erpnext.stock.utils import get_incoming_rate @@ -465,7 +466,14 @@ def get_average_rate_based_on_group_by(self): ): returned_item_rows = self.returned_invoices[row.parent][row.item_code] for returned_item_row in returned_item_rows: - row.qty += flt(returned_item_row.qty) + # returned_items 'qty' should be stateful + if returned_item_row.qty != 0: + if row.qty >= abs(returned_item_row.qty): + row.qty += returned_item_row.qty + returned_item_row.qty = 0 + else: + row.qty = 0 + returned_item_row.qty += row.qty row.base_amount += flt(returned_item_row.base_amount, self.currency_precision) row.buying_amount = flt(flt(row.qty) * flt(row.buying_rate), self.currency_precision) if flt(row.qty) or row.base_amount: @@ -664,6 +672,19 @@ def load_invoice_items(self): if self.filters.to_date: conditions += " and posting_date <= %(to_date)s" + conditions += " and (is_return = 0 or (is_return=1 and return_against is null))" + + if self.filters.item_group: + conditions += " and {0}".format(get_item_group_condition(self.filters.item_group)) + + if self.filters.sales_person: + conditions += """ + and exists(select 1 + from `tabSales Team` st + where st.parent = `tabSales Invoice`.name + and st.sales_person = %(sales_person)s) + """ + if self.filters.group_by == "Sales Person": sales_person_cols = ", sales.sales_person, sales.allocated_amount, sales.incentives" sales_team_table = "left join `tabSales Team` sales on sales.parent = `tabSales Invoice`.name" diff --git a/erpnext/accounts/report/gross_profit/test_gross_profit.py b/erpnext/accounts/report/gross_profit/test_gross_profit.py index 06a173ee35aa..89ed2637e6f2 100644 --- a/erpnext/accounts/report/gross_profit/test_gross_profit.py +++ b/erpnext/accounts/report/gross_profit/test_gross_profit.py @@ -380,3 +380,82 @@ def test_order_connected_dn_and_inv(self): } gp_entry = [x for x in data if x.parent_invoice == sinv.name] self.assertDictContainsSubset(expected_entry, gp_entry[0]) + + def test_crnote_against_invoice_with_multiple_instances_of_same_item(self): + """ + Item Qty for Sales Invoices with multiple instances of same item go in the -ve. Ideally, the credit noteshould cancel out the invoice items. + """ + from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_sales_return + + # Invoice with an item added twice + sinv = self.create_sales_invoice(qty=1, rate=100, posting_date=nowdate(), do_not_submit=True) + sinv.append("items", frappe.copy_doc(sinv.items[0], ignore_no_copy=False)) + sinv = sinv.save().submit() + + # Create Credit Note for Invoice + cr_note = make_sales_return(sinv.name) + cr_note = cr_note.save().submit() + + filters = frappe._dict( + company=self.company, from_date=nowdate(), to_date=nowdate(), group_by="Invoice" + ) + + columns, data = execute(filters=filters) + expected_entry = { + "parent_invoice": sinv.name, + "currency": "INR", + "sales_invoice": self.item, + "customer": self.customer, + "posting_date": frappe.utils.datetime.date.fromisoformat(nowdate()), + "item_code": self.item, + "item_name": self.item, + "warehouse": "Stores - _GP", + "qty": 0.0, + "avg._selling_rate": 0.0, + "valuation_rate": 0.0, + "selling_amount": -100.0, + "buying_amount": 0.0, + "gross_profit": -100.0, + "gross_profit_%": 100.0, + } + gp_entry = [x for x in data if x.parent_invoice == sinv.name] + # Both items of Invoice should have '0' qty + self.assertEqual(len(gp_entry), 2) + self.assertDictContainsSubset(expected_entry, gp_entry[0]) + self.assertDictContainsSubset(expected_entry, gp_entry[1]) + + def test_standalone_cr_notes(self): + """ + Standalone cr notes will be reported as usual + """ + # Make Cr Note + sinv = self.create_sales_invoice( + qty=-1, rate=100, posting_date=nowdate(), do_not_save=True, do_not_submit=True + ) + sinv.is_return = 1 + sinv = sinv.save().submit() + + filters = frappe._dict( + company=self.company, from_date=nowdate(), to_date=nowdate(), group_by="Invoice" + ) + + columns, data = execute(filters=filters) + expected_entry = { + "parent_invoice": sinv.name, + "currency": "INR", + "sales_invoice": self.item, + "customer": self.customer, + "posting_date": frappe.utils.datetime.date.fromisoformat(nowdate()), + "item_code": self.item, + "item_name": self.item, + "warehouse": "Stores - _GP", + "qty": -1.0, + "avg._selling_rate": 100.0, + "valuation_rate": 0.0, + "selling_amount": -100.0, + "buying_amount": 0.0, + "gross_profit": -100.0, + "gross_profit_%": 100.0, + } + gp_entry = [x for x in data if x.parent_invoice == sinv.name] + self.assertDictContainsSubset(expected_entry, gp_entry[0]) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index d44e2ec0c5d3..e46cdb9fc64f 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -380,12 +380,19 @@ def make_depreciation_schedule(self, date_of_disposal): value_after_depreciation -= flt(depreciation_amount, self.precision("gross_purchase_amount")) # Adjust depreciation amount in the last period based on the expected value after useful life - if finance_book.expected_value_after_useful_life and ( - ( - n == cint(number_of_pending_depreciations) - 1 - and value_after_depreciation != finance_book.expected_value_after_useful_life + if ( + finance_book.expected_value_after_useful_life + and ( + ( + n == cint(number_of_pending_depreciations) - 1 + and value_after_depreciation != finance_book.expected_value_after_useful_life + ) + or value_after_depreciation < finance_book.expected_value_after_useful_life + ) + and ( + not self.flags.increase_in_asset_value_due_to_repair + or not finance_book.depreciation_method in ("Written Down Value", "Double Declining Balance") ) - or value_after_depreciation < finance_book.expected_value_after_useful_life ): depreciation_amount += ( value_after_depreciation - finance_book.expected_value_after_useful_life @@ -1171,17 +1178,21 @@ def get_total_days(date, frequency): @erpnext.allow_regional def get_depreciation_amount(asset, depreciable_value, row): if row.depreciation_method in ("Straight Line", "Manual"): - # if the Depreciation Schedule is being prepared for the first time - if not asset.flags.increase_in_asset_life: + # if the Depreciation Schedule is being modified after Asset Repair due to increase in asset life and value + if asset.flags.increase_in_asset_life: depreciation_amount = ( - flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life) + flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) + ) / (date_diff(asset.to_date, asset.available_for_use_date) / 365) + # if the Depreciation Schedule is being modified after Asset Repair due to increase in asset value + elif asset.flags.increase_in_asset_value_due_to_repair: + depreciation_amount = ( + flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) ) / flt(row.total_number_of_depreciations) - - # if the Depreciation Schedule is being modified after Asset Repair + # if the Depreciation Schedule is being prepared for the first time else: depreciation_amount = ( - flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) - ) / (date_diff(asset.to_date, asset.available_for_use_date) / 365) + flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life) + ) / flt(row.total_number_of_depreciations) else: depreciation_amount = flt(depreciable_value * (flt(row.rate_of_depreciation) / 100)) diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py index cd8fe5b18b76..edcbf3e2fd0b 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/asset_repair.py @@ -39,7 +39,11 @@ def calculate_total_repair_cost(self): def before_submit(self): self.check_repair_status() + self.asset_doc.flags.increase_in_asset_value_due_to_repair = False + if self.get("stock_consumption") or self.get("capitalize_repair_cost"): + self.asset_doc.flags.increase_in_asset_value_due_to_repair = True + self.increase_asset_value() if self.get("stock_consumption"): @@ -49,20 +53,23 @@ def before_submit(self): if self.get("capitalize_repair_cost"): self.make_gl_entries() - if ( - frappe.db.get_value("Asset", self.asset, "calculate_depreciation") - and self.increase_in_asset_life - ): + if self.asset_doc.calculate_depreciation and self.increase_in_asset_life: self.modify_depreciation_schedule() self.asset_doc.flags.ignore_validate_update_after_submit = True self.asset_doc.prepare_depreciation_data() + if self.asset_doc.calculate_depreciation: + self.update_asset_expected_value_after_useful_life() self.asset_doc.save() def before_cancel(self): self.asset_doc = frappe.get_doc("Asset", self.asset) + self.asset_doc.flags.increase_in_asset_value_due_to_repair = False + if self.get("stock_consumption") or self.get("capitalize_repair_cost"): + self.asset_doc.flags.increase_in_asset_value_due_to_repair = True + self.decrease_asset_value() if self.get("stock_consumption"): @@ -72,14 +79,13 @@ def before_cancel(self): self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") self.make_gl_entries(cancel=True) - if ( - frappe.db.get_value("Asset", self.asset, "calculate_depreciation") - and self.increase_in_asset_life - ): + if self.asset_doc.calculate_depreciation and self.increase_in_asset_life: self.revert_depreciation_schedule_on_cancellation() self.asset_doc.flags.ignore_validate_update_after_submit = True self.asset_doc.prepare_depreciation_data() + if self.asset_doc.calculate_depreciation: + self.update_asset_expected_value_after_useful_life() self.asset_doc.save() def after_delete(self): @@ -100,6 +106,26 @@ def check_for_stock_items_and_warehouse(self): title=_("Missing Warehouse"), ) + def update_asset_expected_value_after_useful_life(self): + for row in self.asset_doc.get("finance_books"): + if row.depreciation_method in ("Written Down Value", "Double Declining Balance"): + accumulated_depreciation_after_full_schedule = [ + d.accumulated_depreciation_amount + for d in self.asset_doc.get("schedules") + if cint(d.finance_book_id) == row.idx + ] + + accumulated_depreciation_after_full_schedule = max( + accumulated_depreciation_after_full_schedule + ) + + asset_value_after_full_schedule = flt( + flt(row.value_after_depreciation) - flt(accumulated_depreciation_after_full_schedule), + row.precision("expected_value_after_useful_life"), + ) + + row.expected_value_after_useful_life = asset_value_after_full_schedule + def increase_asset_value(self): total_value_of_stock_consumed = self.get_total_value_of_stock_consumed() diff --git a/erpnext/patches.txt b/erpnext/patches.txt index ecbf1f8000cb..79ec14a28fb4 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -376,3 +376,4 @@ erpnext.patches.v13_0.create_accounting_dimensions_for_asset_repair execute:frappe.db.set_value("Naming Series", "Naming Series", {"select_doc_for_series": "", "set_options": "", "prefix": "", "current_value": 0, "user_must_always_select": 0}) erpnext.patches.v13_0.update_schedule_type_in_loans erpnext.patches.v13_0.update_asset_value_for_manual_depr_entries +erpnext.patches.v13_0.update_docs_link diff --git a/erpnext/patches/v13_0/update_docs_link.py b/erpnext/patches/v13_0/update_docs_link.py new file mode 100644 index 000000000000..d6b1c4cffa7c --- /dev/null +++ b/erpnext/patches/v13_0/update_docs_link.py @@ -0,0 +1,14 @@ +# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors +# License: MIT. See LICENSE + + +import frappe + + +def execute(): + navbar_settings = frappe.get_single("Navbar Settings") + for item in navbar_settings.help_dropdown: + if item.is_standard and item.route == "https://erpnext.com/docs/user/manual": + item.route = "https://docs.erpnext.com/docs/v13/user/manual/en/introduction" + + navbar_settings.save() diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index 79196c976f8f..7b64087102fd 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -125,7 +125,7 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ } else { // allow for '0' qty on Credit/Debit notes - let qty = item.qty || -1 + let qty = item.qty || me.frm.doc.is_debit_note ? 1 : -1; item.net_amount = item.amount = flt(item.rate * qty, precision("amount", item)); } diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py index 0b61e7faf9be..d5ef3981faf8 100644 --- a/erpnext/regional/india/utils.py +++ b/erpnext/regional/india/utils.py @@ -1101,18 +1101,21 @@ def update_taxable_values(doc, method): def get_depreciation_amount(asset, depreciable_value, row): if row.depreciation_method in ("Straight Line", "Manual"): - # if the Depreciation Schedule is being prepared for the first time - if not asset.flags.increase_in_asset_life: + # if the Depreciation Schedule is being modified after Asset Repair due to increase in asset life and value + if asset.flags.increase_in_asset_life: depreciation_amount = ( - flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life) + flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) + ) / (date_diff(asset.to_date, asset.available_for_use_date) / 365) + # if the Depreciation Schedule is being modified after Asset Repair due to increase in asset value + elif asset.flags.increase_in_asset_value_due_to_repair: + depreciation_amount = ( + flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) ) / flt(row.total_number_of_depreciations) - - # if the Depreciation Schedule is being modified after Asset Repair + # if the Depreciation Schedule is being prepared for the first time else: depreciation_amount = ( - flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) - ) / (date_diff(asset.to_date, asset.available_for_use_date) / 365) - + flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life) + ) / flt(row.total_number_of_depreciations) else: rate_of_depreciation = row.rate_of_depreciation # if its the first depreciation diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index 20ba74b8cde2..634b4c6a72b1 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -150,7 +150,7 @@ def add_standard_navbar_items(): { "item_label": "Documentation", "item_type": "Route", - "route": "https://erpnext.com/docs/user/manual", + "route": "https://docs.erpnext.com/docs/v13/user/manual/en/introduction", "is_standard": 1, }, { diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index 976c5bf0b7f7..552a968f9bbf 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -2007,30 +2007,27 @@ Please identify/create Account (Ledger) for type - {0},Bitte identifizieren / er Please login as another user to register on Marketplace,"Bitte melden Sie sich als anderer Benutzer an, um sich auf dem Marktplatz zu registrieren", Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.,"Bitte sicher stellen, dass wirklich alle Transaktionen dieses Unternehmens gelöscht werden sollen. Die Stammdaten bleiben bestehen. Diese Aktion kann nicht rückgängig gemacht werden.", Please mention Basic and HRA component in Company,Bitte erwähnen Sie die Basis- und HRA-Komponente in der Firma, -Please mention Round Off Account in Company,Bitte Abschlusskonto in Unternehmen vermerken, -Please mention Round Off Cost Center in Company,Bitte Abschlusskostenstelle in Unternehmen vermerken, -Please mention no of visits required,"Bitte bei ""Besuche erforderlich"" NEIN angeben", -Please mention the Lead Name in Lead {0},Bitte erwähnen Sie den Lead Name in Lead {0}, -Please pull items from Delivery Note,Bitte Artikel vom Lieferschein nehmen, +Please mention Round Off Account in Company,Bitte ein Standardkonto Konto für Rundungsdifferenzen in Unternehmen einstellen, +Please mention Round Off Cost Center in Company,Bitte eine Kostenstelle für Rundungsdifferenzen in Unternehmen einstellen, +Please mention no of visits required,Bitte die Anzahl der benötigten Wartungsbesuche angeben, +Please pull items from Delivery Note,Bitte Artikel aus dem Lieferschein ziehen, Please register the SIREN number in the company information file,Bitte registrieren Sie die SIREN-Nummer in der Unternehmensinformationsdatei, Please remove this Invoice {0} from C-Form {1},Bitte diese Rechnung {0} vom Kontaktformular {1} entfernen, Please save the patient first,Bitte speichern Sie den Patienten zuerst, Please save the report again to rebuild or update,"Speichern Sie den Bericht erneut, um ihn neu zu erstellen oder zu aktualisieren", "Please select Allocated Amount, Invoice Type and Invoice Number in atleast one row","Bitte zugewiesenen Betrag, Rechnungsart und Rechnungsnummer in mindestens einer Zeile auswählen", Please select Apply Discount On,"Bitte ""Rabatt anwenden auf"" auswählen", -Please select BOM against item {0},Bitte wählen Sie Stückliste gegen Artikel {0}, -Please select BOM for Item in Row {0},Bitte Stückliste für Artikel in Zeile {0} auswählen, -Please select BOM in BOM field for Item {0},Bitte aus dem Stücklistenfeld eine Stückliste für Artikel {0} auswählen, -Please select Category first,Bitte zuerst Kategorie auswählen, -Please select Charge Type first,Bitte zuerst Chargentyp auswählen, -Please select Company,Bitte Unternehmen auswählen, +Please select BOM against item {0},Bitte eine Stückliste für Artikel {0} auswählen, +Please select BOM for Item in Row {0},Bitte eine Stückliste für den Artikel in Zeile {0} auswählen, +Please select BOM in BOM field for Item {0},Bitte im Stücklistenfeld eine Stückliste für Artikel {0} auswählen, +Please select Category first,Bitte zuerst eine Kategorie auswählen, +Please select Charge Type first,Bitte zuerst einen Chargentyp auswählen, +Please select Company,Bitte ein Unternehmen auswählen, Please select Company and Designation,Bitte wählen Sie Unternehmen und Position, Please select Company and Posting Date to getting entries,"Bitte wählen Sie Unternehmen und Buchungsdatum, um Einträge zu erhalten", Please select Company first,Bitte zuerst Unternehmen auswählen, Please select Completion Date for Completed Asset Maintenance Log,Bitte wählen Sie Fertigstellungsdatum für das abgeschlossene Wartungsprotokoll für den Vermögenswert, Please select Completion Date for Completed Repair,Bitte wählen Sie das Abschlussdatum für die abgeschlossene Reparatur, -Please select Course,Bitte wählen Sie Kurs, -Please select Drug,Bitte wählen Sie Arzneimittel, Please select Employee,Bitte wählen Sie Mitarbeiter, Please select Existing Company for creating Chart of Accounts,Bitte wählen Sie Bestehende Unternehmen für die Erstellung von Konten, Please select Healthcare Service,Bitte wählen Sie Gesundheitsdienst, @@ -7797,7 +7794,7 @@ Default Employee Advance Account,Standardkonto für Vorschüsse an Arbeitnehmer, Default Cost of Goods Sold Account,Standard-Herstellkosten, Default Income Account,Standard-Ertragskonto, Default Deferred Revenue Account,Standardkonto für passive Rechnungsabgrenzung, -Default Deferred Expense Account,Standard-Rechnungsabgrenzungsposten, +Default Deferred Expense Account,Standardkonto für aktive Rechnungsabgrenzung, Default Payroll Payable Account,Standardkonto für Verbindlichkeiten aus Lohn und Gehalt, Default Expense Claim Payable Account,Standard-Expense Claim Zahlbares Konto, Stock Settings,Lager-Einstellungen, @@ -8865,7 +8862,7 @@ Add Topic to Courses,Hinzufügen eines Themas zu Kursen, This topic is already added to the existing courses,Dieses Thema wurde bereits zu den bestehenden Kursen hinzugefügt, "If Shopify does not have a customer in the order, then while syncing the orders, the system will consider the default customer for the order","Wenn Shopify keinen Kunden in der Bestellung hat, berücksichtigt das System beim Synchronisieren der Bestellungen den Standardkunden für die Bestellung", The accounts are set by the system automatically but do confirm these defaults,"Die Konten werden vom System automatisch festgelegt, bestätigen jedoch diese Standardeinstellungen", -Default Round Off Account,Standard-Rundungskonto, +Default Round Off Account,Standardkonto für Rundungsdifferenzen, Failed Import Log,Importprotokoll fehlgeschlagen, Fixed Error Log,Fehlerprotokoll behoben, Company {0} already exists. Continuing will overwrite the Company and Chart of Accounts,Firma {0} existiert bereits. Durch Fortfahren werden das Unternehmen und der Kontenplan überschrieben,