From b2d8a4419903830220b3aa7228de641e59606e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20Oliver=20S=C3=BCnderhauf?= <46800703+bosue@users.noreply.github.com> Date: Sun, 3 Dec 2023 15:10:00 +0100 Subject: [PATCH 01/55] test: Add, expand and refine test-cases for zero-quantity transactions. --- .../purchase_invoice/test_purchase_invoice.py | 16 ++++++++--- .../sales_invoice/test_sales_invoice.py | 16 ++++++++--- .../purchase_order/test_purchase_order.py | 10 ++++++- .../test_request_for_quotation.py | 18 +++++++++++-- .../test_supplier_quotation.py | 13 +++++++++ erpnext/buying/utils.py | 5 +++- erpnext/controllers/selling_controller.py | 5 ++-- erpnext/manufacturing/doctype/bom/test_bom.py | 22 +++++++++++++++ .../doctype/quotation/test_quotation.py | 14 +++++++++- .../doctype/sales_order/test_sales_order.py | 27 +++++++++++++++++-- .../delivery_note/test_delivery_note.py | 15 +++++++++-- .../material_request/test_material_request.py | 12 +++++++++ .../purchase_receipt/test_purchase_receipt.py | 21 ++++++++++++++- .../stock/doctype/stock_entry/stock_entry.py | 4 ++- .../doctype/stock_entry/test_stock_entry.py | 13 +++++++++ 15 files changed, 192 insertions(+), 19 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index e43ea6ecbe..8ff9f9002c 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -14,7 +14,7 @@ from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_ent from erpnext.buying.doctype.purchase_order.purchase_order import get_mapped_purchase_invoice from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order from erpnext.buying.doctype.supplier.test_supplier import create_supplier -from erpnext.controllers.accounts_controller import get_payment_terms +from erpnext.controllers.accounts_controller import InvalidQtyError, get_payment_terms from erpnext.controllers.buying_controller import QtyMismatchError from erpnext.exceptions import InvalidCurrency from erpnext.projects.doctype.project.test_project import make_project @@ -51,6 +51,16 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin): def tearDown(self): frappe.db.rollback() + def test_purchase_invoice_qty(self): + pi = make_purchase_invoice(qty=0, do_not_save=True) + with self.assertRaises(InvalidQtyError): + pi.save() + + # No error with qty=1 + pi.items[0].qty = 1 + pi.save() + self.assertEqual(pi.items[0].qty, 1) + def test_purchase_invoice_received_qty(self): """ 1. Test if received qty is validated against accepted + rejected @@ -2094,7 +2104,7 @@ def make_purchase_invoice(**args): bundle_id = None if args.get("batch_no") or args.get("serial_no"): batches = {} - qty = args.qty or 5 + qty = args.qty if args.qty is not None else 5 item_code = args.item or args.item_code or "_Test Item" if args.get("batch_no"): batches = frappe._dict({args.batch_no: qty}) @@ -2122,7 +2132,7 @@ def make_purchase_invoice(**args): { "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse or "_Test Warehouse - _TC", - "qty": args.qty or 5, + "qty": args.qty if args.qty is not None else 5, "received_qty": args.received_qty or 0, "rejected_qty": args.rejected_qty or 0, "rate": args.rate or 50, diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index e9b71ddffd..01b5e28ea4 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -23,7 +23,7 @@ from erpnext.assets.doctype.asset.test_asset import create_asset, create_asset_d from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( get_depr_schedule, ) -from erpnext.controllers.accounts_controller import update_invoice_status +from erpnext.controllers.accounts_controller import InvalidQtyError, update_invoice_status from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_data from erpnext.exceptions import InvalidAccountCurrency, InvalidCurrency from erpnext.selling.doctype.customer.test_customer import get_customer_dict @@ -72,6 +72,16 @@ class TestSalesInvoice(FrappeTestCase): def tearDownClass(self): unlink_payment_on_cancel_of_invoice(0) + def test_sales_invoice_qty(self): + si = create_sales_invoice(qty=0, do_not_save=True) + with self.assertRaises(InvalidQtyError): + si.save() + + # No error with qty=1 + si.items[0].qty = 1 + si.save() + self.assertEqual(si.items[0].qty, 1) + def test_timestamp_change(self): w = frappe.copy_doc(test_records[0]) w.docstatus = 0 @@ -3629,7 +3639,7 @@ def create_sales_invoice(**args): bundle_id = None if si.update_stock and (args.get("batch_no") or args.get("serial_no")): batches = {} - qty = args.qty or 1 + qty = args.qty if args.qty is not None else 1 item_code = args.item or args.item_code or "_Test Item" if args.get("batch_no"): batches = frappe._dict({args.batch_no: qty}) @@ -3661,7 +3671,7 @@ def create_sales_invoice(**args): "description": args.description or "_Test Item", "warehouse": args.warehouse or "_Test Warehouse - _TC", "target_warehouse": args.target_warehouse, - "qty": args.qty or 1, + "qty": args.qty if args.qty is not None else 1, "uom": args.uom or "Nos", "stock_uom": args.uom or "Nos", "rate": args.rate if args.get("rate") is not None else 100, diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index f80a00a95f..9b382bbd7e 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -29,6 +29,8 @@ from erpnext.stock.doctype.purchase_receipt.purchase_receipt import ( class TestPurchaseOrder(FrappeTestCase): def test_purchase_order_qty(self): po = create_purchase_order(qty=1, do_not_save=True) + + # NonNegativeError with qty=-1 po.append( "items", { @@ -39,9 +41,15 @@ class TestPurchaseOrder(FrappeTestCase): ) self.assertRaises(frappe.NonNegativeError, po.save) + # InvalidQtyError with qty=0 po.items[1].qty = 0 self.assertRaises(InvalidQtyError, po.save) + # No error with qty=1 + po.items[1].qty = 1 + po.save() + self.assertEqual(po.items[1].qty, 1) + def test_make_purchase_receipt(self): po = create_purchase_order(do_not_submit=True) self.assertRaises(frappe.ValidationError, make_purchase_receipt, po.name) @@ -1108,7 +1116,7 @@ def create_purchase_order(**args): "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse or "_Test Warehouse - _TC", "from_warehouse": args.from_warehouse, - "qty": args.qty or 10, + "qty": args.qty if args.qty is not None else 10, "rate": args.rate or 500, "schedule_date": add_days(nowdate(), 1), "include_exploded_items": args.get("include_exploded_items", 1), diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index 42fa1d923e..05a604f0cc 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -14,6 +14,7 @@ from erpnext.buying.doctype.request_for_quotation.request_for_quotation import ( get_pdf, make_supplier_quotation_from_rfq, ) +from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.crm.doctype.opportunity.opportunity import make_request_for_quotation as make_rfq from erpnext.crm.doctype.opportunity.test_opportunity import make_opportunity from erpnext.stock.doctype.item.test_item import make_item @@ -21,6 +22,16 @@ from erpnext.templates.pages.rfq import check_supplier_has_docname_access class TestRequestforQuotation(FrappeTestCase): + def test_rfq_qty(self): + rfq = make_request_for_quotation(qty=0, do_not_save=True) + with self.assertRaises(InvalidQtyError): + rfq.save() + + # No error with qty=1 + rfq.items[0].qty = 1 + rfq.save() + self.assertEqual(rfq.items[0].qty, 1) + def test_quote_status(self): rfq = make_request_for_quotation() @@ -161,14 +172,17 @@ def make_request_for_quotation(**args) -> "RequestforQuotation": "description": "_Test Item", "uom": args.uom or "_Test UOM", "stock_uom": args.stock_uom or "_Test UOM", - "qty": args.qty or 5, + "qty": args.qty if args.qty is not None else 5, "conversion_factor": args.conversion_factor or 1.0, "warehouse": args.warehouse or "_Test Warehouse - _TC", "schedule_date": nowdate(), }, ) - rfq.submit() + if not args.do_not_save: + rfq.insert() + if not args.do_not_submit: + rfq.submit() return rfq diff --git a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py index 13c851c735..33465700f4 100644 --- a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py @@ -5,8 +5,21 @@ import frappe from frappe.tests.utils import FrappeTestCase +from erpnext.controllers.accounts_controller import InvalidQtyError + class TestPurchaseOrder(FrappeTestCase): + def test_supplier_quotation_qty(self): + sq = frappe.copy_doc(test_records[0]) + sq.items[0].qty = 0 + with self.assertRaises(InvalidQtyError): + sq.save() + + # No error with qty=1 + sq.items[0].qty = 1 + sq.save() + self.assertEqual(sq.items[0].qty, 1) + def test_make_purchase_order(self): from erpnext.buying.doctype.supplier_quotation.supplier_quotation import make_purchase_order diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py index e904af0dce..8b7b6940ca 100644 --- a/erpnext/buying/utils.py +++ b/erpnext/buying/utils.py @@ -42,12 +42,15 @@ def update_last_purchase_rate(doc, is_submit) -> None: def validate_for_items(doc) -> None: + from erpnext.controllers.accounts_controller import InvalidQtyError + items = [] for d in doc.get("items"): if not d.qty: if doc.doctype == "Purchase Receipt" and d.rejected_qty: continue - frappe.throw(_("Please enter quantity for Item {0}").format(d.item_code)) + message = _("Please enter quantity for Item {0}").format(d.item_code) + frappe.throw(message, InvalidQtyError) set_stock_levels(row=d) # update with latest quantities item = validate_item_and_get_basic_data(row=d) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index fdadb30e93..d6e3ee25a9 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -7,7 +7,7 @@ from frappe import _, bold, throw from frappe.utils import cint, flt, get_link_to_form, nowtime from erpnext.accounts.party import render_address -from erpnext.controllers.accounts_controller import get_taxes_and_charges +from erpnext.controllers.accounts_controller import InvalidQtyError, get_taxes_and_charges from erpnext.controllers.sales_and_purchase_return import get_rate_for_return from erpnext.controllers.stock_controller import StockController from erpnext.stock.doctype.item.item import set_item_default @@ -296,7 +296,8 @@ class SellingController(StockController): il = [] for d in self.get("items"): if d.qty is None: - frappe.throw(_("Row {0}: Qty is mandatory").format(d.idx)) + message = _("Row {0}: Qty is mandatory").format(d.idx) + frappe.throw(message, InvalidQtyError) if self.has_product_bundle(d.item_code): for p in self.get("packed_items"): diff --git a/erpnext/manufacturing/doctype/bom/test_bom.py b/erpnext/manufacturing/doctype/bom/test_bom.py index 051b475bcc..3611bb469d 100644 --- a/erpnext/manufacturing/doctype/bom/test_bom.py +++ b/erpnext/manufacturing/doctype/bom/test_bom.py @@ -27,6 +27,28 @@ test_dependencies = ["Item", "Quality Inspection Template"] class TestBOM(FrappeTestCase): + @timeout + def test_bom_qty(self): + from erpnext.stock.doctype.item.test_item import make_item + + # No error. + bom = frappe.new_doc("BOM") + item = make_item(properties={"is_stock_item": 1}) + bom.item = fg_item.item_code + bom.quantity = 1 + bom.append( + "items", + { + "item_code": bom_item.item_code, + "qty": 0, + "uom": bom_item.stock_uom, + "stock_uom": bom_item.stock_uom, + "rate": 100.0, + }, + ) + bom.save() + self.assertEqual(bom.items[0].qty, 0) + @timeout def test_get_items(self): from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py index 590cd3d0cf..ecb7d097b8 100644 --- a/erpnext/selling/doctype/quotation/test_quotation.py +++ b/erpnext/selling/doctype/quotation/test_quotation.py @@ -5,10 +5,22 @@ import frappe from frappe.tests.utils import FrappeTestCase from frappe.utils import add_days, add_months, flt, getdate, nowdate +from erpnext.controllers.accounts_controller import InvalidQtyError + test_dependencies = ["Product Bundle"] class TestQuotation(FrappeTestCase): + def test_quotation_qty(self): + qo = make_quotation(qty=0, do_not_save=True) + with self.assertRaises(InvalidQtyError): + qo.save() + + # No error with qty=1 + qo.items[0].qty = 1 + qo.save() + self.assertEqual(qo.items[0].qty, 1) + def test_make_quotation_without_terms(self): quotation = make_quotation(do_not_save=1) self.assertFalse(quotation.get("payment_schedule")) @@ -629,7 +641,7 @@ def make_quotation(**args): { "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse, - "qty": args.qty or 10, + "qty": args.qty if args.qty is not None else 10, "uom": args.uom or None, "rate": args.rate or 100, }, diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index a518597aa6..a6c86a670d 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -9,7 +9,7 @@ from frappe.core.doctype.user_permission.test_user_permission import create_user from frappe.tests.utils import FrappeTestCase, change_settings from frappe.utils import add_days, flt, getdate, nowdate, today -from erpnext.controllers.accounts_controller import update_child_qty_rate +from erpnext.controllers.accounts_controller import InvalidQtyError, update_child_qty_rate from erpnext.maintenance.doctype.maintenance_schedule.test_maintenance_schedule import ( make_maintenance_schedule, ) @@ -80,6 +80,29 @@ class TestSalesOrder(FrappeTestCase): ) update_child_qty_rate("Sales Order", trans_item, so.name) + def test_sales_order_qty(self): + so = make_sales_order(qty=1, do_not_save=True) + + # NonNegativeError with qty=-1 + so.append( + "items", + { + "item_code": "_Test Item", + "qty": -1, + "rate": 10, + }, + ) + self.assertRaises(frappe.NonNegativeError, so.save) + + # InvalidQtyError with qty=0 + so.items[1].qty = 0 + self.assertRaises(InvalidQtyError, so.save) + + # No error with qty=1 + so.items[1].qty = 1 + so.save() + self.assertEqual(so.items[0].qty, 1) + def test_make_material_request(self): so = make_sales_order(do_not_submit=True) @@ -2015,7 +2038,7 @@ def make_sales_order(**args): { "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse, - "qty": args.qty or 10, + "qty": args.qty if args.qty is not None else 10, "uom": args.uom or None, "price_list_rate": args.price_list_rate or None, "discount_percentage": args.discount_percentage or None, diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py index 94655747e4..376b970222 100644 --- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py @@ -10,6 +10,7 @@ from frappe.utils import add_days, cstr, flt, nowdate, nowtime, today from erpnext.accounts.doctype.account.test_account import get_inventory_account from erpnext.accounts.utils import get_balance_on +from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.selling.doctype.product_bundle.test_product_bundle import make_product_bundle from erpnext.selling.doctype.sales_order.test_sales_order import ( automatically_fetch_payment_terms, @@ -42,6 +43,16 @@ from erpnext.stock.stock_ledger import get_previous_sle class TestDeliveryNote(FrappeTestCase): + def test_delivery_note_qty(self): + dn = create_delivery_note(qty=0, do_not_save=True) + with self.assertRaises(InvalidQtyError): + dn.save() + + # No error with qty=1 + dn.items[0].qty = 1 + dn.save() + self.assertEqual(dn.items[0].qty, 1) + def test_over_billing_against_dn(self): frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) @@ -1287,7 +1298,7 @@ def create_delivery_note(**args): if dn.is_return: type_of_transaction = "Inward" - qty = args.get("qty") or 1 + qty = args.qty if args.get("qty") is not None else 1 qty *= -1 if type_of_transaction == "Outward" else 1 batches = {} if args.get("batch_no"): @@ -1315,7 +1326,7 @@ def create_delivery_note(**args): { "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse or "_Test Warehouse - _TC", - "qty": args.qty or 1, + "qty": args.qty if args.get("qty") is not None else 1, "rate": args.rate if args.get("rate") is not None else 100, "conversion_factor": 1.0, "serial_and_batch_bundle": bundle_id, diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py index e5aff38c52..3e440497f0 100644 --- a/erpnext/stock/doctype/material_request/test_material_request.py +++ b/erpnext/stock/doctype/material_request/test_material_request.py @@ -9,6 +9,7 @@ import frappe from frappe.tests.utils import FrappeTestCase from frappe.utils import flt, today +from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.stock.doctype.item.test_item import create_item from erpnext.stock.doctype.material_request.material_request import ( make_in_transit_stock_entry, @@ -20,6 +21,17 @@ from erpnext.stock.doctype.material_request.material_request import ( class TestMaterialRequest(FrappeTestCase): + def test_material_request_qty(self): + mr = frappe.copy_doc(test_records[0]) + mr.items[0].qty = 0 + with self.assertRaises(InvalidQtyError): + mr.insert() + + # No error with qty=1 + mr.items[0].qty = 1 + mr.save() + self.assertEqual(mr.items[0].qty, 1) + def test_make_purchase_order(self): mr = frappe.copy_doc(test_records[0]).insert() diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index 146cbff1aa..57ba5bb0a5 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -8,6 +8,7 @@ from pypika import functions as fn import erpnext from erpnext.accounts.doctype.account.test_account import get_inventory_account +from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.controllers.buying_controller import QtyMismatchError from erpnext.stock.doctype.item.test_item import create_item, make_item from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice @@ -29,6 +30,23 @@ class TestPurchaseReceipt(FrappeTestCase): def setUp(self): frappe.db.set_single_value("Buying Settings", "allow_multiple_items", 1) + def test_purchase_receipt_qty(self): + pr = make_purchase_receipt(qty=0, rejected_qty=0, do_not_save=True) + with self.assertRaises(InvalidQtyError): + pr.save() + + # No error with qty=1 + pr.items[0].qty = 1 + pr.save() + self.assertEqual(pr.items[0].qty, 1) + + # No error with rejected_qty=1 + pr.items[0].rejected_warehouse = "_Test Rejected Warehouse - _TC" + pr.items[0].rejected_qty = 1 + pr.items[0].qty = 0 + pr.save() + self.assertEqual(pr.items[0].rejected_qty, 1) + def test_purchase_receipt_received_qty(self): """ 1. Test if received qty is validated against accepted + rejected @@ -2348,7 +2366,8 @@ def make_purchase_receipt(**args): pr.is_return = args.is_return pr.return_against = args.return_against pr.apply_putaway_rule = args.apply_putaway_rule - qty = args.qty or 5 + + qty = args.qty if args.qty is not None else 5 rejected_qty = args.rejected_qty or 0 received_qty = args.received_qty or flt(rejected_qty) + flt(qty) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 3baafd77ba..37a80be0e3 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -24,6 +24,7 @@ from frappe.utils import ( import erpnext from erpnext.accounts.general_ledger import process_gl_map +from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.controllers.taxes_and_totals import init_landed_taxes_and_totals from erpnext.manufacturing.doctype.bom.bom import add_additional_cost, validate_bom_no from erpnext.setup.doctype.brand.brand import get_brand_defaults @@ -390,7 +391,8 @@ class StockEntry(StockController): def set_transfer_qty(self): for item in self.get("items"): if not flt(item.qty): - frappe.throw(_("Row {0}: Qty is mandatory").format(item.idx), title=_("Zero quantity")) + message = _("Row {0}: Qty is mandatory").format(item.idx) + frappe.throw(message, InvalidQtyError, title=_("Zero quantity")) if not flt(item.conversion_factor): frappe.throw(_("Row {0}: UOM Conversion Factor is mandatory").format(item.idx)) item.transfer_qty = flt( diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index eb1c7a85eb..5ebf7c92da 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -8,6 +8,7 @@ from frappe.tests.utils import FrappeTestCase, change_settings from frappe.utils import add_days, add_to_date, flt, nowdate, nowtime, today from erpnext.accounts.doctype.account.test_account import get_inventory_account +from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.stock.doctype.item.test_item import ( create_item, make_item, @@ -54,6 +55,18 @@ class TestStockEntry(FrappeTestCase): frappe.db.rollback() frappe.set_user("Administrator") + def test_stock_entry_qty(self): + item_code = "_Test Item 2" + warehouse = "_Test Warehouse - _TC" + se = make_stock_entry(item_code=item_code, target=warehouse, qty=0, do_not_save=True) + with self.assertRaises(InvalidQtyError): + se.save() + + # No error with qty=1 + se.items[0].qty = 1 + se.save() + self.assertEqual(se.items[0].qty, 1) + def test_fifo(self): frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) item_code = "_Test Item 2" From 4918aeb4c64b22c8e6a09fac1661cf7e96114ce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20Oliver=20S=C3=BCnderhauf?= <46800703+bosue@users.noreply.github.com> Date: Tue, 14 Nov 2023 19:43:26 +0100 Subject: [PATCH 02/55] refactor: Consolidate duplicate zero-quantity transaction Items checks. --- .../request_for_quotation/request_for_quotation.py | 1 + erpnext/buying/utils.py | 8 -------- erpnext/controllers/accounts_controller.py | 12 +++++++----- erpnext/controllers/selling_controller.py | 6 +----- erpnext/stock/doctype/stock_entry/stock_entry.py | 5 +---- 5 files changed, 10 insertions(+), 22 deletions(-) diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index eea8cd5cc8..e4479ef608 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -65,6 +65,7 @@ class RequestforQuotation(BuyingController): def validate(self): self.validate_duplicate_supplier() self.validate_supplier_list() + super(RequestforQuotation, self).validate_qty_is_not_zero() validate_for_items(self) super(RequestforQuotation, self).set_qty_as_per_stock_uom() self.update_email_id() diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py index 8b7b6940ca..61e5e6a1c7 100644 --- a/erpnext/buying/utils.py +++ b/erpnext/buying/utils.py @@ -42,16 +42,8 @@ def update_last_purchase_rate(doc, is_submit) -> None: def validate_for_items(doc) -> None: - from erpnext.controllers.accounts_controller import InvalidQtyError - items = [] for d in doc.get("items"): - if not d.qty: - if doc.doctype == "Purchase Receipt" and d.rejected_qty: - continue - message = _("Please enter quantity for Item {0}").format(d.item_code) - frappe.throw(message, InvalidQtyError) - set_stock_levels(row=d) # update with latest quantities item = validate_item_and_get_basic_data(row=d) validate_stock_item_warehouse(row=d, item=item) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 1b8f66c897..09bcea97ea 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -915,13 +915,15 @@ class AccountsController(TransactionBase): return flt(args.get(field, 0) / self.get("conversion_rate", 1)) def validate_qty_is_not_zero(self): - if self.doctype == "Purchase Receipt": - return - for item in self.items: + if self.doctype == "Purchase Receipt" and item.rejected_qty: + continue + if not flt(item.qty): frappe.throw( - msg=_("Row #{0}: Item quantity cannot be zero").format(item.idx), + msg=_("Row #{0}: Quantity for Item {1} cannot be zero.").format( + item.idx, frappe.bold(item.item_code) + ), title=_("Invalid Quantity"), exc=InvalidQtyError, ) @@ -3019,7 +3021,7 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil def validate_quantity(child_item, new_data): if not flt(new_data.get("qty")): frappe.throw( - _("Row # {0}: Quantity for Item {1} cannot be zero").format( + _("Row #{0}: Quantity for Item {1} cannot be zero.").format( new_data.get("idx"), frappe.bold(new_data.get("item_code")) ), title=_("Invalid Qty"), diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index d6e3ee25a9..3bc054f099 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -7,7 +7,7 @@ from frappe import _, bold, throw from frappe.utils import cint, flt, get_link_to_form, nowtime from erpnext.accounts.party import render_address -from erpnext.controllers.accounts_controller import InvalidQtyError, get_taxes_and_charges +from erpnext.controllers.accounts_controller import get_taxes_and_charges from erpnext.controllers.sales_and_purchase_return import get_rate_for_return from erpnext.controllers.stock_controller import StockController from erpnext.stock.doctype.item.item import set_item_default @@ -295,10 +295,6 @@ class SellingController(StockController): def get_item_list(self): il = [] for d in self.get("items"): - if d.qty is None: - message = _("Row {0}: Qty is mandatory").format(d.idx) - frappe.throw(message, InvalidQtyError) - if self.has_product_bundle(d.item_code): for p in self.get("packed_items"): if p.parent_detail_docname == d.name and p.parent_item == d.item_code: diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 37a80be0e3..e69489890f 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -24,7 +24,6 @@ from frappe.utils import ( import erpnext from erpnext.accounts.general_ledger import process_gl_map -from erpnext.controllers.accounts_controller import InvalidQtyError from erpnext.controllers.taxes_and_totals import init_landed_taxes_and_totals from erpnext.manufacturing.doctype.bom.bom import add_additional_cost, validate_bom_no from erpnext.setup.doctype.brand.brand import get_brand_defaults @@ -389,10 +388,8 @@ class StockEntry(StockController): frappe.delete_doc("Stock Entry", d.name) def set_transfer_qty(self): + self.validate_qty_is_not_zero() for item in self.get("items"): - if not flt(item.qty): - message = _("Row {0}: Qty is mandatory").format(item.idx) - frappe.throw(message, InvalidQtyError, title=_("Zero quantity")) if not flt(item.conversion_factor): frappe.throw(_("Row {0}: UOM Conversion Factor is mandatory").format(item.idx)) item.transfer_qty = flt( From 3688d9412e03a993f1d4067ac4f95d787379460d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20Oliver=20S=C3=BCnderhauf?= <46800703+bosue@users.noreply.github.com> Date: Sun, 3 Dec 2023 22:45:38 +0100 Subject: [PATCH 03/55] chore: Adapt translations to reworded message. --- erpnext/translations/af.csv | 3 +-- erpnext/translations/am.csv | 3 +-- erpnext/translations/ar.csv | 3 +-- erpnext/translations/bg.csv | 3 +-- erpnext/translations/bn.csv | 3 +-- erpnext/translations/bs.csv | 3 +-- erpnext/translations/ca.csv | 3 +-- erpnext/translations/cs.csv | 3 +-- erpnext/translations/cz.csv | 1 - erpnext/translations/da.csv | 3 +-- erpnext/translations/de.csv | 3 +-- erpnext/translations/el.csv | 3 +-- erpnext/translations/es-PE.csv | 1 - erpnext/translations/es.csv | 3 +-- erpnext/translations/es_pe.csv | 1 - erpnext/translations/et.csv | 3 +-- erpnext/translations/fa.csv | 3 +-- erpnext/translations/fi.csv | 3 +-- erpnext/translations/fr.csv | 3 +-- erpnext/translations/gu.csv | 3 +-- erpnext/translations/he.csv | 3 +-- erpnext/translations/hi.csv | 3 +-- erpnext/translations/hr.csv | 3 +-- erpnext/translations/hu.csv | 3 +-- erpnext/translations/id.csv | 3 +-- erpnext/translations/is.csv | 3 +-- erpnext/translations/it.csv | 3 +-- erpnext/translations/ja.csv | 3 +-- erpnext/translations/km.csv | 3 +-- erpnext/translations/kn.csv | 3 +-- erpnext/translations/ko.csv | 3 +-- erpnext/translations/ku.csv | 3 +-- erpnext/translations/lo.csv | 3 +-- erpnext/translations/lt.csv | 3 +-- erpnext/translations/lv.csv | 3 +-- erpnext/translations/mk.csv | 3 +-- erpnext/translations/ml.csv | 3 +-- erpnext/translations/mr.csv | 3 +-- erpnext/translations/ms.csv | 3 +-- erpnext/translations/my.csv | 3 +-- erpnext/translations/nl.csv | 3 +-- erpnext/translations/no.csv | 3 +-- erpnext/translations/pl.csv | 3 +-- erpnext/translations/ps.csv | 3 +-- erpnext/translations/pt-BR.csv | 2 -- erpnext/translations/pt.csv | 3 +-- erpnext/translations/ro.csv | 3 +-- erpnext/translations/ru.csv | 3 +-- erpnext/translations/rw.csv | 3 +-- erpnext/translations/si.csv | 3 +-- erpnext/translations/sk.csv | 3 +-- erpnext/translations/sl.csv | 3 +-- erpnext/translations/sq.csv | 3 +-- erpnext/translations/sr.csv | 3 +-- erpnext/translations/sv.csv | 3 +-- erpnext/translations/sw.csv | 3 +-- erpnext/translations/ta.csv | 3 +-- erpnext/translations/te.csv | 3 +-- erpnext/translations/th.csv | 3 +-- erpnext/translations/tr.csv | 3 +-- erpnext/translations/uk.csv | 3 +-- erpnext/translations/ur.csv | 3 +-- erpnext/translations/uz.csv | 3 +-- erpnext/translations/vi.csv | 3 +-- erpnext/translations/zh-TW.csv | 1 - erpnext/translations/zh.csv | 3 +-- erpnext/translations/zh_tw.csv | 3 +-- 67 files changed, 62 insertions(+), 130 deletions(-) diff --git a/erpnext/translations/af.csv b/erpnext/translations/af.csv index ee77d98948..9c995e1185 100644 --- a/erpnext/translations/af.csv +++ b/erpnext/translations/af.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Ry {0}: Stel asb. Belastingvrystelling in verkoopsbelasting en heffings in, Row {0}: Please set the Mode of Payment in Payment Schedule,Ry {0}: Stel die modus van betaling in die betalingskedule in, Row {0}: Please set the correct code on Mode of Payment {1},Ry {0}: Stel die korrekte kode in op die manier van betaling {1}, -Row {0}: Qty is mandatory,Ry {0}: Aantal is verpligtend, Row {0}: Quality Inspection rejected for item {1},Ry {0}: Gehalte-inspeksie verwerp vir item {1}, Row {0}: UOM Conversion Factor is mandatory,Ry {0}: UOM Gesprekfaktor is verpligtend, Row {0}: select the workstation against the operation {1},Ry {0}: kies die werkstasie teen die operasie {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Uitgawe tipe., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Dit lyk asof daar 'n probleem met die bediener se streepkonfigurasie is. In geval van versuim, sal die bedrag terugbetaal word na u rekening.", Item Reported,Item Gerapporteer, Item listing removed,Itemlys is verwyder, -Item quantity can not be zero,Item hoeveelheid kan nie nul wees nie, Item taxes updated,Itembelasting opgedateer, Item {0}: {1} qty produced. ,Item {0}: {1} hoeveelheid geproduseer., Joining Date can not be greater than Leaving Date,Aansluitingsdatum kan nie groter wees as die vertrekdatum nie, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Ry # {0}: Kostesentrum {1} behoort nie aan die maatskappy {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Ry # {0}: Bewerking {1} is nie voltooi vir {2} aantal voltooide goedere in werkorde {3}. Opdateer asseblief operasionele status via Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Ry # {0}: Betaaldokument is nodig om die transaksie te voltooi, +Row #{0}: Quantity for Item {1} cannot be zero.,Ry # {0}: Hoeveelheid vir item {1} kan nie nul wees nie., Row #{0}: Serial No {1} does not belong to Batch {2},Ry # {0}: reeksnommer {1} behoort nie aan groep {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Ry # {0}: Die einddatum van die diens kan nie voor die inhandigingsdatum van die faktuur wees nie, Row #{0}: Service Start Date cannot be greater than Service End Date,Ry # {0}: Diens se begindatum kan nie groter wees as die einddatum van die diens nie, diff --git a/erpnext/translations/am.csv b/erpnext/translations/am.csv index a5f09a7488..4abdf7b0c2 100644 --- a/erpnext/translations/am.csv +++ b/erpnext/translations/am.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,ረድፍ {0}: እባክዎ በሽያጭ ግብሮች እና ክፍያዎች ውስጥ ባለው የግብር ነጻነት ምክንያት ያዘጋጁ።, Row {0}: Please set the Mode of Payment in Payment Schedule,ረድፍ {0}: - እባክዎ የክፍያ አፈፃፀም ሁኔታን በክፍያ መርሃግብር ያዘጋጁ።, Row {0}: Please set the correct code on Mode of Payment {1},ረድፍ {0}: እባክዎን ትክክለኛውን ኮድ በክፍያ ሁኔታ ላይ ያቀናብሩ {1}, -Row {0}: Qty is mandatory,ረድፍ {0}: ብዛት የግዴታ ነው, Row {0}: Quality Inspection rejected for item {1},ረድፍ {0}: የጥራት ምርመራ ለንጥል ውድቅ ተደርጓል {1}, Row {0}: UOM Conversion Factor is mandatory,ረድፍ {0}: UOM የልወጣ ምክንያት የግዴታ ነው, Row {0}: select the workstation against the operation {1},ረድፍ {0}: ከግዜው ላይ {1}, @@ -3461,7 +3460,6 @@ Issue Type.,የጉዳይ ዓይነት።, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","በአገልጋዩ የሽቦ ውቅር ላይ ችግር ያለ ይመስላል. ካልተሳካ, ገንዘቡ ወደ ሂሳብዎ ተመላሽ ይደረጋል.", Item Reported,ንጥል ሪፖርት ተደርጓል።, Item listing removed,የንጥል ዝርዝር ተወግ removedል, -Item quantity can not be zero,የንጥል ብዛት ዜሮ መሆን አይችልም።, Item taxes updated,የንጥል ግብሮች ዘምነዋል, Item {0}: {1} qty produced. ,ንጥል {0}: {1} ኪቲ ተመርቷል።, Joining Date can not be greater than Leaving Date,የመቀላቀል ቀን ከቀናት ቀን በላይ መሆን አይችልም, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},ረድፍ # {0}: የዋጋ ማእከል {1} የኩባንያው አካል አይደለም {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,ረድፍ # {0}: ክወና {1} በስራ ትእዛዝ ውስጥ ለተጠናቀቁ ዕቃዎች {2} ኪራይ አልተጠናቀቀም {3}። እባክዎን የአሠራር ሁኔታን በ Job Card በኩል ያዘምኑ {4}።, Row #{0}: Payment document is required to complete the transaction,ረድፍ # {0}: - ግብይቱን ለማጠናቀቅ የክፍያ ሰነድ ያስፈልጋል።, +Row #{0}: Quantity for Item {1} cannot be zero.,ረድፍ # {0}: የንጥል {1} ብዛት ዜሮ መሆን አይችልም።, Row #{0}: Serial No {1} does not belong to Batch {2},ረድፍ # {0}: መለያ ቁጥር {1} የጡብ አካል አይደለም {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,ረድፍ # {0} የአገልግሎት የአገልግሎት ቀን የክፍያ መጠየቂያ መጠየቂያ ቀን ከማስታወቂያ በፊት መሆን አይችልም, Row #{0}: Service Start Date cannot be greater than Service End Date,ረድፍ # {0} የአገልግሎት የአገልግሎት ቀን ከአገልግሎት ማብቂያ ቀን በላይ መሆን አይችልም, diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv index 195b9c7963..eac5186eda 100644 --- a/erpnext/translations/ar.csv +++ b/erpnext/translations/ar.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,الصف {0}: يرجى تعيين سبب الإعفاء الضريبي في ضرائب ورسوم المبيعات, Row {0}: Please set the Mode of Payment in Payment Schedule,الصف {0}: يرجى ضبط طريقة الدفع في جدول الدفع, Row {0}: Please set the correct code on Mode of Payment {1},الصف {0}: يرجى ضبط الكود الصحيح على طريقة الدفع {1}, -Row {0}: Qty is mandatory,الصف {0}: الكمية إلزامي, Row {0}: Quality Inspection rejected for item {1},الصف {0}: تم رفض فحص الجودة للعنصر {1}, Row {0}: UOM Conversion Factor is mandatory,الصف {0}: عامل تحويل UOM إلزامي\n
\nRow {0}: UOM Conversion Factor is mandatory, Row {0}: select the workstation against the operation {1},الصف {0}: حدد محطة العمل مقابل العملية {1}, @@ -3461,7 +3460,6 @@ Issue Type.,نوع القضية., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",يبدو أن هناك مشكلة في تكوين شريطية للخادم. في حالة الفشل ، سيتم رد المبلغ إلى حسابك., Item Reported,البند المبلغ عنها, Item listing removed,إزالة عنصر القائمة, -Item quantity can not be zero,كمية البند لا يمكن أن يكون صفرا, Item taxes updated,الضرائب البند المحدثة, Item {0}: {1} qty produced. ,العنصر {0}: {1} الكمية المنتجة., Joining Date can not be greater than Leaving Date,تاريخ الانضمام لا يمكن أن يكون أكبر من تاريخ المغادرة, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},الصف # {0}: مركز التكلفة {1} لا ينتمي لشركة {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,الصف # {0}: العملية {1} لم تكتمل لـ {2} الكمية من السلع تامة الصنع في أمر العمل {3}. يرجى تحديث حالة التشغيل عبر بطاقة العمل {4}., Row #{0}: Payment document is required to complete the transaction,الصف # {0}: مطلوب مستند الدفع لإكمال الاجراء النهائي\n
\nRow #{0}: Payment document is required to complete the transaction, +Row #{0}: Quantity for Item {1} cannot be zero.,الصف # {0}: كمية البند {1} لا يمكن أن يكون صفرا, Row #{0}: Serial No {1} does not belong to Batch {2},الصف # {0}: الرقم التسلسلي {1} لا ينتمي إلى الدُفعة {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,الصف # {0}: لا يمكن أن يكون تاريخ انتهاء الخدمة قبل تاريخ ترحيل الفاتورة, Row #{0}: Service Start Date cannot be greater than Service End Date,الصف # {0}: لا يمكن أن يكون تاريخ بدء الخدمة أكبر من تاريخ انتهاء الخدمة, diff --git a/erpnext/translations/bg.csv b/erpnext/translations/bg.csv index c2bacf4f93..e29df96d34 100644 --- a/erpnext/translations/bg.csv +++ b/erpnext/translations/bg.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"Ред {0}: Моля, задайте Причината за освобождаване от данъци в данъците и таксите върху продажбите", Row {0}: Please set the Mode of Payment in Payment Schedule,"Ред {0}: Моля, задайте Начин на плащане в Схема за плащане", Row {0}: Please set the correct code on Mode of Payment {1},"Ред {0}: Моля, задайте правилния код на Начин на плащане {1}", -Row {0}: Qty is mandatory,Row {0}: Кол е задължително, Row {0}: Quality Inspection rejected for item {1},Ред {0}: Проверка на качеството е отхвърлена за елемент {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: мерна единица реализациите Factor е задължително, Row {0}: select the workstation against the operation {1},Ред {0}: изберете работната станция срещу операцията {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Тип издание, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Изглежда, че има проблем с конфигурацията на лентата на сървъра. В случай на неуспех, сумата ще бъде възстановена в профила Ви.", Item Reported,Елементът е отчетен, Item listing removed,Списъкът на артикулите е премахнат, -Item quantity can not be zero,Количеството на артикула не може да бъде нула, Item taxes updated,Актуализираните данъци върху артикулите, Item {0}: {1} qty produced. ,Елемент {0}: {1} брой произведени., Joining Date can not be greater than Leaving Date,Дата на присъединяване не може да бъде по-голяма от Дата на напускане, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Ред № {0}: Център за разходи {1} не принадлежи на компания {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"Ред № {0}: Операция {1} не е завършена за {2} количество готови продукти в работна поръчка {3}. Моля, актуализирайте състоянието на работа чрез Job Card {4}.", Row #{0}: Payment document is required to complete the transaction,Ред № {0}: За извършване на транзакцията е необходим платежен документ, +Row #{0}: Quantity for Item {1} cannot be zero.,Ред № {0}: Количеството на артикула {1} не може да бъде нула., Row #{0}: Serial No {1} does not belong to Batch {2},Ред № {0}: Пореден номер {1} не принадлежи на партида {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Ред № {0}: Крайната дата на услугата не може да бъде преди датата на публикуване на фактура, Row #{0}: Service Start Date cannot be greater than Service End Date,Ред № {0}: Началната дата на услугата не може да бъде по-голяма от крайната дата на услугата, diff --git a/erpnext/translations/bn.csv b/erpnext/translations/bn.csv index d7366e14ab..79e3704ed0 100644 --- a/erpnext/translations/bn.csv +++ b/erpnext/translations/bn.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,সারি {0}: বিক্রয় কর এবং চার্জে কর ছাড়ের কারণ নির্ধারণ করুন, Row {0}: Please set the Mode of Payment in Payment Schedule,সারি {0}: অনুগ্রহ করে অর্থ প্রদানের সময়সূচীতে অর্থের মোড সেট করুন, Row {0}: Please set the correct code on Mode of Payment {1},সারি {0}: অনুগ্রহ করে প্রদানের পদ্ধতিতে সঠিক কোডটি সেট করুন {1}, -Row {0}: Qty is mandatory,সারি {0}: Qty বাধ্যতামূলক, Row {0}: Quality Inspection rejected for item {1},সারি {0}: আইটেমের জন্য গুণ পরিদর্শন প্রত্যাখ্যান {1}, Row {0}: UOM Conversion Factor is mandatory,সারি {0}: UOM রূপান্তর ফ্যাক্টর বাধ্যতামূলক, Row {0}: select the workstation against the operation {1},সারি {0}: অপারেশন {1} বিরুদ্ধে ওয়ার্কস্টেশন নির্বাচন করুন, @@ -3461,7 +3460,6 @@ Issue Type.,ইস্যু প্রকার।, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","মনে হচ্ছে যে সার্ভারের স্ট্রাপ কনফিগারেশনের সাথে একটি সমস্যা আছে ব্যর্থতার ক্ষেত্রে, এই পরিমাণটি আপনার অ্যাকাউন্টে ফেরত পাঠানো হবে।", Item Reported,আইটেম প্রতিবেদন করা, Item listing removed,আইটেমের তালিকা সরানো হয়েছে, -Item quantity can not be zero,আইটেম পরিমাণ শূন্য হতে পারে না, Item taxes updated,আইটেম ট্যাক্স আপডেট হয়েছে, Item {0}: {1} qty produced. ,আইটেম {0}: produced 1} কিউটি উত্পাদিত।, Joining Date can not be greater than Leaving Date,যোগদানের তারিখ ত্যাগের তারিখের চেয়ে বড় হতে পারে না, @@ -3632,6 +3630,7 @@ Row #{0}: Cannot delete item {1} which is assigned to customer's purchase order. Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor,সারি # {0}: সাবকন্ট্রাক্টরে কাঁচামাল সরবরাহ করার সময় সরবরাহকারী গুদাম নির্বাচন করতে পারবেন না, Row #{0}: Cost Center {1} does not belong to company {2},সারি # {0}: মূল্য কেন্দ্র {1 company সংস্থার নয়} 2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,সারি # {0}: কার্য অর্ডার {3 in সমাপ্ত পণ্যগুলির {2} কিউটির জন্য অপারেশন {1} সম্পন্ন হয় না} জব কার্ড {4 via এর মাধ্যমে ক্রিয়াকলাপের স্থিতি আপডেট করুন}, +Row #{0}: Quantity for Item {1} cannot be zero.,সারি # {0}: আইটেম {1} এর পরিমাণ শূন্য হতে পারে না, Row #{0}: Payment document is required to complete the transaction,সারি # {0}: লেনদেনটি সম্পূর্ণ করতে পেমেন্ট ডকুমেন্টের প্রয়োজন, Row #{0}: Serial No {1} does not belong to Batch {2},সারি # {0}: ক্রমিক নং {1 B ব্যাচ belong 2 belong এর সাথে সম্পর্কিত নয়, Row #{0}: Service End Date cannot be before Invoice Posting Date,সারি # {0}: পরিষেবা শেষ হওয়ার তারিখ চালানের পোস্টের তারিখের আগে হতে পারে না, diff --git a/erpnext/translations/bs.csv b/erpnext/translations/bs.csv index df4083eed6..a3027db93d 100644 --- a/erpnext/translations/bs.csv +++ b/erpnext/translations/bs.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Red {0}: Podesite razlog oslobađanja od poreza u porezima i naknadama na promet, Row {0}: Please set the Mode of Payment in Payment Schedule,Red {0}: Molimo postavite Način plaćanja u Rasporedu plaćanja, Row {0}: Please set the correct code on Mode of Payment {1},Red {0}: Molimo postavite ispravan kod na Način plaćanja {1}, -Row {0}: Qty is mandatory,Red {0}: Količina je obvezno, Row {0}: Quality Inspection rejected for item {1},Red {0}: Odbačena inspekcija kvaliteta za stavku {1}, Row {0}: UOM Conversion Factor is mandatory,Red {0}: UOM Faktor konverzije je obavezno, Row {0}: select the workstation against the operation {1},Red {0}: izaberite radnu stanicu protiv operacije {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Vrsta izdanja, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Čini se da postoji problem sa konfiguracijom trake servera. U slučaju neuspeha, iznos će biti vraćen na vaš račun.", Item Reported,Stavka prijavljena, Item listing removed,Popis predmeta je uklonjen, -Item quantity can not be zero,Količina predmeta ne može biti jednaka nuli, Item taxes updated,Ažurirani su porezi na artikle, Item {0}: {1} qty produced. ,Stavka {0}: {1} proizvedeno., Joining Date can not be greater than Leaving Date,Datum pridruživanja ne može biti veći od Datum napuštanja, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Redak # {0}: Troškovi {1} ne pripada kompaniji {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Red # {0}: Operacija {1} nije dovršena za {2} broj gotovih proizvoda u radnom nalogu {3}. Ažurirajte status rada putem Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Redak broj {0}: Za završetak transakcije potreban je dokument o plaćanju, +Row #{0}: Quantity for Item {1} cannot be zero.,Redak broj {0}: Količina predmeta {1} ne može biti jednaka nuli., Row #{0}: Serial No {1} does not belong to Batch {2},Red # {0}: Serijski br. {1} ne pripada grupi {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Redak broj {0}: Datum završetka usluge ne može biti prije datuma knjiženja fakture, Row #{0}: Service Start Date cannot be greater than Service End Date,Redak broj {0}: Datum početka usluge ne može biti veći od datuma završetka usluge, diff --git a/erpnext/translations/ca.csv b/erpnext/translations/ca.csv index b3cf2c5fe1..1c07e67ff5 100644 --- a/erpnext/translations/ca.csv +++ b/erpnext/translations/ca.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Fila {0}: especifiqueu la raó d’exempció d’impostos en els impostos i els càrrecs de venda, Row {0}: Please set the Mode of Payment in Payment Schedule,Fila {0}: estableix el mode de pagament a la planificació de pagaments, Row {0}: Please set the correct code on Mode of Payment {1},Fila {0}: configureu el codi correcte al mode de pagament {1}, -Row {0}: Qty is mandatory,Fila {0}: Quantitat és obligatori, Row {0}: Quality Inspection rejected for item {1},Fila {0}: s'ha rebutjat la inspecció de qualitat per a l'element {1}, Row {0}: UOM Conversion Factor is mandatory,Fila {0}: UOM factor de conversió és obligatori, Row {0}: select the workstation against the operation {1},Fila {0}: seleccioneu l'estació de treball contra l'operació {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Tipus de problema., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Sembla que hi ha un problema amb la configuració de la xarxa del servidor. En cas de fracàs, l'import es reemborsarà al vostre compte.", Item Reported,Article reportat, Item listing removed,S'ha eliminat la llista d'elements, -Item quantity can not be zero,La quantitat d’element no pot ser zero, Item taxes updated,Impostos d’articles actualitzats, Item {0}: {1} qty produced. ,Element {0}: {1} quantitat produïda., Joining Date can not be greater than Leaving Date,La data de combinació no pot ser superior a la data de sortida, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Fila # {0}: el centre de cost {1} no pertany a l'empresa {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Fila # {0}: L'operació {1} no es completa per a {2} la quantitat de productes acabats en l'Ordre de Treball {3}. Actualitzeu l'estat de l'operació mitjançant la targeta de treball {4}., Row #{0}: Payment document is required to complete the transaction,Fila # {0}: el document de pagament és necessari per completar la transacció, +Row #{0}: Quantity for Item {1} cannot be zero.,Fila # {0}: La quantitat d'element {1} no pot ser zero., Row #{0}: Serial No {1} does not belong to Batch {2},Fila # {0}: el número de sèrie {1} no pertany a la llista de lots {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Fila # {0}: la data de finalització del servei no pot ser anterior a la data de publicació de la factura, Row #{0}: Service Start Date cannot be greater than Service End Date,Fila # {0}: la data d'inici del servei no pot ser superior a la data de finalització del servei, diff --git a/erpnext/translations/cs.csv b/erpnext/translations/cs.csv index b6deaa46d8..2e28cec8ce 100644 --- a/erpnext/translations/cs.csv +++ b/erpnext/translations/cs.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Řádek {0}: Nastavte prosím na důvod osvobození od daně v daních z prodeje a poplatcích, Row {0}: Please set the Mode of Payment in Payment Schedule,Řádek {0}: Nastavte prosím platební režim v plánu plateb, Row {0}: Please set the correct code on Mode of Payment {1},Řádek {0}: Nastavte prosím správný kód v platebním režimu {1}, -Row {0}: Qty is mandatory,Row {0}: Množství je povinný, Row {0}: Quality Inspection rejected for item {1},Řádek {0}: Inspekce kvality zamítnuta pro položku {1}, Row {0}: UOM Conversion Factor is mandatory,Řádek {0}: UOM Konverzní faktor je povinné, Row {0}: select the workstation against the operation {1},Řádek {0}: vyberte pracovní stanici proti operaci {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Typ problému., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Zdá se, že je problém s konfigurací proužku serveru. V případě selhání bude částka vrácena na váš účet.", Item Reported,Hlášená položka, Item listing removed,Seznam položek byl odstraněn, -Item quantity can not be zero,Množství položky nemůže být nula, Item taxes updated,Daň z položek byla aktualizována, Item {0}: {1} qty produced. ,Položka {0}: {1} vyrobeno množství., Joining Date can not be greater than Leaving Date,Datum připojení nesmí být větší než datum opuštění, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Řádek # {0}: Nákladové středisko {1} nepatří společnosti {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Řádek # {0}: Operace {1} není dokončena pro {2} množství hotového zboží v objednávce {3}. Aktualizujte prosím provozní stav pomocí Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Řádek # {0}: K dokončení transakce je vyžadován platební doklad, +Row #{0}: Quantity for Item {1} cannot be zero.,Řádek # {0}: Množství položky {1} nemůže být nula., Row #{0}: Serial No {1} does not belong to Batch {2},Řádek # {0}: Sériové číslo {1} nepatří do dávky {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Řádek # {0}: Datum ukončení služby nesmí být před datem účtování faktury, Row #{0}: Service Start Date cannot be greater than Service End Date,Řádek # {0}: Datum zahájení služby nesmí být větší než datum ukončení služby, diff --git a/erpnext/translations/cz.csv b/erpnext/translations/cz.csv index 96de062059..a356a0721a 100644 --- a/erpnext/translations/cz.csv +++ b/erpnext/translations/cz.csv @@ -1101,7 +1101,6 @@ Contract,Smlouva, Disabled,Vypnuto, UOM coversion factor required for UOM: {0} in Item: {1},UOM coversion faktor potřebný k nerozpuštěných: {0} v bodě: {1} Indirect Expenses,Nepřímé náklady, -Row {0}: Qty is mandatory,Row {0}: Množství je povinny, Agriculture,Zemědělstvy, Your Products or Services,Vaše Produkty nebo Služby, Mode of Payment,Způsob platby, diff --git a/erpnext/translations/da.csv b/erpnext/translations/da.csv index 4bcc307583..2550f351d4 100644 --- a/erpnext/translations/da.csv +++ b/erpnext/translations/da.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Række {0}: Angiv venligst skattefritagelsesårsag i moms og afgifter, Row {0}: Please set the Mode of Payment in Payment Schedule,Række {0}: Angiv betalingsmåde i betalingsplan, Row {0}: Please set the correct code on Mode of Payment {1},Række {0}: Angiv den korrekte kode på betalingsmetode {1}, -Row {0}: Qty is mandatory,Række {0}: Antal er obligatorisk, Row {0}: Quality Inspection rejected for item {1},Række {0}: Kvalitetskontrol afvist for vare {1}, Row {0}: UOM Conversion Factor is mandatory,Række {0}: Enhedskode-konverteringsfaktor er obligatorisk, Row {0}: select the workstation against the operation {1},Række {0}: Vælg arbejdsstationen imod operationen {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Udgavetype., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",Det ser ud som om der er et problem med serverens stribekonfiguration. I tilfælde af fejl bliver beløbet refunderet til din konto., Item Reported,Emne rapporteret, Item listing removed,Elementlisten er fjernet, -Item quantity can not be zero,Varemængde kan ikke være nul, Item taxes updated,Vareafgift opdateret, Item {0}: {1} qty produced. ,Vare {0}: {1} produceret antal., Joining Date can not be greater than Leaving Date,Deltagelsesdato kan ikke være større end forladelsesdato, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Række nr. {0}: Omkostningscenter {1} hører ikke til firmaet {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Række nr. {0}: Betjening {1} er ikke afsluttet for {2} antal færdige varer i arbejdsordre {3}. Opdater driftsstatus via Jobkort {4}., Row #{0}: Payment document is required to complete the transaction,Række nr. {0}: Betalingsdokument er påkrævet for at gennemføre transaktionen, +Row #{0}: Quantity for Item {1} cannot be zero.,Række nr. {0}: Varemængde for vare {1} kan ikke være nul., Row #{0}: Serial No {1} does not belong to Batch {2},Række nr. {0}: Serienummer {1} hører ikke til batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Række nr. {0}: Service-slutdato kan ikke være før fakturaens udgivelsesdato, Row #{0}: Service Start Date cannot be greater than Service End Date,Række nr. {0}: Service-startdato kan ikke være større end service-slutdato, diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index 2745d4da12..f6fc993200 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -2287,7 +2287,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Zeile {0}: Bitte setzen Sie den Steuerbefreiungsgrund in den Umsatzsteuern und -gebühren, Row {0}: Please set the Mode of Payment in Payment Schedule,Zeile {0}: Bitte legen Sie die Zahlungsart im Zahlungsplan fest, Row {0}: Please set the correct code on Mode of Payment {1},Zeile {0}: Bitte geben Sie den richtigen Code für die Zahlungsweise ein {1}, -Row {0}: Qty is mandatory,Zeile {0}: Menge ist zwingend erforderlich, Row {0}: Quality Inspection rejected for item {1},Zeile {0}: Qualitätsprüfung für Artikel {1} abgelehnt, Row {0}: UOM Conversion Factor is mandatory,Zeile {0}: Umrechnungsfaktor für Maßeinheit ist zwingend erforderlich, Row {0}: select the workstation against the operation {1},Zeile {0}: Wählen Sie die Arbeitsstation für die Operation {1} aus., @@ -3481,7 +3480,6 @@ Issue Type.,Problemtyp., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Es scheint, dass ein Problem mit der Stripe-Konfiguration des Servers vorliegt. Im Falle eines Fehlers wird der Betrag Ihrem Konto gutgeschrieben.", Item Reported,Gegenstand gemeldet, Item listing removed,Objektliste entfernt, -Item quantity can not be zero,Artikelmenge kann nicht Null sein, Item taxes updated,Artikelsteuern aktualisiert, Item {0}: {1} qty produced. ,Artikel {0}: {1} produzierte Menge., Joining Date can not be greater than Leaving Date,Das Beitrittsdatum darf nicht größer als das Austrittsdatum sein, @@ -3655,6 +3653,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Zeile {0}: Kostenstelle {1} gehört nicht zu Firma {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Zeile {0}: Vorgang {1} ist für {2} Fertigwarenmenge im Fertigungsauftrag {3} nicht abgeschlossen. Bitte aktualisieren Sie den Betriebsstatus über die Jobkarte {4}., Row #{0}: Payment document is required to complete the transaction,"Zeile {0}: Der Zahlungsbeleg ist erforderlich, um die Transaktion abzuschließen", +Row #{0}: Quantity for Item {1} cannot be zero.,Zeile {0}: Artikelmenge {1} kann nicht Null sein., Row #{0}: Serial No {1} does not belong to Batch {2},Zeile {0}: Seriennummer {1} gehört nicht zu Charge {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Zeile {0}: Das Service-Enddatum darf nicht vor dem Rechnungsbuchungsdatum liegen, Row #{0}: Service Start Date cannot be greater than Service End Date,Zeile {0}: Das Servicestartdatum darf nicht höher als das Serviceenddatum sein, diff --git a/erpnext/translations/el.csv b/erpnext/translations/el.csv index e67eaffc69..b90a10dd6f 100644 --- a/erpnext/translations/el.csv +++ b/erpnext/translations/el.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Σειρά {0}: Ρυθμίστε τον Φορολογικής Εξαίρεσης για τους Φόρους Πώλησης και τα Τέλη, Row {0}: Please set the Mode of Payment in Payment Schedule,Σειρά {0}: Ρυθμίστε τον τρόπο πληρωμής στο χρονοδιάγραμμα πληρωμών, Row {0}: Please set the correct code on Mode of Payment {1},Σειρά {0}: Ρυθμίστε τον σωστό κώδικα στη μέθοδο πληρωμής {1}, -Row {0}: Qty is mandatory,Γραμμή {0}: η ποσότητα είναι απαραίτητη, Row {0}: Quality Inspection rejected for item {1},Σειρά {0}: Η επιθεώρηση ποιότητας απορρίφθηκε για το στοιχείο {1}, Row {0}: UOM Conversion Factor is mandatory,Σειρά {0}: UOM Συντελεστής μετατροπής είναι υποχρεωτική, Row {0}: select the workstation against the operation {1},Γραμμή {0}: επιλέξτε τη θέση εργασίας σε σχέση με τη λειτουργία {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Τύπος έκδοσης., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Φαίνεται ότι υπάρχει ένα πρόβλημα με τη διαμόρφωση της λωρίδας του διακομιστή. Σε περίπτωση αποτυχίας, το ποσό θα επιστραφεί στο λογαριασμό σας.", Item Reported,Στοιχείο Αναφέρεται, Item listing removed,Η καταχώριση αντικειμένου καταργήθηκε, -Item quantity can not be zero,Η ποσότητα του στοιχείου δεν μπορεί να είναι μηδέν, Item taxes updated,Οι φόροι των στοιχείων ενημερώθηκαν, Item {0}: {1} qty produced. ,Στοιχείο {0}: {1} παράγεται., Joining Date can not be greater than Leaving Date,Η ημερομηνία σύνδεσης δεν μπορεί να είναι μεγαλύτερη από την ημερομηνία λήξης, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Σειρά # {0}: Το κέντρο κόστους {1} δεν ανήκει στην εταιρεία {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Σειρά # {0}: Η λειτουργία {1} δεν έχει ολοκληρωθεί για {2} ποσότητα τελικών προϊόντων στην Παραγγελία Εργασίας {3}. Ενημερώστε την κατάσταση λειτουργίας μέσω της κάρτας εργασίας {4}., Row #{0}: Payment document is required to complete the transaction,Γραμμή # {0}: Απαιτείται το έγγραφο πληρωμής για την ολοκλήρωση της συναλλαγής, +Row #{0}: Quantity for Item {1} cannot be zero.,Γραμμή # {0}: Η ποσότητα του στοιχείου {1} δεν μπορεί να είναι μηδέν, Row #{0}: Serial No {1} does not belong to Batch {2},Σειρά # {0}: Ο σειριακός αριθμός {1} δεν ανήκει στην Παρτίδα {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Σειρά # {0}: Η ημερομηνία λήξης υπηρεσίας δεν μπορεί να είναι πριν από την ημερομηνία αποστολής τιμολογίου, Row #{0}: Service Start Date cannot be greater than Service End Date,Σειρά # {0}: Η Ημερομηνία Έναρξης Υπηρεσίας δεν μπορεί να είναι μεγαλύτερη από την Ημερομηνία Λήξης Υπηρεσίας, diff --git a/erpnext/translations/es-PE.csv b/erpnext/translations/es-PE.csv index ed5d065b00..2e28e78d79 100644 --- a/erpnext/translations/es-PE.csv +++ b/erpnext/translations/es-PE.csv @@ -388,7 +388,6 @@ Maintenance Visit Purpose,Propósito de la Visita de Mantenimiento, No of Sent SMS,No. de SMS enviados, Stock Received But Not Billed,Inventario Recibido pero no facturados, Stores,Tiendas, -Row {0}: Qty is mandatory,Fila {0}: Cantidad es obligatorio, Report Type is mandatory,Tipo de informe es obligatorio, "System User (login) ID. If set, it will become default for all HR forms.","Usuario del Sistema (login )ID. Si se establece , será por defecto para todas las formas de Recursos Humanos." UOM Conversion factor is required in row {0},"El factor de conversión de la (UdM) Unidad de medida, es requerida en la linea {0}" diff --git a/erpnext/translations/es.csv b/erpnext/translations/es.csv index 0c90694f8f..681972e549 100644 --- a/erpnext/translations/es.csv +++ b/erpnext/translations/es.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Fila {0}: establezca el Motivo de exención de impuestos en Impuestos y cargos de ventas, Row {0}: Please set the Mode of Payment in Payment Schedule,Fila {0}: establezca el modo de pago en el calendario de pagos, Row {0}: Please set the correct code on Mode of Payment {1},Fila {0}: establezca el código correcto en Modo de pago {1}, -Row {0}: Qty is mandatory,Línea {0}: La cantidad es obligatoria, Row {0}: Quality Inspection rejected for item {1},Fila {0}: Inspección de calidad rechazada para el artículo {1}, Row {0}: UOM Conversion Factor is mandatory,Línea {0}: El factor de conversión de (UdM) es obligatorio, Row {0}: select the workstation against the operation {1},Fila {0}: seleccione la estación de trabajo contra la operación {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Tipo de problema., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Parece que hay un problema con la configuración de la banda del servidor. En caso de falla, la cantidad será reembolsada a su cuenta.", Item Reported,Artículo reportado, Item listing removed,Listado de artículos eliminado, -Item quantity can not be zero,La cantidad del artículo no puede ser cero, Item taxes updated,Impuestos de artículos actualizados, Item {0}: {1} qty produced. ,Elemento {0}: {1} cantidad producida., Joining Date can not be greater than Leaving Date,La fecha de incorporación no puede ser mayor que la fecha de salida, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Fila # {0}: el centro de costos {1} no pertenece a la compañía {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Fila # {0}: la operación {1} no se completa para {2} cantidad de productos terminados en la orden de trabajo {3}. Actualice el estado de la operación a través de la Tarjeta de trabajo {4}., Row #{0}: Payment document is required to complete the transaction,Fila # {0}: se requiere un documento de pago para completar la transacción, +Row #{0}: Quantity for Item {1} cannot be zero.,Fila # {0}: La cantidad del artículo {1} no puede ser cero., Row #{0}: Serial No {1} does not belong to Batch {2},Fila # {0}: El número de serie {1} no pertenece al lote {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Fila n.º {0}: la fecha de finalización del servicio no puede ser anterior a la fecha de contabilización de facturas, Row #{0}: Service Start Date cannot be greater than Service End Date,Fila n.º {0}: la fecha de inicio del servicio no puede ser mayor que la fecha de finalización del servicio, diff --git a/erpnext/translations/es_pe.csv b/erpnext/translations/es_pe.csv index 9b801e5882..405c02827b 100644 --- a/erpnext/translations/es_pe.csv +++ b/erpnext/translations/es_pe.csv @@ -310,7 +310,6 @@ Row {0}: Debit entry can not be linked with a {1},Fila {0}: Débito no puede vin Row {0}: Party Type and Party is required for Receivable / Payable account {1},Fila {0}: el tipo de entidad se requiere para las cuentas por cobrar/pagar {1}, Row {0}: Payment against Sales/Purchase Order should always be marked as advance,Fila {0}: El pago de Compra/Venta siempre debe estar marcado como anticipo, Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.,"Fila {0}: Por favor, consulte ""¿Es Avance 'contra la Cuenta {1} si se trata de una entrada con antelación.", -Row {0}: Qty is mandatory,Fila {0}: Cantidad es obligatorio, Row {0}: {1} {2} does not match with {3},Fila {0}: {1} {2} no coincide con {3}, Row {0}:Start Date must be before End Date,Fila {0}: Fecha de inicio debe ser anterior Fecha de finalización, Rules for adding shipping costs.,Reglas para la adición de los gastos de envío ., diff --git a/erpnext/translations/et.csv b/erpnext/translations/et.csv index 69a89d9d22..4cd6753574 100644 --- a/erpnext/translations/et.csv +++ b/erpnext/translations/et.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Rida {0}: palun määrake käibemaksu ja lõivude maksuvabastuse põhjus, Row {0}: Please set the Mode of Payment in Payment Schedule,Rida {0}: määrake maksegraafikus makseviis, Row {0}: Please set the correct code on Mode of Payment {1},Rida {0}: seadke makserežiimis {1} õige kood, -Row {0}: Qty is mandatory,Row {0}: Kogus on kohustuslikuks, Row {0}: Quality Inspection rejected for item {1},Rida {0}: üksuse {1} kvaliteedikontroll lükati tagasi, Row {0}: UOM Conversion Factor is mandatory,Row {0}: UOM Conversion Factor on kohustuslik, Row {0}: select the workstation against the operation {1},Rida {0}: valige tööjaam operatsiooni vastu {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Väljaande tüüp., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Tundub, et serveri riba konfiguratsiooniga on probleem. Ebaõnnestumise korral tagastatakse summa teie kontole.", Item Reported,Teatatud üksusest, Item listing removed,Üksuse kirje eemaldati, -Item quantity can not be zero,Toote kogus ei saa olla null, Item taxes updated,Üksuse maksud värskendatud, Item {0}: {1} qty produced. ,Toode {0}: {1} toodetud kogus., Joining Date can not be greater than Leaving Date,Liitumiskuupäev ei saa olla suurem kui lahkumiskuupäev, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Rida # 0: kulukeskus {1} ei kuulu ettevõttele {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Rida # 0: operatsioon {1} ei ole lõpule viidud {2} töökäsus {3} olevate valmistoodete osas. Värskendage töö olekut töökaardi {4} kaudu., Row #{0}: Payment document is required to complete the transaction,Rida # 0: tehingu lõpuleviimiseks on vaja maksedokumenti, +Row #{0}: Quantity for Item {1} cannot be zero.,Rida # {0}: Toote {1} kogus ei saa olla null., Row #{0}: Serial No {1} does not belong to Batch {2},Rida # 0: seerianumber {1} ei kuulu partiisse {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Rida # {0}: teenuse lõppkuupäev ei saa olla enne arve saatmise kuupäeva, Row #{0}: Service Start Date cannot be greater than Service End Date,Rida # 0: teenuse alguskuupäev ei saa olla suurem kui teenuse lõppkuupäev, diff --git a/erpnext/translations/fa.csv b/erpnext/translations/fa.csv index cddabfb448..5f8fbd558a 100644 --- a/erpnext/translations/fa.csv +++ b/erpnext/translations/fa.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,ردیف {0}: لطفاً دلیل معافیت مالیاتی در مالیات و عوارض فروش را تعیین کنید, Row {0}: Please set the Mode of Payment in Payment Schedule,ردیف {0}: لطفاً نحوه پرداخت را در جدول پرداخت تنظیم کنید, Row {0}: Please set the correct code on Mode of Payment {1},ردیف {0}: لطفا کد صحیح را در حالت پرداخت {1} تنظیم کنید, -Row {0}: Qty is mandatory,ردیف {0}: تعداد الزامی است, Row {0}: Quality Inspection rejected for item {1},ردیف {0}: بازرسی کیفیت برای آیتم {1} رد شد, Row {0}: UOM Conversion Factor is mandatory,ردیف {0}: UOM عامل تبدیل الزامی است, Row {0}: select the workstation against the operation {1},ردیف {0}: ایستگاه کاری را در برابر عملیات انتخاب کنید {1}, @@ -3461,7 +3460,6 @@ Issue Type.,نوع مقاله., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",به نظر می رسد یک مشکل با پیکربندی نوار خط سرور وجود دارد. در صورت خرابی، مقدار به حساب شما بازپرداخت خواهد شد., Item Reported,گزارش مورد, Item listing removed,لیست موارد حذف شد, -Item quantity can not be zero,مقدار کالا نمی تواند صفر باشد, Item taxes updated,مالیات مورد به روز شد, Item {0}: {1} qty produced. ,مورد {0}: {1 ty تولید شده است., Joining Date can not be greater than Leaving Date,تاریخ عضویت نمی تواند بیشتر از تاریخ ترک باشد, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},ردیف شماره {0: مرکز هزینه 1} متعلق به شرکت {2, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,ردیف شماره {0: عملیات {1 for برای کالاهای {2 پوند در سفارش کار 3 {کامل نشده است. لطفاً وضعیت عملکرد را از طریق کارت کار 4 update به روز کنید., Row #{0}: Payment document is required to complete the transaction,ردیف # {0}: برای تکمیل معامله ، سند پرداخت لازم است, +Row #{0}: Quantity for Item {1} cannot be zero.,ردیف # {0}: مقدار کالای {1} نمی تواند صفر باشد, Row #{0}: Serial No {1} does not belong to Batch {2},ردیف شماره {0: سریال شماره {1} متعلق به دسته {2 نیست, Row #{0}: Service End Date cannot be before Invoice Posting Date,ردیف شماره {0}: تاریخ پایان خدمت نمی تواند قبل از تاریخ ارسال فاکتور باشد, Row #{0}: Service Start Date cannot be greater than Service End Date,ردیف شماره {0}: تاریخ شروع سرویس نمی تواند بیشتر از تاریخ پایان سرویس باشد, diff --git a/erpnext/translations/fi.csv b/erpnext/translations/fi.csv index eae6053915..f412731777 100644 --- a/erpnext/translations/fi.csv +++ b/erpnext/translations/fi.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Rivi {0}: aseta verovapautusperusteeksi myyntiverot ja maksut, Row {0}: Please set the Mode of Payment in Payment Schedule,Rivi {0}: Aseta maksutapa maksuaikataulussa, Row {0}: Please set the correct code on Mode of Payment {1},Rivi {0}: Aseta oikea koodi Maksutilaan {1}, -Row {0}: Qty is mandatory,Rivillä {0}: Yksikkömäärä vaaditaan, Row {0}: Quality Inspection rejected for item {1},Rivi {0}: Tuotteen {1} laatutarkastus hylätty, Row {0}: UOM Conversion Factor is mandatory,Rivi {0}: UOM Muuntokerroin on pakollinen, Row {0}: select the workstation against the operation {1},Rivi {0}: valitse työasema operaatiota vastaan {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Julkaisutyyppi., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Näyttää siltä, että palvelimen raidakokoonpano on ongelma. Vahingossa summa palautetaan tilillesi.", Item Reported,Kohde ilmoitettu, Item listing removed,Tuotetiedot poistettu, -Item quantity can not be zero,Tuotteen määrä ei voi olla nolla, Item taxes updated,Tuoteverot päivitetty, Item {0}: {1} qty produced. ,Tuote {0}: {1} määrä tuotettu., Joining Date can not be greater than Leaving Date,Liittymispäivä ei voi olla suurempi kuin lähtöpäivä, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Rivi # {0}: Kustannuskeskus {1} ei kuulu yritykseen {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Rivi # {0}: Operaatiota {1} ei suoriteta {2} määrälle työjärjestyksessä {3} olevia valmiita tuotteita. Päivitä toimintatila työkortilla {4}., Row #{0}: Payment document is required to complete the transaction,Rivi # {0}: Maksutodistus vaaditaan tapahtuman suorittamiseksi, +Row #{0}: Quantity for Item {1} cannot be zero.,Rivi # {0}: Tuotteen {1} määrä ei voi olla nolla., Row #{0}: Serial No {1} does not belong to Batch {2},Rivi # {0}: Sarjanumero {1} ei kuulu erään {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Rivi # {0}: Palvelun lopetuspäivä ei voi olla ennen laskun lähettämispäivää, Row #{0}: Service Start Date cannot be greater than Service End Date,Rivi # {0}: Palvelun aloituspäivä ei voi olla suurempi kuin palvelun lopetuspäivä, diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv index a7111234af..53a9027f9f 100644 --- a/erpnext/translations/fr.csv +++ b/erpnext/translations/fr.csv @@ -2111,7 +2111,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Ligne {0}: Définissez le motif d'exemption de taxe dans les taxes de vente et les frais., Row {0}: Please set the Mode of Payment in Payment Schedule,Ligne {0}: Veuillez définir le mode de paiement dans le calendrier de paiement., Row {0}: Please set the correct code on Mode of Payment {1},Ligne {0}: définissez le code correct sur le mode de paiement {1}., -Row {0}: Qty is mandatory,Ligne {0} : Qté obligatoire, Row {0}: Quality Inspection rejected for item {1},Ligne {0}: le contrôle qualité a été rejeté pour l'élément {1}., Row {0}: UOM Conversion Factor is mandatory,Ligne {0} : Facteur de Conversion nomenclature est obligatoire, Row {0}: select the workstation against the operation {1},Ligne {0}: sélectionnez le poste de travail en fonction de l'opération {1}, @@ -3152,7 +3151,6 @@ Issue Type.,Type de probleme., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Il semble qu'il y a un problème avec la configuration de Stripe sur le serveur. En cas d'erreur, le montant est remboursé sur votre compte.", Item Reported,Article rapporté, Item listing removed,Liste d'articles supprimée, -Item quantity can not be zero,La quantité d'article ne peut être nulle, Item taxes updated,Taxes sur les articles mises à jour, Item {0}: {1} qty produced. ,Article {0}: {1} quantité produite., Joining Date can not be greater than Leaving Date,La date d'adhésion ne peut pas être supérieure à la date de départ, @@ -3299,6 +3297,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Ligne # {0}: le centre de coûts {1} n'appartient pas à l'entreprise {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Ligne n ° {0}: l'opération {1} n'est pas terminée pour {2} quantité de produits finis dans l'ordre de fabrication {3}. Veuillez mettre à jour le statut de l'opération via la carte de travail {4}., Row #{0}: Payment document is required to complete the transaction,Ligne n ° {0}: Un document de paiement est requis pour effectuer la transaction., +Row #{0}: Quantity for Item {1} cannot be zero.,Ligne n° {0}: La quantité de l'article {1} ne peut être nulle, Row #{0}: Serial No {1} does not belong to Batch {2},Ligne # {0}: le numéro de série {1} n'appartient pas au lot {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Ligne # {0}: la date de fin du service ne peut pas être antérieure à la date de validation de la facture, Row #{0}: Service Start Date cannot be greater than Service End Date,Ligne # {0}: la date de début du service ne peut pas être supérieure à la date de fin du service, diff --git a/erpnext/translations/gu.csv b/erpnext/translations/gu.csv index 604ec411c4..c26adbd89d 100644 --- a/erpnext/translations/gu.csv +++ b/erpnext/translations/gu.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,પંક્તિ {0}: કૃપા કરીને વેચાણ વેરા અને શુલ્કમાં કર મુક્તિ કારણને સેટ કરો, Row {0}: Please set the Mode of Payment in Payment Schedule,પંક્તિ {0}: કૃપા કરીને ચુકવણી સૂચિમાં ચુકવણીનું મોડ સેટ કરો, Row {0}: Please set the correct code on Mode of Payment {1},પંક્તિ {0}: કૃપા કરીને ચુકવણીના મોડ પર સાચો કોડ સેટ કરો {1}, -Row {0}: Qty is mandatory,રો {0}: Qty ફરજિયાત છે, Row {0}: Quality Inspection rejected for item {1},પંક્તિ {0}: આઇટમ માટે જાત નિરીક્ષણ નકારેલ {1}, Row {0}: UOM Conversion Factor is mandatory,રો {0}: UOM રૂપાંતર ફેક્ટર ફરજિયાત છે, Row {0}: select the workstation against the operation {1},રો {0}: ઓપરેશન સામે વર્કસ્ટેશન પસંદ કરો {1}, @@ -3461,7 +3460,6 @@ Issue Type.,ઇશ્યુનો પ્રકાર., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","એવું લાગે છે કે સર્વરની પટ્ટી ગોઠવણી સાથે સમસ્યા છે. નિષ્ફળતાના કિસ્સામાં, રકમ તમારા એકાઉન્ટમાં પરત કરાશે.", Item Reported,આઇટમની જાણ થઈ, Item listing removed,આઇટમ સૂચિ દૂર કરી, -Item quantity can not be zero,આઇટમનો જથ્થો શૂન્ય હોઈ શકતો નથી, Item taxes updated,આઇટમ ટેક્સ અપડેટ કરાયો, Item {0}: {1} qty produced. ,આઇટમ {0}: produced 1} ક્યુટી ઉત્પન્ન., Joining Date can not be greater than Leaving Date,જોડાવાની તારીખ એ તારીખ છોડવાની તારીખ કરતા મોટી ન હોઇ શકે, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},પંક્તિ # {0}: કિંમત કેન્દ્ર {1 company કંપની to 2 belong નું નથી, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,પંક્તિ # {0}: Orderપરેશન {1 ty વર્ક ઓર્ડર finished 3 finished માં તૈયાર માલના {2} ક્યુટી માટે પૂર્ણ થયું નથી. કૃપા કરીને જોબ કાર્ડ via 4 via દ્વારા ઓપરેશનની સ્થિતિને અપડેટ કરો., Row #{0}: Payment document is required to complete the transaction,પંક્તિ # {0}: ટ્રાંઝેક્શન પૂર્ણ કરવા માટે ચુકવણી દસ્તાવેજ આવશ્યક છે, +Row #{0}: Quantity for Item {1} cannot be zero.,પંક્તિ # {0}: આઇટમનો {1} જથ્થો શૂન્ય હોઈ શકતો નથી, Row #{0}: Serial No {1} does not belong to Batch {2},પંક્તિ # {0}: સીરીયલ નંબર {1 B બેચ belong 2 to સાથે સંબંધિત નથી, Row #{0}: Service End Date cannot be before Invoice Posting Date,પંક્તિ # {0}: સેવાની સમાપ્તિ તારીખ ઇન્વoiceઇસ પોસ્ટિંગ તારીખ પહેલાંની હોઈ શકતી નથી, Row #{0}: Service Start Date cannot be greater than Service End Date,"પંક્તિ # {0}: સેવા પ્રારંભ તારીખ, સેવાની સમાપ્તિ તારીખ કરતા મોટી ન હોઇ શકે", diff --git a/erpnext/translations/he.csv b/erpnext/translations/he.csv index 5407578f2b..695fa37801 100644 --- a/erpnext/translations/he.csv +++ b/erpnext/translations/he.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,שורה {0}: הגדר את סיבת הפטור ממס במסים ובחיובים, Row {0}: Please set the Mode of Payment in Payment Schedule,שורה {0}: הגדר את אופן התשלום בלוח הזמנים לתשלום, Row {0}: Please set the correct code on Mode of Payment {1},שורה {0}: הגדר את הקוד הנכון במצב התשלום {1}, -Row {0}: Qty is mandatory,שורת {0}: הכמות היא חובה, Row {0}: Quality Inspection rejected for item {1},שורה {0}: בדיקת האיכות נדחתה לפריט {1}, Row {0}: UOM Conversion Factor is mandatory,שורת {0}: יחידת מידת המרת פקטור הוא חובה, Row {0}: select the workstation against the operation {1},שורה {0}: בחר את תחנת העבודה כנגד הפעולה {1}, @@ -3461,7 +3460,6 @@ Issue Type.,סוג הבעיה., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","נראה שיש בעיה בתצורת הפס של השרת. במקרה של כישלון, הסכום יוחזר לחשבונך.", Item Reported,פריט דווח, Item listing removed,רישום הפריט הוסר, -Item quantity can not be zero,כמות הפריט לא יכולה להיות אפס, Item taxes updated,מיסי הפריט עודכנו, Item {0}: {1} qty produced. ,פריט {0}: {1} כמות המיוצרת., Joining Date can not be greater than Leaving Date,תאריך ההצטרפות לא יכול להיות גדול מתאריך העזיבה, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},שורה מספר {0}: מרכז העלות {1} אינו שייך לחברה {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,שורה מספר {0}: פעולה {1} לא הושלמה עבור {2} כמות מוצרים מוגמרים בהזמנת עבודה {3}. אנא עדכן את מצב הפעולה באמצעות כרטיס עבודה {4}., Row #{0}: Payment document is required to complete the transaction,שורה מספר {0}: נדרש מסמך תשלום להשלמת העסקה, +Row #{0}: Quantity for Item {1} cannot be zero.,שורה מספר {0}: כמות הפריט {1} לא יכולה להיות אפס, Row #{0}: Serial No {1} does not belong to Batch {2},שורה מספר {0}: מספר סידורי {1} אינו שייך לאצווה {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,שורה מספר {0}: תאריך סיום השירות לא יכול להיות לפני תאריך פרסום החשבונית, Row #{0}: Service Start Date cannot be greater than Service End Date,שורה מס '{0}: תאריך התחלת השירות לא יכול להיות גדול מתאריך סיום השירות, diff --git a/erpnext/translations/hi.csv b/erpnext/translations/hi.csv index 00532df0f1..5d6dab3545 100644 --- a/erpnext/translations/hi.csv +++ b/erpnext/translations/hi.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,पंक्ति {0}: कृपया बिक्री कर और शुल्क में कर छूट का कारण निर्धारित करें, Row {0}: Please set the Mode of Payment in Payment Schedule,पंक्ति {0}: कृपया भुगतान अनुसूची में भुगतान का तरीका निर्धारित करें, Row {0}: Please set the correct code on Mode of Payment {1},पंक्ति {0}: कृपया भुगतान विधि पर सही कोड सेट करें {1}, -Row {0}: Qty is mandatory,पंक्ति {0}: मात्रा अनिवार्य है, Row {0}: Quality Inspection rejected for item {1},पंक्ति {0}: गुणवत्ता निरीक्षण आइटम {1} के लिए अस्वीकार कर दिया गया, Row {0}: UOM Conversion Factor is mandatory,पंक्ति {0}: UoM रूपांतरण कारक है अनिवार्य है, Row {0}: select the workstation against the operation {1},पंक्ति {0}: ऑपरेशन के खिलाफ वर्कस्टेशन का चयन करें {1}, @@ -3461,7 +3460,6 @@ Issue Type.,समस्या का प्रकार।, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","ऐसा लगता है कि सर्वर की पट्टी विन्यास के साथ कोई समस्या है। विफलता के मामले में, राशि आपके खाते में वापस कर दी जाएगी।", Item Reported,आइटम रिपोर्ट की गई, Item listing removed,आइटम सूची निकाली गई, -Item quantity can not be zero,आइटम की मात्रा शून्य नहीं हो सकती, Item taxes updated,आइटम कर अद्यतन किए गए, Item {0}: {1} qty produced. ,आइटम {0}: {1} मात्रा का उत्पादन किया।, Joining Date can not be greater than Leaving Date,ज्वाइनिंग डेट लीविंग डेट से बड़ी नहीं हो सकती, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},पंक्ति # {0}: लागत केंद्र {1} कंपनी {2} से संबंधित नहीं है, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,पंक्ति # {0}: ऑपरेशन {1} कार्य क्रम {3} में तैयार माल की मात्रा {2} के लिए पूरा नहीं हुआ है। कृपया जॉब कार्ड {4} के माध्यम से संचालन की स्थिति को अपडेट करें।, Row #{0}: Payment document is required to complete the transaction,पंक्ति # {0}: लेन-देन को पूरा करने के लिए भुगतान दस्तावेज़ आवश्यक है, +Row #{0}: Quantity for Item {1} cannot be zero.,पंक्ति # {0}: आइटम {1} की मात्रा शून्य नहीं हो सकती, Row #{0}: Serial No {1} does not belong to Batch {2},पंक्ति # {0}: सीरियल नंबर {1} बैच {2} से संबंधित नहीं है, Row #{0}: Service End Date cannot be before Invoice Posting Date,पंक्ति # {0}: सेवा समाप्ति तिथि चालान पोस्टिंग तिथि से पहले नहीं हो सकती, Row #{0}: Service Start Date cannot be greater than Service End Date,पंक्ति # {0}: सेवा प्रारंभ तिथि सेवा समाप्ति तिथि से अधिक नहीं हो सकती, diff --git a/erpnext/translations/hr.csv b/erpnext/translations/hr.csv index 3cc9ef3be2..ddc5b593c6 100644 --- a/erpnext/translations/hr.csv +++ b/erpnext/translations/hr.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Redak {0}: Postavite razlog oslobađanja od poreza u porezima i naknadama na promet, Row {0}: Please set the Mode of Payment in Payment Schedule,Redak {0}: Postavite Način plaćanja u Raspored plaćanja, Row {0}: Please set the correct code on Mode of Payment {1},Redak {0}: postavite ispravan kôd na način plaćanja {1}, -Row {0}: Qty is mandatory,Red {0}: Količina je obvezno, Row {0}: Quality Inspection rejected for item {1},Redak {0}: Odbačena inspekcija kvalitete za stavku {1}, Row {0}: UOM Conversion Factor is mandatory,Red {0}: UOM pretvorbe faktor je obavezno, Row {0}: select the workstation against the operation {1},Red {0}: odaberite radnu stanicu protiv operacije {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Vrsta izdanja, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Čini se da postoji problem s konfiguracijom trake poslužitelja. U slučaju neuspjeha, iznos će biti vraćen na vaš račun.", Item Reported,Stavka prijavljena, Item listing removed,Popis predmeta uklonjen je, -Item quantity can not be zero,Količina predmeta ne može biti jednaka nuli, Item taxes updated,Ažurirani su porezi na stavke, Item {0}: {1} qty produced. ,Stavka {0}: {1} Količina proizvedena., Joining Date can not be greater than Leaving Date,Datum pridruživanja ne može biti veći od Datum napuštanja, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Redak # {0}: Troškovno mjesto {1} ne pripada tvrtki {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Redak # {0}: Operacija {1} nije dovršena za {2} količinu gotovih proizvoda u radnom nalogu {3}. Ažurirajte status rada putem Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Redak # {0}: Dokument za plaćanje potreban je za dovršavanje transakcije, +Row #{0}: Quantity for Item {1} cannot be zero.,Redak #{0}: Količina predmeta {1} ne može biti jednaka nuli., Row #{0}: Serial No {1} does not belong to Batch {2},Redak br. {0}: Serijski br. {1} ne pripada grupi {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Redak broj {0}: datum završetka usluge ne može biti prije datuma knjiženja fakture, Row #{0}: Service Start Date cannot be greater than Service End Date,Redak broj {0}: Datum početka usluge ne može biti veći od datuma završetka usluge, diff --git a/erpnext/translations/hu.csv b/erpnext/translations/hu.csv index 42175bbe34..a793937e62 100644 --- a/erpnext/translations/hu.csv +++ b/erpnext/translations/hu.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"{0} sor: Kérjük, állítsa az adómentesség okához a forgalmi adókat és díjakat", Row {0}: Please set the Mode of Payment in Payment Schedule,"{0} sor: Kérjük, állítsa be a fizetési módot a fizetési ütemezésben", Row {0}: Please set the correct code on Mode of Payment {1},"{0} sor: Kérjük, állítsa be a helyes kódot a Fizetési módban {1}", -Row {0}: Qty is mandatory,Sor {0}: Menny. kötelező, Row {0}: Quality Inspection rejected for item {1},{0} sor: A (z) {1} tételnél a minőségellenőrzést elutasították, Row {0}: UOM Conversion Factor is mandatory,Sor {0}: UOM átváltási arányra is kötelező, Row {0}: select the workstation against the operation {1},{0} sor: válassza ki a munkaállomást a művelet ellen {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Probléma típus., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Úgy tűnik, hogy probléma van a kiszolgáló sávszélesség konfigurációjával. Hiba esetén az összeg visszafizetésre kerül a számlájára.", Item Reported,Jelentés tárgya, Item listing removed,Az elemlista eltávolítva, -Item quantity can not be zero,A cikk mennyisége nem lehet nulla, Item taxes updated,A cikk adóit frissítettük, Item {0}: {1} qty produced. ,{0} tétel: {1} mennyiség előállítva., Joining Date can not be greater than Leaving Date,"A csatlakozási dátum nem lehet nagyobb, mint a távozási dátum", @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},{0} sor: A (z) {1} költségközpont nem tartozik a (z) {2} vállalathoz, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"{0} sor: A (z) {1} művelet a (z) {3} munkarenden lévő {2} mennyiségű készterméknél nem fejeződött be. Kérjük, frissítse a működési állapotot a (z) {4} Job Card segítségével.", Row #{0}: Payment document is required to complete the transaction,{0} sor: A tranzakció teljesítéséhez fizetési dokumentum szükséges, +Row #{0}: Quantity for Item {1} cannot be zero.,{0} sor: A cikk {1} mennyisége nem lehet nulla., Row #{0}: Serial No {1} does not belong to Batch {2},{0} sor: A (z) {1} sorszám nem tartozik a {2} tételhez, Row #{0}: Service End Date cannot be before Invoice Posting Date,{0} sor: A szolgáltatás befejezési dátuma nem lehet a számla feladásának dátuma előtt, Row #{0}: Service Start Date cannot be greater than Service End Date,"{0} sor: A szolgáltatás kezdési dátuma nem lehet nagyobb, mint a szolgáltatás befejezési dátuma", diff --git a/erpnext/translations/id.csv b/erpnext/translations/id.csv index d69eef389d..14a13f09d5 100644 --- a/erpnext/translations/id.csv +++ b/erpnext/translations/id.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Baris {0}: Harap atur di Alasan Pembebasan Pajak dalam Pajak Penjualan dan Biaya, Row {0}: Please set the Mode of Payment in Payment Schedule,Baris {0}: Silakan tetapkan Mode Pembayaran dalam Jadwal Pembayaran, Row {0}: Please set the correct code on Mode of Payment {1},Baris {0}: Silakan tetapkan kode yang benar pada Mode Pembayaran {1}, -Row {0}: Qty is mandatory,Row {0}: Qty adalah wajib, Row {0}: Quality Inspection rejected for item {1},Baris {0}: Pemeriksaan Kualitas ditolak untuk barang {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: UOM Faktor Konversi adalah wajib, Row {0}: select the workstation against the operation {1},Baris {0}: pilih workstation terhadap operasi {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Jenis Masalah., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Tampaknya ada masalah dengan konfigurasi strip server. Jika terjadi kegagalan, jumlah itu akan dikembalikan ke akun Anda.", Item Reported,Barang Dilaporkan, Item listing removed,Daftar item dihapus, -Item quantity can not be zero,Kuantitas barang tidak boleh nol, Item taxes updated,Pajak barang diperbarui, Item {0}: {1} qty produced. ,Item {0}: {1} jumlah diproduksi., Joining Date can not be greater than Leaving Date,Tanggal Bergabung tidak boleh lebih dari Tanggal Meninggalkan, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Baris # {0}: Pusat Biaya {1} bukan milik perusahaan {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Baris # {0}: Operasi {1} tidak selesai untuk {2} jumlah barang jadi dalam Perintah Kerja {3}. Harap perbarui status operasi melalui Kartu Pekerjaan {4}., Row #{0}: Payment document is required to complete the transaction,Baris # {0}: Dokumen pembayaran diperlukan untuk menyelesaikan transaksi, +Row #{0}: Quantity for Item {1} cannot be zero.,Baris # {0}: Kuantitas barang {1} tidak boleh nol., Row #{0}: Serial No {1} does not belong to Batch {2},Baris # {0}: Nomor Seri {1} bukan milik Kelompok {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Baris # {0}: Tanggal Berakhir Layanan tidak boleh sebelum Tanggal Posting Faktur, Row #{0}: Service Start Date cannot be greater than Service End Date,Baris # {0}: Tanggal Mulai Layanan tidak boleh lebih besar dari Tanggal Akhir Layanan, diff --git a/erpnext/translations/is.csv b/erpnext/translations/is.csv index 1acefbb3ee..95920151f8 100644 --- a/erpnext/translations/is.csv +++ b/erpnext/translations/is.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Röð {0}: Vinsamlegast stillið á skattfrelsisástæða í söluskatti og gjöldum, Row {0}: Please set the Mode of Payment in Payment Schedule,Röð {0}: Vinsamlegast stilltu greiðslumáta í greiðsluáætlun, Row {0}: Please set the correct code on Mode of Payment {1},Röð {0}: Vinsamlegast stilltu réttan kóða á greiðslumáta {1}, -Row {0}: Qty is mandatory,Row {0}: Magn er nauðsynlegur, Row {0}: Quality Inspection rejected for item {1},Röð {0}: Gæðaeftirlit hafnað fyrir hlut {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: UOM viðskipta Factor er nauðsynlegur, Row {0}: select the workstation against the operation {1},Rú {0}: veldu vinnustöðina gegn aðgerðinni {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Útgáfutegund., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",Það virðist sem það er vandamál með rétta stillingu miðlarans. Ef bilun er fyrir hendi verður fjárhæðin endurgreitt á reikninginn þinn., Item Reported,Liður tilkynntur, Item listing removed,Atriðaskráning fjarlægð, -Item quantity can not be zero,Magn vöru getur ekki verið núll, Item taxes updated,Atvinnuskattar uppfærðir, Item {0}: {1} qty produced. ,Liður {0}: {1} fjöldi framleiddur., Joining Date can not be greater than Leaving Date,Tengingardagur má ekki vera stærri en dagsetningardagur, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Röð # {0}: Kostnaðarmiðstöð {1} tilheyrir ekki fyrirtæki {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Röð # {0}: Aðgerð {1} er ekki lokið fyrir {2} magn fullunnar vöru í vinnuskipan {3}. Vinsamlegast uppfærðu stöðu starfsins með Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Lína # {0}: Greiðslu skjal er nauðsynlegt til að ljúka viðskiptunum, +Row #{0}: Quantity for Item {1} cannot be zero.,Röð #{0}: Magn vöru {1} getur ekki verið núll., Row #{0}: Serial No {1} does not belong to Batch {2},Röð # {0}: Raðnúmer {1} tilheyrir ekki hópi {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Lína # {0}: Lokadagsetning þjónustu má ekki vera fyrir dagsetningu reiknings, Row #{0}: Service Start Date cannot be greater than Service End Date,Röð # {0}: Upphafsdagsetning þjónustu má ekki vera meiri en lokadagur þjónustu, diff --git a/erpnext/translations/it.csv b/erpnext/translations/it.csv index e6e64254bb..50f07bb101 100644 --- a/erpnext/translations/it.csv +++ b/erpnext/translations/it.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Riga {0}: impostare il motivo dell'esenzione fiscale in Imposte e addebiti, Row {0}: Please set the Mode of Payment in Payment Schedule,Riga {0}: imposta la Modalità di pagamento in Pianificazione pagamenti, Row {0}: Please set the correct code on Mode of Payment {1},Riga {0}: imposta il codice corretto su Modalità di pagamento {1}, -Row {0}: Qty is mandatory,Riga {0}: Quantità è obbligatorio, Row {0}: Quality Inspection rejected for item {1},Riga {0}: Ispezione di qualità rifiutata per l'articolo {1}, Row {0}: UOM Conversion Factor is mandatory,Riga {0}: UOM fattore di conversione è obbligatoria, Row {0}: select the workstation against the operation {1},Riga {0}: seleziona la workstation rispetto all'operazione {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Tipo di problema., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Sembra che ci sia un problema con la configurazione delle strisce del server. In caso di fallimento, l'importo verrà rimborsato sul tuo conto.", Item Reported,Articolo segnalato, Item listing removed,Elenco degli articoli rimosso, -Item quantity can not be zero,La quantità dell'articolo non può essere zero, Item taxes updated,Imposte sugli articoli aggiornate, Item {0}: {1} qty produced. ,Articolo {0}: {1} qtà prodotta., Joining Date can not be greater than Leaving Date,La data di iscrizione non può essere superiore alla data di fine, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Riga # {0}: Cost Center {1} non appartiene alla società {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Riga n. {0}: l'operazione {1} non è stata completata per {2} quantità di prodotti finiti nell'ordine di lavoro {3}. Aggiorna lo stato dell'operazione tramite la Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Riga # {0}: per completare la transazione è richiesto un documento di pagamento, +Row #{0}: Quantity for Item {1} cannot be zero.,Riga # {0}: La quantità dell'articolo {1} non può essere zero., Row #{0}: Serial No {1} does not belong to Batch {2},Riga # {0}: il numero di serie {1} non appartiene a Batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Riga n. {0}: la data di fine del servizio non può essere precedente alla data di registrazione della fattura, Row #{0}: Service Start Date cannot be greater than Service End Date,Riga # {0}: la data di inizio del servizio non può essere superiore alla data di fine del servizio, diff --git a/erpnext/translations/ja.csv b/erpnext/translations/ja.csv index dd5820ae77..468866fb6f 100644 --- a/erpnext/translations/ja.csv +++ b/erpnext/translations/ja.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,行{0}:売上税および消費税の免税理由で設定してください, Row {0}: Please set the Mode of Payment in Payment Schedule,行{0}:支払いスケジュールに支払い方法を設定してください, Row {0}: Please set the correct code on Mode of Payment {1},行{0}:支払い方法{1}に正しいコードを設定してください, -Row {0}: Qty is mandatory,行{0}:数量は必須です, Row {0}: Quality Inspection rejected for item {1},行{0}:品質検査が品目{1}に対して拒否されました, Row {0}: UOM Conversion Factor is mandatory,行{0}:数量単位(UOM)換算係数は必須です, Row {0}: select the workstation against the operation {1},行{0}:操作{1}に対するワークステーションを選択します。, @@ -3461,7 +3460,6 @@ Issue Type.,問題の種類。, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",サーバーのストライプ構成に問題があるようです。不具合が発生した場合、その金額はお客様のアカウントに払い戻されます。, Item Reported,報告されたアイテム, Item listing removed,商品リストを削除しました, -Item quantity can not be zero,品目数量はゼロにできません, Item taxes updated,アイテム税が更新されました, Item {0}: {1} qty produced. ,アイテム{0}:生産された{1}個。, Joining Date can not be greater than Leaving Date,参加日は出発日よりも大きくすることはできません, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},行#{0}:コストセンター{1}は会社{2}に属していません, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,行#{0}:作業オーダー{3}の{2}個の完成品に対して、操作{1}が完了していません。ジョブカード{4}を介して操作状況を更新してください。, Row #{0}: Payment document is required to complete the transaction,行#{0}:支払い文書は取引を完了するために必要です, +Row #{0}: Quantity for Item {1} cannot be zero.,行 # {0}: 品目 {1} の数量はゼロにできません, Row #{0}: Serial No {1} does not belong to Batch {2},行#{0}:シリアル番号{1}はバッチ{2}に属していません, Row #{0}: Service End Date cannot be before Invoice Posting Date,行#{0}:サービス終了日は請求書転記日より前にはできません, Row #{0}: Service Start Date cannot be greater than Service End Date,行#{0}:サービス開始日はサービス終了日より後にすることはできません, diff --git a/erpnext/translations/km.csv b/erpnext/translations/km.csv index 2740d7fc8a..dc97fbf15d 100644 --- a/erpnext/translations/km.csv +++ b/erpnext/translations/km.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,ជួរដេក {0}៖ សូមកំណត់នៅហេតុផលលើកលែងពន្ធក្នុងពន្ធលក់និងការគិតថ្លៃ។, Row {0}: Please set the Mode of Payment in Payment Schedule,ជួរដេក {0}៖ សូមកំណត់របៀបបង់ប្រាក់ក្នុងកាលវិភាគទូទាត់។, Row {0}: Please set the correct code on Mode of Payment {1},ជួរដេក {0}៖ សូមកំណត់លេខកូដត្រឹមត្រូវលើរបៀបបង់ប្រាក់ {1}, -Row {0}: Qty is mandatory,ជួរដេក {0}: Qty គឺជាការចាំបាច់, Row {0}: Quality Inspection rejected for item {1},ជួរដេក {0}: ការត្រួតពិនិត្យគុណភាពត្រូវបានច្រានចោលចំពោះធាតុ {1}, Row {0}: UOM Conversion Factor is mandatory,ជួរដេក {0}: UOM ការប្រែចិត្តជឿកត្តាគឺជាការចាំបាច់, Row {0}: select the workstation against the operation {1},ជួរដេក {0}: ជ្រើសកន្លែងធ្វើការប្រឆាំងនឹងប្រតិបត្តិការ {1}, @@ -3461,7 +3460,6 @@ Issue Type.,ប្រភេទបញ្ហា។, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",វាហាក់បីដូចជាមានបញ្ហាជាមួយការកំណត់រចនាសម្ព័ន្ធឆ្នូតរបស់ម៉ាស៊ីនមេ។ ក្នុងករណីមានការខកខានចំនួនទឹកប្រាក់នឹងត្រូវបានសងប្រាក់វិញទៅក្នុងគណនីរបស់អ្នក។, Item Reported,បានរាយការណ៍អំពីធាតុ។, Item listing removed,បានលុបបញ្ជីធាតុ, -Item quantity can not be zero,បរិមាណធាតុមិនអាចជាសូន្យ។, Item taxes updated,បានធ្វើបច្ចុប្បន្នភាពធាតុពន្ធ, Item {0}: {1} qty produced. ,ធាតុ {0}: {1} qty ផលិត។, Joining Date can not be greater than Leaving Date,កាលបរិច្ឆេទចូលរួមមិនអាចធំជាងកាលបរិច្ឆេទចាកចេញឡើយ, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},ជួរទី # {០}៖ មជ្ឈមណ្ឌលតម្លៃ {១} មិនមែនជារបស់ក្រុមហ៊ុន {២}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,ជួរទី # {០}៖ ប្រតិបត្តិការ {១} មិនត្រូវបានបញ្ចប់សម្រាប់ {២} នៃទំនិញបញ្ចប់ក្នុងលំដាប់ការងារ {៣} ទេ។ សូមធ្វើបច្ចុប្បន្នភាពស្ថានភាពប្រតិបត្តិការតាមរយៈកាតការងារ {៤} ។, Row #{0}: Payment document is required to complete the transaction,ជួរទី # {០}៖ ឯកសារទូទាត់ត្រូវបានទាមទារដើម្បីបញ្ចប់ប្រតិបត្តិការ, +Row #{0}: Quantity for Item {1} cannot be zero.,ជួរទី # {០}៖ បរិមាណធាតុ {1} មិនអាចជាសូន្យ។, Row #{0}: Serial No {1} does not belong to Batch {2},ជួរទី # {០}៖ សៀរៀលលេខ {១} មិនមែនជាកម្មសិទ្ធិរបស់បាច់ឡើយ {២}, Row #{0}: Service End Date cannot be before Invoice Posting Date,ជួរទី # {០}៖ កាលបរិច្ឆេទបញ្ចប់សេវាកម្មមិនអាចមុនកាលបរិច្ឆេទប្រកាសវិក្កយបត្រ, Row #{0}: Service Start Date cannot be greater than Service End Date,ជួរដេក # {0}៖ កាលបរិច្ឆេទចាប់ផ្តើមសេវាកម្មមិនអាចធំជាងកាលបរិច្ឆេទបញ្ចប់សេវាកម្មឡើយ, diff --git a/erpnext/translations/kn.csv b/erpnext/translations/kn.csv index 8b271682eb..21180365f5 100644 --- a/erpnext/translations/kn.csv +++ b/erpnext/translations/kn.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,ಸಾಲು {0}: ದಯವಿಟ್ಟು ಮಾರಾಟ ತೆರಿಗೆಗಳು ಮತ್ತು ಶುಲ್ಕಗಳಲ್ಲಿ ತೆರಿಗೆ ವಿನಾಯಿತಿ ಕಾರಣವನ್ನು ಹೊಂದಿಸಿ, Row {0}: Please set the Mode of Payment in Payment Schedule,ಸಾಲು {0}: ದಯವಿಟ್ಟು ಪಾವತಿ ವೇಳಾಪಟ್ಟಿಯಲ್ಲಿ ಪಾವತಿ ಮೋಡ್ ಅನ್ನು ಹೊಂದಿಸಿ, Row {0}: Please set the correct code on Mode of Payment {1},ಸಾಲು {0}: ದಯವಿಟ್ಟು ಸರಿಯಾದ ಕೋಡ್ ಅನ್ನು ಪಾವತಿ ಮೋಡ್‌ನಲ್ಲಿ ಹೊಂದಿಸಿ {1}, -Row {0}: Qty is mandatory,ರೋ {0}: ಪ್ರಮಾಣ ಕಡ್ಡಾಯ, Row {0}: Quality Inspection rejected for item {1},ಸಾಲು {0}: ಐಟಂಗೆ ಗುಣಮಟ್ಟ ಪರೀಕ್ಷೆ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ {1}, Row {0}: UOM Conversion Factor is mandatory,ಸಾಲು {0}: ಮೈಸೂರು ವಿಶ್ವವಿದ್ಯಾನಿಲದ ಪರಿವರ್ತನಾ ಕಾರಕ ಕಡ್ಡಾಯ, Row {0}: select the workstation against the operation {1},ಸಾಲು {0}: ಕಾರ್ಯಾಚರಣೆ ವಿರುದ್ಧ ಕಾರ್ಯಕ್ಷೇತ್ರವನ್ನು ಆಯ್ಕೆಮಾಡಿ {1}, @@ -3461,7 +3460,6 @@ Issue Type.,ಸಂಚಿಕೆ ಪ್ರಕಾರ., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","ಸರ್ವರ್ನ ಸ್ಟ್ರೈಪ್ ಕಾನ್ಫಿಗರೇಶನ್ನಲ್ಲಿ ಸಮಸ್ಯೆ ಇದೆ ಎಂದು ತೋರುತ್ತದೆ. ವೈಫಲ್ಯದ ಸಂದರ್ಭದಲ್ಲಿ, ನಿಮ್ಮ ಖಾತೆಗೆ ಹಣವನ್ನು ಮರುಪಾವತಿಸಲಾಗುತ್ತದೆ.", Item Reported,ಐಟಂ ವರದಿ ಮಾಡಲಾಗಿದೆ, Item listing removed,ಐಟಂ ಪಟ್ಟಿಯನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ, -Item quantity can not be zero,ಐಟಂ ಪ್ರಮಾಣ ಶೂನ್ಯವಾಗಿರಬಾರದು, Item taxes updated,ಐಟಂ ತೆರಿಗೆಗಳನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ, Item {0}: {1} qty produced. ,ಐಟಂ {0}: {1} qty ಉತ್ಪಾದಿಸಲಾಗಿದೆ., Joining Date can not be greater than Leaving Date,ಸೇರುವ ದಿನಾಂಕವು ಬಿಡುವ ದಿನಾಂಕಕ್ಕಿಂತ ಹೆಚ್ಚಿರಬಾರದು, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},ಸಾಲು # {0}: ವೆಚ್ಚ ಕೇಂದ್ರ {1 company ಕಂಪನಿಗೆ ಸೇರಿಲ್ಲ {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,ಸಾಲು # {0}: ಕೆಲಸದ ಆದೇಶ {3 in ನಲ್ಲಿ finished 2} ಕ್ವಿಟಿ ಮುಗಿದ ಸರಕುಗಳಿಗೆ ಕಾರ್ಯಾಚರಣೆ {1 complete ಪೂರ್ಣಗೊಂಡಿಲ್ಲ. ದಯವಿಟ್ಟು ಜಾಬ್ ಕಾರ್ಡ್ {4 via ಮೂಲಕ ಕಾರ್ಯಾಚರಣೆಯ ಸ್ಥಿತಿಯನ್ನು ನವೀಕರಿಸಿ., Row #{0}: Payment document is required to complete the transaction,ಸಾಲು # {0}: ವಹಿವಾಟನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಪಾವತಿ ಡಾಕ್ಯುಮೆಂಟ್ ಅಗತ್ಯವಿದೆ, +Row #{0}: Quantity for Item {1} cannot be zero.,ಸಾಲು # {0}: ಐಟಂ {1} ಪ್ರಮಾಣ ಶೂನ್ಯವಾಗಿರಬಾರದು, Row #{0}: Serial No {1} does not belong to Batch {2},ಸಾಲು # {0}: ಸರಣಿ ಸಂಖ್ಯೆ {1 B ಬ್ಯಾಚ್ {2 to ಗೆ ಸೇರಿಲ್ಲ, Row #{0}: Service End Date cannot be before Invoice Posting Date,ಸಾಲು # {0}: ಸರಕುಪಟ್ಟಿ ಪೋಸ್ಟ್ ಮಾಡುವ ದಿನಾಂಕಕ್ಕಿಂತ ಮೊದಲು ಸೇವೆಯ ಅಂತಿಮ ದಿನಾಂಕ ಇರಬಾರದು, Row #{0}: Service Start Date cannot be greater than Service End Date,ಸಾಲು # {0}: ಸೇವೆಯ ಪ್ರಾರಂಭ ದಿನಾಂಕವು ಸೇವಾ ಅಂತಿಮ ದಿನಾಂಕಕ್ಕಿಂತ ಹೆಚ್ಚಿರಬಾರದು, diff --git a/erpnext/translations/ko.csv b/erpnext/translations/ko.csv index edd3f2731f..4e10a6c21d 100644 --- a/erpnext/translations/ko.csv +++ b/erpnext/translations/ko.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,행 {0} : 세금 면제 사유로 판매 세 및 수수료로 설정하십시오., Row {0}: Please set the Mode of Payment in Payment Schedule,행 {0} : 지급 일정에 지급 방식을 설정하십시오., Row {0}: Please set the correct code on Mode of Payment {1},행 {0} : 결제 방법 {1}에 올바른 코드를 설정하십시오., -Row {0}: Qty is mandatory,행 {0} : 수량은 필수입니다, Row {0}: Quality Inspection rejected for item {1},행 {0} : 항목 {1}에 대해 품질 검사가 거부되었습니다., Row {0}: UOM Conversion Factor is mandatory,행 {0} : UOM 변환 계수는 필수입니다, Row {0}: select the workstation against the operation {1},행 {0} : 작업 {1}에 대한 워크 스테이션을 선택하십시오., @@ -3461,7 +3460,6 @@ Issue Type.,문제 유형., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",서버의 스트라이프 구성에 문제가있는 것으로 보입니다. 실패한 경우 귀하의 계좌로 금액이 환급됩니다., Item Reported,보고 된 품목, Item listing removed,상품 목록이 삭제되었습니다., -Item quantity can not be zero,항목 수량은 0 일 수 없습니다., Item taxes updated,상품 세금 업데이트, Item {0}: {1} qty produced. ,항목 {0} : {1} 수량이 생산되었습니다., Joining Date can not be greater than Leaving Date,가입 날짜는 떠나는 날짜보다 클 수 없습니다, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},행 # {0} : 코스트 센터 {1}이 (가) 회사 {2}에 속하지 않습니다, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,행 # {0} : {2} 작업 주문 {3}의 완제품 수량에 대해 {1} 작업이 완료되지 않았습니다. 작업 카드 {4}를 통해 작업 상태를 업데이트하십시오., Row #{0}: Payment document is required to complete the transaction,행 번호 {0} : 거래를 완료하려면 지불 문서가 필요합니다., +Row #{0}: Quantity for Item {1} cannot be zero.,행 # {0}: 항목 {1}의 수량은 0일 수 없습니다., Row #{0}: Serial No {1} does not belong to Batch {2},행 # {0} : 일련 번호 {1}이 (가) 배치 {2}에 속하지 않습니다, Row #{0}: Service End Date cannot be before Invoice Posting Date,행 # {0} : 서비스 종료 날짜는 송장 전기 일 이전 일 수 없습니다, Row #{0}: Service Start Date cannot be greater than Service End Date,행 # {0} : 서비스 시작 날짜는 서비스 종료 날짜보다 클 수 없습니다., diff --git a/erpnext/translations/ku.csv b/erpnext/translations/ku.csv index e18ce45132..8b7db2a740 100644 --- a/erpnext/translations/ku.csv +++ b/erpnext/translations/ku.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Row {0}: Ji kerema xwe Sedemek Tişta Qebûlkirina Bacê Li Bac û Firotên Firotanê, Row {0}: Please set the Mode of Payment in Payment Schedule,Row {0}: Ji kerema xwe Modela Pêvekirinê di Pêveka Pevçûnê de bicîh bikin, Row {0}: Please set the correct code on Mode of Payment {1},Row {0}: Ji kerema xwe koda rastê li ser Mode-ya Peymana {1}, -Row {0}: Qty is mandatory,Row {0}: Qty wêneke e, Row {0}: Quality Inspection rejected for item {1},Row {0}: Teftîşa Kalîteya ji bo hilbijêre {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: UOM Factor Converter wêneke e, Row {0}: select the workstation against the operation {1},Row {0}: Li dijî xebatê {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Cureya pirsgirêkê., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Ew xuya dike ku pirsgirêkek bi sazkirina pergala serverê heye. Di rewşeke neyê de, hejmar dê dê hesabê we vegerîne.", Item Reported,Babetê Hatiye rapor kirin, Item listing removed,Lîsteya kêr hatî rakirin, -Item quantity can not be zero,Hêjmara tiştên ne dikare bibe zero, Item taxes updated,Bacê tiştên nûvekirî, Item {0}: {1} qty produced. ,Babetê {0}: {1} qty hilberandin., Joining Date can not be greater than Leaving Date,Tevlêbûna Dîrokê nikare ji Dîroka Veqetînê mezintir be, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Row # {0}: Navenda Cost {1} nabe ku pargîdaniya} 2, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Row # {0}: Operasyon {1} ji bo {2} qty ya tiştên qedandî di Fermana Kar {3 not de temam nabe. Ji kerema xwe rewşa karûbarê bi Karta Kar Job 4 update nûve bikin., Row #{0}: Payment document is required to complete the transaction,Row # {0}: Ji bo temamkirina danûstendinê belgeya dayînê hewce ye, +Row #{0}: Quantity for Item {1} cannot be zero.,Rêz # {0}: Hêjmara tiştên {1} ne dikare bibe zero., Row #{0}: Serial No {1} does not belong to Batch {2},Row # {0}: Serial No {1} ne Batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Row # {0}: Dîroka Dawiya Xizmet nikare Berî Dîroka ingandina Tevneyê be, Row #{0}: Service Start Date cannot be greater than Service End Date,Row # {0}: Dîroka Destpêkirina Karûbarê ji Dîroka Dawiya Xizmet nikare mezin be, diff --git a/erpnext/translations/lo.csv b/erpnext/translations/lo.csv index 46acd22939..4658f6d0ab 100644 --- a/erpnext/translations/lo.csv +++ b/erpnext/translations/lo.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,ແຖວ {0}: ກະລຸນາ ກຳ ນົດຢູ່ໃນເຫດຜົນການຍົກເວັ້ນພາສີໃນການເກັບອາກອນແລະຄ່າບໍລິການ, Row {0}: Please set the Mode of Payment in Payment Schedule,ແຖວ {0}: ກະລຸນາ ກຳ ນົດຮູບແບບການຈ່າຍເງິນໃນຕາຕະລາງການຈ່າຍເງິນ, Row {0}: Please set the correct code on Mode of Payment {1},ແຖວ {0}: ກະລຸນາຕັ້ງລະຫັດທີ່ຖືກຕ້ອງໃນຮູບແບບການຈ່າຍເງິນ {1}, -Row {0}: Qty is mandatory,ຕິດຕໍ່ກັນ {0}: ຈໍານວນເປັນການບັງຄັບ, Row {0}: Quality Inspection rejected for item {1},ແຖວ {0}: ການກວດກາຄຸນນະພາບຖືກປະຕິເສດ ສຳ ລັບສິນຄ້າ {1}, Row {0}: UOM Conversion Factor is mandatory,ຕິດຕໍ່ກັນ {0}: UOM ປັດໄຈການແປງເປັນການບັງຄັບ, Row {0}: select the workstation against the operation {1},ແຖວ {0}: ເລືອກເອົາສະຖານທີ່ເຮັດວຽກຕໍ່ການດໍາເນີນງານ {1}, @@ -3461,7 +3460,6 @@ Issue Type.,ປະເພດອອກ., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","ມັນເບິ່ງຄືວ່າມີບັນຫາກັບການກໍານົດເສັ້ນດ່າງຂອງເຄື່ອງແມ່ຂ່າຍ. ໃນກໍລະນີຂອງຄວາມລົ້ມເຫຼວ, ຈໍານວນເງິນຈະໄດ້ຮັບການຊໍາລະກັບບັນຊີຂອງທ່ານ.", Item Reported,ລາຍງານລາຍການ, Item listing removed,ລາຍການຖືກລຶບອອກແລ້ວ, -Item quantity can not be zero,ປະລິມານສິນຄ້າບໍ່ສາມາດເປັນສູນ, Item taxes updated,ພາສີລາຍການຖືກປັບປຸງ, Item {0}: {1} qty produced. ,ລາຍການ {0}: {1} qty ຜະລິດ., Joining Date can not be greater than Leaving Date,ວັນເຂົ້າຮ່ວມບໍ່ສາມາດໃຫຍ່ກວ່າວັນທີ່ອອກຈາກວັນທີ, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},ແຖວ # {0}: ສູນຄ່າໃຊ້ຈ່າຍ {1} ບໍ່ຂຶ້ນກັບບໍລິສັດ {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,ແຖວ # {0}: ການ ດຳ ເນີນງານ {1} ບໍ່ໄດ້ ສຳ ເລັດ ສຳ ລັບ {2} ສິນຄ້າ ສຳ ເລັດຮູບ ຈຳ ນວນຫຼາຍໃນ ຄຳ ສັ່ງເຮັດວຽກ {3}. ກະລຸນາປັບປຸງສະຖານະການ ດຳ ເນີນງານຜ່ານບັດວຽກ {4}., Row #{0}: Payment document is required to complete the transaction,ແຖວ # {0}: ຕ້ອງມີເອກະສານຈ່າຍເງິນເພື່ອເຮັດການເຮັດທຸລະ ກຳ ສຳ ເລັດ, +Row #{0}: Quantity for Item {1} cannot be zero.,ແຖວ # {0}: ປະລິມານສິນຄ້າ {1} ບໍ່ສາມາດເປັນສູນ, Row #{0}: Serial No {1} does not belong to Batch {2},ແຖວ # {0}: Serial No {1} ບໍ່ຂຶ້ນກັບ Batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,ແຖວ # {0}: ວັນສິ້ນສຸດການບໍລິການບໍ່ສາມາດກ່ອນວັນທີອອກໃບເກັບເງິນ, Row #{0}: Service Start Date cannot be greater than Service End Date,ແຖວ # {0}: ວັນທີເລີ່ມການບໍລິການບໍ່ສາມາດໃຫຍ່ກວ່າວັນສິ້ນສຸດການບໍລິການ, diff --git a/erpnext/translations/lt.csv b/erpnext/translations/lt.csv index 292c9d88e2..721be8d064 100644 --- a/erpnext/translations/lt.csv +++ b/erpnext/translations/lt.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,{0} eilutė: nustatykite pardavimo mokesčių ir rinkliavų atleidimo nuo mokesčių priežastį, Row {0}: Please set the Mode of Payment in Payment Schedule,{0} eilutė: nurodykite mokėjimo režimą mokėjimo grafike, Row {0}: Please set the correct code on Mode of Payment {1},{0} eilutė: nurodykite teisingą kodą Mokėjimo būde {1}, -Row {0}: Qty is mandatory,Eilutės {0}: Kiekis yra privalomi, Row {0}: Quality Inspection rejected for item {1},{0} eilutė: {1} elemento kokybės inspekcija atmesta, Row {0}: UOM Conversion Factor is mandatory,Eilutės {0}: UOM konversijos faktorius yra privalomas, Row {0}: select the workstation against the operation {1},Eilutė {0}: pasirinkite darbo vietą prieš operaciją {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Išleidimo tipas., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Atrodo, kad yra problema dėl serverio juostos konfigūracijos. Nepavykus, suma bus grąžinta į jūsų sąskaitą.", Item Reported,Elementas praneštas, Item listing removed,Elementų sąrašas pašalintas, -Item quantity can not be zero,Prekės kiekis negali būti lygus nuliui, Item taxes updated,Prekės mokesčiai atnaujinti, Item {0}: {1} qty produced. ,Prekė {0}: {1} kiekis pagamintas., Joining Date can not be greater than Leaving Date,Prisijungimo data negali būti didesnė nei išvykimo data, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},{0} eilutė: Išlaidų centras {1} nepriklauso įmonei {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"Nr. {0}: {1} operacija {1} neužbaigta, kai užsakytas {3} kiekis paruoštų prekių. Atnaujinkite operacijos būseną naudodamiesi darbo kortele {4}.", Row #{0}: Payment document is required to complete the transaction,# 0 eilutė: mokėjimo operacijai atlikti reikalingas mokėjimo dokumentas, +Row #{0}: Quantity for Item {1} cannot be zero.,# {0} eilutė: Prekės {1} kiekis negali būti lygus nuliui., Row #{0}: Serial No {1} does not belong to Batch {2},{0} eilutė: serijos Nr. {1} nepriklauso {2} siuntai, Row #{0}: Service End Date cannot be before Invoice Posting Date,# 0 eilutė: Paslaugos pabaigos data negali būti anksčiau nei sąskaitos faktūros paskelbimo data, Row #{0}: Service Start Date cannot be greater than Service End Date,# 0 eilutė: Paslaugos pradžios data negali būti didesnė už paslaugos pabaigos datą, diff --git a/erpnext/translations/lv.csv b/erpnext/translations/lv.csv index 52641b25af..46e577ba52 100644 --- a/erpnext/translations/lv.csv +++ b/erpnext/translations/lv.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"{0} rinda: lūdzu, iestatiet pārdošanas nodokļa un nodevu atbrīvojuma no nodokļa iemeslu", Row {0}: Please set the Mode of Payment in Payment Schedule,"{0} rinda: lūdzu, maksājuma grafikā iestatiet maksājuma režīmu", Row {0}: Please set the correct code on Mode of Payment {1},"{0} rinda: lūdzu, maksājuma režīmā {1} iestatiet pareizo kodu.", -Row {0}: Qty is mandatory,Rinda {0}: Daudz ir obligāta, Row {0}: Quality Inspection rejected for item {1},{0} rinda: {1} vienumam noraidīta kvalitātes pārbaude, Row {0}: UOM Conversion Factor is mandatory,Row {0}: UOM Conversion Factor ir obligāta, Row {0}: select the workstation against the operation {1},Rinda {0}: izvēlieties darbstaciju pret operāciju {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Izdošanas veids., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Šķiet, ka pastāv servera joslas konfigurācijas problēma. Neveiksmes gadījumā summa tiks atmaksāta jūsu kontā.", Item Reported,Paziņots vienums, Item listing removed,Vienumu saraksts ir noņemts, -Item quantity can not be zero,Vienības daudzums nedrīkst būt nulle, Item taxes updated,Vienumu nodokļi ir atjaunināti, Item {0}: {1} qty produced. ,Vienība {0}: {1} saražots, Joining Date can not be greater than Leaving Date,Pievienošanās datums nevar būt lielāks par aiziešanas datumu, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},{0}. Rinda: izmaksu centrs {1} nepieder uzņēmumam {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"{0}. Rinda: operācija {1} nav pabeigta {2} darba pasūtījumā norādīto gatavo preču daudzumam. Lūdzu, atjauniniet darbības statusu, izmantojot darba karti {4}.", Row #{0}: Payment document is required to complete the transaction,"# 0. Rinda: maksājuma dokuments ir nepieciešams, lai pabeigtu darījumu", +Row #{0}: Quantity for Item {1} cannot be zero.,# {0}. Rinda: Vienības {1} daudzums nedrīkst būt nulle., Row #{0}: Serial No {1} does not belong to Batch {2},{0}. Rinda: kārtas numurs {1} nepieder pie {2} partijas, Row #{0}: Service End Date cannot be before Invoice Posting Date,# 0. Rinda: pakalpojuma beigu datums nevar būt pirms rēķina nosūtīšanas datuma, Row #{0}: Service Start Date cannot be greater than Service End Date,# 0. Rinda: pakalpojuma sākuma datums nevar būt lielāks par pakalpojuma beigu datumu, diff --git a/erpnext/translations/mk.csv b/erpnext/translations/mk.csv index 0a290198cc..3742ad2522 100644 --- a/erpnext/translations/mk.csv +++ b/erpnext/translations/mk.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"Ред {0}: Ве молиме, поставете ја причината за ослободување од данок во даноците на продажба и наплата", Row {0}: Please set the Mode of Payment in Payment Schedule,Ред {0}: Поставете го начинот на плаќање во распоредот за плаќање, Row {0}: Please set the correct code on Mode of Payment {1},Ред {0}: Ве молиме поставете го точниот код на начинот на плаќање {1}, -Row {0}: Qty is mandatory,Ред {0}: Количина е задолжително, Row {0}: Quality Inspection rejected for item {1},Ред {0}: Инспекција за квалитет одбиена за ставка {1}, Row {0}: UOM Conversion Factor is mandatory,Ред {0}: UOM конверзија фактор е задолжително, Row {0}: select the workstation against the operation {1},Ред {0}: изберете работна станица против операцијата {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Тип на издание., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Се чини дека постои проблем со конфигурацијата на шаблонот на серверот. Во случај на неуспех, износот ќе ви биде вратен на вашата сметка.", Item Reported,Објавено на точка, Item listing removed,Листата со предмети е отстранета, -Item quantity can not be zero,Количината на артикалот не може да биде нула, Item taxes updated,Ажурираат даноците за артиклите, Item {0}: {1} qty produced. ,Ставка {0}: {1} количество произведено., Joining Date can not be greater than Leaving Date,Датумот на пристапување не може да биде поголем од датумот на напуштање, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Ред # {0}: Центар за трошоци {1} не припаѓа на компанијата {2, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"Ред # {0}: Операцијата {1} не е завршена за {2 ty количина на готови производи во редот на работа {3. Ве молиме, ажурирајте го статусот на работењето преку Job 4 Card картичка за работа.", Row #{0}: Payment document is required to complete the transaction,Ред # {0}: Потребен е документ за плаќање за да се заврши трансакцијата, +Row #{0}: Quantity for Item {1} cannot be zero.,Ред # {0}: Количината на артикалот {1} не може да биде нула, Row #{0}: Serial No {1} does not belong to Batch {2},Ред # {0}: Сериски бр {1} не припаѓа на Серија {2, Row #{0}: Service End Date cannot be before Invoice Posting Date,Ред # {0}: Датумот на завршување на услугата не може да биде пред датумот на објавување на фактурата, Row #{0}: Service Start Date cannot be greater than Service End Date,Ред # {0}: Датумот на започнување со услугата не може да биде поголем од датумот на завршување на услугата, diff --git a/erpnext/translations/ml.csv b/erpnext/translations/ml.csv index 04af8ab1ad..bc3df86b57 100644 --- a/erpnext/translations/ml.csv +++ b/erpnext/translations/ml.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,വരി {0}: വിൽപ്പന നികുതികളിലും നിരക്കുകളിലും നികുതി ഇളവ് കാരണം സജ്ജമാക്കുക, Row {0}: Please set the Mode of Payment in Payment Schedule,വരി {0}: പേയ്‌മെന്റ് ഷെഡ്യൂളിൽ പേയ്‌മെന്റ് മോഡ് സജ്ജമാക്കുക, Row {0}: Please set the correct code on Mode of Payment {1},വരി {0}: പേയ്‌മെന്റ് മോഡിൽ ശരിയായ കോഡ് ദയവായി സജ്ജമാക്കുക {1}, -Row {0}: Qty is mandatory,വരി {0}: Qty നിർബന്ധമായും, Row {0}: Quality Inspection rejected for item {1},വരി {0}: ഇനം {1} എന്നതിനുള്ള ക്വാളിറ്റി ഇൻസെക്ഷൻ നിരസിച്ചു, Row {0}: UOM Conversion Factor is mandatory,വരി {0}: UOM പരിവർത്തന ഫാക്ടർ നിർബന്ധമായും, Row {0}: select the workstation against the operation {1},വരി {0}: against 1 operation പ്രവർത്തനത്തിനെതിരെ വർക്ക്സ്റ്റേഷൻ തിരഞ്ഞെടുക്കുക, @@ -3461,7 +3460,6 @@ Issue Type.,ലക്കം തരം., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","സെർവറിന്റെ സ്ട്രൈക്ക് കോൺഫിഗറേഷനിൽ ഒരു പ്രശ്നമുണ്ടെന്ന് തോന്നുന്നു. പരാജയപ്പെട്ടാൽ, നിങ്ങളുടെ അക്കൗണ്ടിലേക്ക് തുക തിരികെ നൽകും.", Item Reported,ഇനം റിപ്പോർട്ടുചെയ്‌തു, Item listing removed,ഇന ലിസ്റ്റിംഗ് നീക്കംചെയ്‌തു, -Item quantity can not be zero,ഇനത്തിന്റെ അളവ് പൂജ്യമാകരുത്, Item taxes updated,ഇന നികുതികൾ അപ്‌ഡേറ്റുചെയ്‌തു, Item {0}: {1} qty produced. ,ഇനം {0}: {1} qty നിർമ്മിച്ചു., Joining Date can not be greater than Leaving Date,ചേരുന്ന തീയതി വിടുന്ന തീയതിയെക്കാൾ വലുതായിരിക്കരുത്, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},വരി # {0}: കോസ്റ്റ് സെന്റർ {1 company കമ്പനിയുടേതല്ല {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,വരി # {0}: വർക്ക് ഓർഡർ {3 in ലെ finished 2} qty പൂർത്തിയായ സാധനങ്ങൾക്കായി {1 operation പ്രവർത്തനം പൂർത്തിയായിട്ടില്ല. ജോബ് കാർഡ് via 4 via വഴി പ്രവർത്തന നില അപ്‌ഡേറ്റുചെയ്യുക., Row #{0}: Payment document is required to complete the transaction,വരി # {0}: ഇടപാട് പൂർത്തിയാക്കാൻ പേയ്‌മെന്റ് പ്രമാണം ആവശ്യമാണ്, +Row #{0}: Quantity for Item {1} cannot be zero.,വരി # {0}: ഇനം {1} ന്റെ അളവ് പൂജ്യമാകരുത്, Row #{0}: Serial No {1} does not belong to Batch {2},വരി # {0}: സീരിയൽ നമ്പർ {1 B ബാച്ച് {2 to ൽ ഉൾപ്പെടുന്നില്ല, Row #{0}: Service End Date cannot be before Invoice Posting Date,വരി # {0}: സേവന അവസാന തീയതി ഇൻവോയ്സ് പോസ്റ്റുചെയ്യുന്ന തീയതിക്ക് മുമ്പായിരിക്കരുത്, Row #{0}: Service Start Date cannot be greater than Service End Date,വരി # {0}: സേവന ആരംഭ തീയതി സേവന അവസാന തീയതിയേക്കാൾ കൂടുതലാകരുത്, diff --git a/erpnext/translations/mr.csv b/erpnext/translations/mr.csv index 785ab65c54..3059182401 100644 --- a/erpnext/translations/mr.csv +++ b/erpnext/translations/mr.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,पंक्ती {0}: कृपया विक्री कर आणि शुल्कामध्ये कर सूट कारण सेट करा, Row {0}: Please set the Mode of Payment in Payment Schedule,पंक्ती {0}: कृपया देय वेळापत्रकात देय मोड सेट करा, Row {0}: Please set the correct code on Mode of Payment {1},पंक्ती {0}: कृपया देयक मोडवर योग्य कोड सेट करा {1}, -Row {0}: Qty is mandatory,रो {0}: Qty अनिवार्य आहे, Row {0}: Quality Inspection rejected for item {1},पंक्ती {0}: आयटमसाठी गुणवत्ता तपासणी नाकारली {1}, Row {0}: UOM Conversion Factor is mandatory,रो {0}: UOM रुपांतर फॅक्टर अनिवार्य आहे, Row {0}: select the workstation against the operation {1},पंक्ती {0}: कार्याच्या विरूद्ध वर्कस्टेशन निवडा {1}, @@ -3461,7 +3460,6 @@ Issue Type.,इश्यूचा प्रकार, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","असे दिसते की सर्व्हरच्या स्ट्रीप कॉन्फिगरेशनमध्ये एक समस्या आहे. अयशस्वी झाल्यास, रक्कम आपल्या खात्यात परत केली जाईल.", Item Reported,आयटम नोंदविला, Item listing removed,आयटम सूची काढली, -Item quantity can not be zero,आयटमचे प्रमाण शून्य असू शकत नाही, Item taxes updated,आयटम कर अद्यतनित केला, Item {0}: {1} qty produced. ,आयटम {0}: produced 1} क्विट उत्पादन केले., Joining Date can not be greater than Leaving Date,सामील होण्याची तारीख सोडण्याची तारीख सोडून जास्त असू शकत नाही, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},पंक्ती # {0}: किंमत केंद्र {1 company कंपनी to 2 belong चे नाही, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,पंक्ती # {0}: कार्य ऑर्डर {3 in मध्ये तयार केलेल्या वस्तूंच्या {2} क्वाइटीसाठी ऑपरेशन {1} पूर्ण झाले नाही. कृपया जॉब कार्ड via 4 via द्वारे ऑपरेशन स्थिती अद्यतनित करा., Row #{0}: Payment document is required to complete the transaction,पंक्ती # {0}: व्यवहार पूर्ण करण्यासाठी पेमेंट दस्तऐवज आवश्यक आहे, +Row #{0}: Quantity for Item {1} cannot be zero.,पंक्ती # {0}: आयटम {1} चे प्रमाण शून्य असू शकत नाही, Row #{0}: Serial No {1} does not belong to Batch {2},पंक्ती # {0}: अनुक्रमांक {1 B बॅच belong 2 belong चे नाही, Row #{0}: Service End Date cannot be before Invoice Posting Date,पंक्ती # {0}: सेवा समाप्ती तारीख चलन पोस्टिंग तारखेच्या आधीची असू शकत नाही, Row #{0}: Service Start Date cannot be greater than Service End Date,पंक्ती # {0}: सेवा प्रारंभ तारीख सेवा समाप्तीच्या तारखेपेक्षा मोठी असू शकत नाही, diff --git a/erpnext/translations/ms.csv b/erpnext/translations/ms.csv index db20d3c054..d33f9b8ca4 100644 --- a/erpnext/translations/ms.csv +++ b/erpnext/translations/ms.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Baris {0}: Sila tetapkan pada Alasan Pengecualian Cukai dalam Cukai Jualan dan Caj, Row {0}: Please set the Mode of Payment in Payment Schedule,Baris {0}: Sila tetapkan Mod Pembayaran dalam Jadual Pembayaran, Row {0}: Please set the correct code on Mode of Payment {1},Baris {0}: Sila tetapkan kod yang betul pada Mod Pembayaran {1}, -Row {0}: Qty is mandatory,Row {0}: Qty adalah wajib, Row {0}: Quality Inspection rejected for item {1},Baris {0}: Pemeriksaan Kualiti ditolak untuk item {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: Faktor Penukaran UOM adalah wajib, Row {0}: select the workstation against the operation {1},Baris {0}: pilih stesen kerja terhadap operasi {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Jenis Terbitan., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Nampaknya terdapat masalah dengan tatarajah jalur pelayan. Sekiranya gagal, amaun akan dikembalikan ke akaun anda.", Item Reported,Item Dilaporkan, Item listing removed,Penyenaraian item dibuang, -Item quantity can not be zero,Kuantiti item tidak boleh menjadi sifar, Item taxes updated,Cukai item dikemas kini, Item {0}: {1} qty produced. ,Perkara {0}: {1} qty dihasilkan., Joining Date can not be greater than Leaving Date,Tarikh Bergabung tidak boleh lebih besar daripada Tarikh Meninggalkan, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Baris # {0}: Pusat Kos {1} tidak tergolong dalam syarikat {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Baris # {0}: Operasi {1} tidak siap untuk {2} qty barangan siap dalam Perintah Kerja {3}. Sila kemas kini status operasi melalui Job Job {4}., Row #{0}: Payment document is required to complete the transaction,Baris # {0}: Dokumen pembayaran diperlukan untuk menyelesaikan transaksi, +Row #{0}: Quantity for Item {1} cannot be zero.,Baris # {0}: Kuantiti item {1} tidak boleh menjadi sifar., Row #{0}: Serial No {1} does not belong to Batch {2},Baris # {0}: Siri Tidak {1} tidak tergolong dalam Batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Baris # {0}: Tarikh Akhir Perkhidmatan tidak boleh sebelum Tarikh Penyerahan Invois, Row #{0}: Service Start Date cannot be greater than Service End Date,Baris # {0}: Tarikh Mula Perkhidmatan tidak boleh melebihi Tarikh Akhir Perkhidmatan, diff --git a/erpnext/translations/my.csv b/erpnext/translations/my.csv index f4b8676fee..c447e663d4 100644 --- a/erpnext/translations/my.csv +++ b/erpnext/translations/my.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,အတန်း {0}: အရောင်းအခွန်နှင့်စွပ်စွဲချက်အတွက်အခွန်ကင်းလွတ်ခွင့်အကြောင်းပြချက်မှာသတ်မှတ်ထား ကျေးဇူးပြု., Row {0}: Please set the Mode of Payment in Payment Schedule,အတန်း {0}: ငွေပေးချေမှုရမည့်ဇယားများတွင်ငွေပေးချေ၏ Mode ကိုသတ်မှတ်ပေးပါ, Row {0}: Please set the correct code on Mode of Payment {1},အတန်း {0}: ငွေပေးချေမှုရမည့်၏ Mode ကို {1} အပေါ်မှန်ကန်သောကုဒ်သတ်မှတ်ပေးပါ, -Row {0}: Qty is mandatory,row {0}: Qty မသင်မနေရ, Row {0}: Quality Inspection rejected for item {1},အတန်း {0}: အရည်အသွေးစစ်ဆေးရေးကို item များအတွက် {1} ပယ်ချ, Row {0}: UOM Conversion Factor is mandatory,row {0}: UOM ကူးပြောင်းခြင်း Factor နဲ့မဖြစ်မနေဖြစ်ပါသည်, Row {0}: select the workstation against the operation {1},အတန်း {0}: စစ်ဆင်ရေး {1} ဆန့်ကျင်ကို Workstation ကို select, @@ -3461,7 +3460,6 @@ Issue Type.,ပြဿနာအမျိုးအစား။, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","ဒါဟာဆာဗာ၏အစင်း configuration နဲ့အတူပြဿနာရှိကွောငျးပုံရသည်။ ကျရှုံးခြင်း၏အမှု၌, ပမာဏကိုသင့်အကောင့်ပြန်အမ်းရပါလိမ့်မယ်။", Item Reported,item နားဆင်နိုင်ပါတယ်, Item listing removed,စာရင်းစာရင်းဖယ်ရှားခဲ့သည်, -Item quantity can not be zero,item အရေအတွက်သုညမဖွစျနိုငျ, Item taxes updated,ပစ္စည်းအခွန် updated, Item {0}: {1} qty produced. ,item {0}: ထုတ်လုပ် {1} အရေအတွက်။, Joining Date can not be greater than Leaving Date,ရက်စွဲတွဲထားခြင်းသည်ထွက်ခွာသည့်နေ့ထက်မကြီးနိုင်ပါ, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},တန်း # {0} - ကုန်ကျစရိတ်စင်တာ {1} သည်ကုမ္ပဏီ {2} နှင့်မသက်ဆိုင်ပါ။, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,အတန်း # {0}: စစ်ဆင်ရေး {1} လုပ်ငန်းခွင်အမိန့် {3} အတွက်ချောကုန်စည် {2} အရည်အတွက်အဘို့အပြီးစီးခဲ့သည်မဟုတ်။ ယောဘသည် Card ကို {4} ကနေတဆင့်စစ်ဆင်ရေး status ကို update လုပ်ပါ။, Row #{0}: Payment document is required to complete the transaction,အတန်း # {0}: ငွေပေးချေမှုရမည့်စာရွက်စာတမ်းငွေပေးငွေယူဖြည့်စွက်ရန်လိုအပ်ပါသည်, +Row #{0}: Quantity for Item {1} cannot be zero.,အတန်း # {0}: item {1} အရေအတွက်သုညမဖွစျနိုငျ, Row #{0}: Serial No {1} does not belong to Batch {2},Row # {0} - Serial No {1} သည် Batch {2} နှင့်မသက်ဆိုင်ပါ။, Row #{0}: Service End Date cannot be before Invoice Posting Date,တန်း # {0} - ငွေတောင်းခံလွှာတင်သည့်နေ့မတိုင်မီဝန်ဆောင်မှုအဆုံးနေ့မဖြစ်နိုင်ပါ, Row #{0}: Service Start Date cannot be greater than Service End Date,Row # {0}: Service Start Date သည် Service End Date ထက်မကြီးနိုင်ပါ, diff --git a/erpnext/translations/nl.csv b/erpnext/translations/nl.csv index 1778c8044a..83632dfe5b 100644 --- a/erpnext/translations/nl.csv +++ b/erpnext/translations/nl.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Rij {0}: Stel in op Belastingvrijstellingsreden in omzetbelasting en kosten, Row {0}: Please set the Mode of Payment in Payment Schedule,Rij {0}: stel de Betalingswijze in Betalingsschema in, Row {0}: Please set the correct code on Mode of Payment {1},Rij {0}: stel de juiste code in op Betalingswijze {1}, -Row {0}: Qty is mandatory,Rij {0}: aantal is verplicht, Row {0}: Quality Inspection rejected for item {1},Rij {0}: kwaliteitscontrole afgewezen voor artikel {1}, Row {0}: UOM Conversion Factor is mandatory,Rij {0}: Verpakking Conversie Factor is verplicht, Row {0}: select the workstation against the operation {1},Rij {0}: selecteer het werkstation tegen de bewerking {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Soort probleem., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Het lijkt erop dat er een probleem is met de streepconfiguratie van de server. In het geval van een fout, wordt het bedrag teruggestort op uw account.", Item Reported,Artikel gemeld, Item listing removed,Itemvermelding verwijderd, -Item quantity can not be zero,Artikelhoeveelheid kan niet nul zijn, Item taxes updated,Artikelbelastingen bijgewerkt, Item {0}: {1} qty produced. ,Artikel {0}: {1} aantal geproduceerd., Joining Date can not be greater than Leaving Date,Inschrijvingsdatum kan niet groter zijn dan de uittredingsdatum, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Rij # {0}: Kostenplaats {1} hoort niet bij bedrijf {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Rij # {0}: bewerking {1} is niet voltooid voor {2} aantal voltooide goederen in werkorder {3}. Werk de bedieningsstatus bij via opdrachtkaart {4}., Row #{0}: Payment document is required to complete the transaction,Rij # {0}: Betalingsdocument is vereist om de transactie te voltooien, +Row #{0}: Quantity for Item {1} cannot be zero.,Rij # {0}: Artikelhoeveelheid voor item {1} kan niet nul zijn., Row #{0}: Serial No {1} does not belong to Batch {2},Rij # {0}: Serienummer {1} hoort niet bij Batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Rij # {0}: Einddatum van de service kan niet vóór de boekingsdatum van de factuur liggen, Row #{0}: Service Start Date cannot be greater than Service End Date,Rij # {0}: Service startdatum kan niet groter zijn dan service einddatum, diff --git a/erpnext/translations/no.csv b/erpnext/translations/no.csv index 542217afe7..50af62ff4b 100644 --- a/erpnext/translations/no.csv +++ b/erpnext/translations/no.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Rad {0}: Vennligst angi grunn for skattefritak i moms og avgifter, Row {0}: Please set the Mode of Payment in Payment Schedule,Rad {0}: Angi betalingsmåte i betalingsplanen, Row {0}: Please set the correct code on Mode of Payment {1},Rad {0}: Angi riktig kode på betalingsmåte {1}, -Row {0}: Qty is mandatory,Rad {0}: Antall er obligatorisk, Row {0}: Quality Inspection rejected for item {1},Rad {0}: Kvalitetskontroll avvist for varen {1}, Row {0}: UOM Conversion Factor is mandatory,Rad {0}: målenheter omregningsfaktor er obligatorisk, Row {0}: select the workstation against the operation {1},Row {0}: velg arbeidsstasjonen mot operasjonen {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Utgavetype., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",Det ser ut til at det er et problem med serverens stripekonfigurasjon. I tilfelle feil blir beløpet refundert til kontoen din., Item Reported,Artikkel rapportert, Item listing removed,Vareoppføringen er fjernet, -Item quantity can not be zero,Varenummer kan ikke være null, Item taxes updated,Vareskatter oppdatert, Item {0}: {1} qty produced. ,Vare {0}: {1} antall produsert., Joining Date can not be greater than Leaving Date,Deltagelsesdato kan ikke være større enn Leaving Date, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Rad # {0}: Kostnadssenter {1} tilhører ikke selskapet {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Rad # {0}: Betjening {1} er ikke fullført for {2} antall ferdige varer i arbeidsordre {3}. Oppdater driftsstatus via Jobbkort {4}., Row #{0}: Payment document is required to complete the transaction,Rad # {0}: Betalingsdokument er påkrevd for å fullføre transaksjonen, +Row #{0}: Quantity for Item {1} cannot be zero.,Rad #{0}: Varenummer {1} kan ikke være null., Row #{0}: Serial No {1} does not belong to Batch {2},Rad # {0}: Serienummer {1} hører ikke til gruppe {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Rad nr. {0}: Sluttdato for service kan ikke være før faktureringsdato, Row #{0}: Service Start Date cannot be greater than Service End Date,Rad # {0}: Service-startdato kan ikke være større enn sluttidspunkt for tjeneste, diff --git a/erpnext/translations/pl.csv b/erpnext/translations/pl.csv index 247d0bae11..9d1f528aa2 100644 --- a/erpnext/translations/pl.csv +++ b/erpnext/translations/pl.csv @@ -2258,7 +2258,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Wiersz {0}: należy ustawić w Powodzie zwolnienia z podatku w podatkach od sprzedaży i opłatach, Row {0}: Please set the Mode of Payment in Payment Schedule,Wiersz {0}: ustaw tryb płatności w harmonogramie płatności, Row {0}: Please set the correct code on Mode of Payment {1},Wiersz {0}: ustaw prawidłowy kod w trybie płatności {1}, -Row {0}: Qty is mandatory,Wiersz {0}: Ilość jest obowiązkowe, Row {0}: Quality Inspection rejected for item {1},Wiersz {0}: Kontrola jakości odrzucona dla elementu {1}, Row {0}: UOM Conversion Factor is mandatory,Wiersz {0}: JM Współczynnik konwersji jest obowiązkowe, Row {0}: select the workstation against the operation {1},Wiersz {0}: wybierz stację roboczą w stosunku do operacji {1}, @@ -3435,7 +3434,6 @@ Issue Type.,Typ problemu., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Wygląda na to, że istnieje problem z konfiguracją pasków serwera. W przypadku niepowodzenia kwota zostanie zwrócona na Twoje konto.", Item Reported,Zgłoszony element, Item listing removed,Usunięto listę produktów, -Item quantity can not be zero,Ilość towaru nie może wynosić zero, Item taxes updated,Zaktualizowano podatki od towarów, Item {0}: {1} qty produced. ,Produkt {0}: wyprodukowano {1} sztuk., Joining Date can not be greater than Leaving Date,Data dołączenia nie może być większa niż Data opuszczenia, @@ -3607,6 +3605,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Wiersz # {0}: Centrum kosztów {1} nie należy do firmy {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Wiersz # {0}: operacja {1} nie została zakończona dla {2} ilości gotowych produktów w zleceniu pracy {3}. Zaktualizuj status operacji za pomocą karty pracy {4}., Row #{0}: Payment document is required to complete the transaction,Wiersz # {0}: dokument płatności jest wymagany do zakończenia transakcji, +Row #{0}: Quantity for Item {1} cannot be zero.,Wiersz # {0}: Ilość towaru {1} nie może wynosić zero, Row #{0}: Serial No {1} does not belong to Batch {2},Wiersz # {0}: numer seryjny {1} nie należy do partii {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Wiersz # {0}: data zakończenia usługi nie może być wcześniejsza niż data księgowania faktury, Row #{0}: Service Start Date cannot be greater than Service End Date,Wiersz # {0}: data rozpoczęcia usługi nie może być większa niż data zakończenia usługi, diff --git a/erpnext/translations/ps.csv b/erpnext/translations/ps.csv index 09d4df31ff..23480b5426 100644 --- a/erpnext/translations/ps.csv +++ b/erpnext/translations/ps.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,قطار {0}: مهرباني وکړئ د پلور مالیات او لګښتونو کې د مالیې معافیت دلیل تنظیم کړئ, Row {0}: Please set the Mode of Payment in Payment Schedule,قطار {0}: مهرباني وکړئ د تادیې مهال ویش کې د تادیې حالت تنظیم کړئ, Row {0}: Please set the correct code on Mode of Payment {1},قطار {0}: مهرباني وکړئ د تادیې په حالت کې سم کوډ تنظیم کړئ {1}, -Row {0}: Qty is mandatory,د کتارونو تر {0}: Qty الزامی دی, Row {0}: Quality Inspection rejected for item {1},قطار {0}: د توکي {1} لپاره د کیفیت تفتیش رد شو, Row {0}: UOM Conversion Factor is mandatory,د کتارونو تر {0}: UOM د تغیر فکتور الزامی دی, Row {0}: select the workstation against the operation {1},Row {0}: د عملیات په وړاندې د کارسټنشن غوره کول {1}, @@ -3461,7 +3460,6 @@ Issue Type.,د مسلې ډول., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",داسې ښکاري چې د سرور د پټې ترتیب سره یو مسله شتون لري. د ناکامۍ په صورت کې، ستاسو د حساب رقم به بیرته ترلاسه شي., Item Reported,توکی راپور شوی, Item listing removed,د توکو لیست ایستل شوی, -Item quantity can not be zero,د توکو مقدار صفر نشي کیدی, Item taxes updated,د توکو مالیه تازه شوه, Item {0}: {1} qty produced. ,توکی {0}: {1} Qty تولید شو., Joining Date can not be greater than Leaving Date,د نیټې ایښودل د نیټې نیولو څخه لوی نشي, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},قطار # {0}: د لګښت مرکز {1 company د شرکت {2 belong پورې اړه نلري., Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,قطار # {0}: په Order 3} کاري ترتیب کې د goods 2} Qty بشپړ شوي توکو لپاره عملیات {1} ندي بشپړ شوي. مهرباني وکړئ د دندو کارت via 4 via له لارې د عملیاتو حالت تازه کړئ., Row #{0}: Payment document is required to complete the transaction,قطار # {0}: د معاملې بشپړولو لپاره د تادیې سند اړین دی, +Row #{0}: Quantity for Item {1} cannot be zero.,قطار # {0}: د {1} توکو مقدار صفر نشي کیدی, Row #{0}: Serial No {1} does not belong to Batch {2},قطار # {0}: سیریل {1} د بیچ {2 belong سره تړاو نه لري, Row #{0}: Service End Date cannot be before Invoice Posting Date,قطار # {0}: د خدمت پای پای نیټه د انوائس پوسټ کولو نیټې څخه مخکې نشي کیدی, Row #{0}: Service Start Date cannot be greater than Service End Date,قطار # {0}: د خدماتو د پیل نیټه د خدمت پای نیټې څخه لوی نشي, diff --git a/erpnext/translations/pt-BR.csv b/erpnext/translations/pt-BR.csv index 92845b0a40..c904e5e149 100644 --- a/erpnext/translations/pt-BR.csv +++ b/erpnext/translations/pt-BR.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Linha {0}: Por Favor Defina o Motivo da Isenção de Impostos Em Impostos e Taxas de Vendas, Row {0}: Please set the Mode of Payment in Payment Schedule,Linha {0}: Por Favor Defina o Modo de Pagamento na Programação de Pagamento, Row {0}: Please set the correct code on Mode of Payment {1},Linha {0}: Por favor defina o código correto em Modo de pagamento {1}, -Row {0}: Qty is mandatory,Linha {0}: Qtde é obrigatória, Row {0}: Quality Inspection rejected for item {1},Linha {0}: inspeção de qualidade rejeitada para o item {1}, Row {0}: UOM Conversion Factor is mandatory,Linha {0}: Fator de Conversão da Unidade de Medida é obrigatório, Row {0}: select the workstation against the operation {1},Linha {0}: selecione a estação de trabalho contra a operação {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Tipo de Incidente., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Parece que há um problema com a configuração de distribuição do servidor. Em caso de falha, o valor será reembolsado em sua conta.", Item Reported,Item Relatado, Item listing removed,Lista de itens removidos, -Item quantity can not be zero,Quantidade de item não pode ser zero, Item taxes updated,Impostos sobre itens atualizados, Item {0}: {1} qty produced. ,Item {0}: {1} quantidade produzida., Joining Date can not be greater than Leaving Date,A data de ingresso não pode ser maior que a data de saída, diff --git a/erpnext/translations/pt.csv b/erpnext/translations/pt.csv index 58cf6c8316..c8c5d061dc 100644 --- a/erpnext/translations/pt.csv +++ b/erpnext/translations/pt.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"Linha {0}: Por favor, defina o Motivo da Isenção de Impostos em Impostos e Taxas de Vendas", Row {0}: Please set the Mode of Payment in Payment Schedule,"Linha {0}: Por favor, defina o modo de pagamento na programação de pagamento", Row {0}: Please set the correct code on Mode of Payment {1},"Linha {0}: Por favor, defina o código correto em Modo de pagamento {1}", -Row {0}: Qty is mandatory,Linha {0}: É obrigatório colocar a qtd, Row {0}: Quality Inspection rejected for item {1},Linha {0}: inspeção de qualidade rejeitada para o item {1}, Row {0}: UOM Conversion Factor is mandatory,Linha {0}: É obrigatório colocar o Fator de Conversão de UNID, Row {0}: select the workstation against the operation {1},Linha {0}: selecione a estação de trabalho contra a operação {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Tipo de problema., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Parece que há um problema com a configuração de distribuição do servidor. Em caso de falha, o valor será reembolsado em sua conta.", Item Reported,Item relatado, Item listing removed,Lista de itens removidos, -Item quantity can not be zero,Quantidade de item não pode ser zero, Item taxes updated,Impostos sobre itens atualizados, Item {0}: {1} qty produced. ,Item {0}: {1} quantidade produzida., Joining Date can not be greater than Leaving Date,A data de ingresso não pode ser maior que a data de saída, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Linha # {0}: o centro de custo {1} não pertence à empresa {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"Linha # {0}: A operação {1} não está concluída para {2} quantidade de produtos acabados na Ordem de Serviço {3}. Por favor, atualize o status da operação através do Job Card {4}.", Row #{0}: Payment document is required to complete the transaction,Linha # {0}: documento de pagamento é necessário para concluir a transação, +Row #{0}: Quantity for Item {1} cannot be zero.,Linha # {0}: Quantidade de item {1} não pode ser zero., Row #{0}: Serial No {1} does not belong to Batch {2},Linha # {0}: o número de série {1} não pertence ao lote {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Linha # {0}: a data de término do serviço não pode ser anterior à data de lançamento da fatura, Row #{0}: Service Start Date cannot be greater than Service End Date,Linha # {0}: a data de início do serviço não pode ser maior que a data de término do serviço, diff --git a/erpnext/translations/ro.csv b/erpnext/translations/ro.csv index 935b1e66fd..d26b80379e 100644 --- a/erpnext/translations/ro.csv +++ b/erpnext/translations/ro.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Rândul {0}: Vă rugăm să setați motivul scutirii de taxe în impozitele și taxele de vânzare, Row {0}: Please set the Mode of Payment in Payment Schedule,Rândul {0}: Vă rugăm să setați modul de plată în programul de plată, Row {0}: Please set the correct code on Mode of Payment {1},Rândul {0}: Vă rugăm să setați codul corect pe Modul de plată {1}, -Row {0}: Qty is mandatory,Rând {0}: Cant este obligatorie, Row {0}: Quality Inspection rejected for item {1},Rândul {0}: Inspecția de calitate a fost respinsă pentru articolul {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: Factorul de conversie UOM este obligatorie, Row {0}: select the workstation against the operation {1},Rând {0}: selectați stația de lucru pentru operația {1}, @@ -3460,7 +3459,6 @@ Issue Type.,Tipul problemei., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Se pare că există o problemă cu configurația benzii serverului. În caz de eșec, suma va fi rambursată în cont.", Item Reported,Articol raportat, Item listing removed,Elementul de articol a fost eliminat, -Item quantity can not be zero,Cantitatea articolului nu poate fi zero, Item taxes updated,Impozitele pe articol au fost actualizate, Item {0}: {1} qty produced. ,Articol {0}: {1} cantitate produsă., Joining Date can not be greater than Leaving Date,Data de înscriere nu poate fi mai mare decât Data de plecare, @@ -3632,6 +3630,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Rândul {{0}: Centrul de costuri {1} nu aparține companiei {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Rândul # {0}: Operația {1} nu este finalizată pentru {2} cantitate de mărfuri finite în Ordinul de lucru {3}. Vă rugăm să actualizați starea operației prin intermediul cărții de lucru {4}., Row #{0}: Payment document is required to complete the transaction,Rândul # {0}: documentul de plată este necesar pentru a finaliza tranzacția, +Row #{0}: Quantity for Item {1} cannot be zero.,Rândul # {0}: Cantitatea articolului {1} nu poate fi zero., Row #{0}: Serial No {1} does not belong to Batch {2},Rândul # {0}: nr. De serie {1} nu aparține lotului {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Rândul # {0}: Data de încheiere a serviciului nu poate fi înainte de Data de înregistrare a facturii, Row #{0}: Service Start Date cannot be greater than Service End Date,Rândul # {0}: Data de începere a serviciului nu poate fi mai mare decât Data de încheiere a serviciului, diff --git a/erpnext/translations/ru.csv b/erpnext/translations/ru.csv index 2f6f361b10..ec5421e444 100644 --- a/erpnext/translations/ru.csv +++ b/erpnext/translations/ru.csv @@ -2271,7 +2271,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Строка {0}: Укажите причину освобождения от уплаты налогов в разделе Налоги и сборы, Row {0}: Please set the Mode of Payment in Payment Schedule,"Строка {0}: пожалуйста, установите способ оплаты в графике платежей", Row {0}: Please set the correct code on Mode of Payment {1},Строка {0}: установите правильный код в способе оплаты {1}, -Row {0}: Qty is mandatory,Строка {0}: Кол-во является обязательным, Row {0}: Quality Inspection rejected for item {1},Строка {0}: проверка качества отклонена для элемента {1}, Row {0}: UOM Conversion Factor is mandatory,Строка {0}: Коэффициент преобразования единиц измерения является обязательным, Row {0}: select the workstation against the operation {1},Строка {0}: выберите рабочее место для операции {1}, @@ -3459,7 +3458,6 @@ Issue Type.,Тип проблемы., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Кажется, что существует проблема с конфигурацией полосок сервера. В случае сбоя сумма будет возвращена на ваш счет.", Item Reported,Товар сообщен, Item listing removed,Список товаров удален, -Item quantity can not be zero,Количество товара не может быть нулевым, Item taxes updated,Товарные налоги обновлены, Item {0}: {1} qty produced. ,Элемент {0}: произведено {1} кол-во. , Joining Date can not be greater than Leaving Date,"Дата вступления не может быть больше, чем Дата отъезда", @@ -3635,6 +3633,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Строка #{0}: МВЗ {1} не принадлежит компании {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"Строка #{0}: операция {1} не завершена для {2} количества готовой продукции в рабочем задании {3}. Пожалуйста, обновите статус операции с помощью Карточки работ {4}.", Row #{0}: Payment document is required to complete the transaction,Строка #{0}: для завершения транзакции требуется платежный документ, +Row #{0}: Quantity for Item {1} cannot be zero.,Строка #{0}: Количество товара {1} не может быть нулевым, Row #{0}: Serial No {1} does not belong to Batch {2},Строка #{0}: серийный номер {1} не принадлежит партии {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Строка #{0}: дата окончания обслуживания не может быть раньше даты проводки счета, Row #{0}: Service Start Date cannot be greater than Service End Date,Строка #{0}: дата начала обслуживания не может быть больше даты окончания обслуживания, diff --git a/erpnext/translations/rw.csv b/erpnext/translations/rw.csv index 59362a1e29..66a530c996 100644 --- a/erpnext/translations/rw.csv +++ b/erpnext/translations/rw.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Umurongo {0}: Nyamuneka shyira kumpamvu yo gusonerwa imisoro mumisoro yagurishijwe, Row {0}: Please set the Mode of Payment in Payment Schedule,Umurongo {0}: Nyamuneka shiraho uburyo bwo Kwishura muri Gahunda yo Kwishura, Row {0}: Please set the correct code on Mode of Payment {1},Umurongo {0}: Nyamuneka shyira kode yukuri kuri Mode yo Kwishura {1}, -Row {0}: Qty is mandatory,Umurongo {0}: Qty ni itegeko, Row {0}: Quality Inspection rejected for item {1},Umurongo {0}: Igenzura ryiza ryanze kubintu {1}, Row {0}: UOM Conversion Factor is mandatory,Umurongo {0}: Ikintu cya UOM Guhindura ni itegeko, Row {0}: select the workstation against the operation {1},Umurongo {0}: hitamo ahakorerwa kurwanya ibikorwa {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Ubwoko bw'Ibibazo., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Birasa nkaho hari ikibazo hamwe na seriveri iboneza. Mugihe byananiranye, amafaranga azasubizwa kuri konte yawe.", Item Reported,Ingingo Yatanzwe, Item listing removed,Urutonde rwibintu rwakuweho, -Item quantity can not be zero,Ingano yikintu ntishobora kuba zeru, Item taxes updated,Imisoro yikintu ivugururwa, Item {0}: {1} qty produced. ,Ingingo {0}: {1} qty yakozwe., Joining Date can not be greater than Leaving Date,Kwinjira Itariki ntishobora kurenza Kureka Itariki, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Umurongo # {0}: Ikigo Centre {1} ntabwo ari icya sosiyete {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Umurongo # {0}: Igikorwa {1} nticyarangiye kuri {2} qty yibicuruzwa byarangiye murutonde rwakazi {3}. Nyamuneka vugurura imikorere ukoresheje ikarita y'akazi {4}., Row #{0}: Payment document is required to complete the transaction,Umurongo # {0}: Inyandiko yo kwishyura irasabwa kurangiza ibikorwa, +Row #{0}: Quantity for Item {1} cannot be zero.,Umurongo # {0}: Ingano yikintu {1} ntishobora kuba zeru., Row #{0}: Serial No {1} does not belong to Batch {2},Umurongo # {0}: Serial No {1} ntabwo ari iya Batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Umurongo # {0}: Itariki yo kurangiriraho ya serivisi ntishobora kuba mbere yitariki yo kohereza, Row #{0}: Service Start Date cannot be greater than Service End Date,Umurongo # {0}: Itariki yo Gutangiriraho Serivisi ntishobora kuba irenze Itariki yo kurangiriraho, diff --git a/erpnext/translations/si.csv b/erpnext/translations/si.csv index dd2acc45a2..168da5aded 100644 --- a/erpnext/translations/si.csv +++ b/erpnext/translations/si.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,පේළිය {0}: කරුණාකර විකුණුම් බදු සහ ගාස්තු සඳහා බදු නිදහස් කිරීමේ හේතුව සකසන්න, Row {0}: Please set the Mode of Payment in Payment Schedule,පේළිය {0}: කරුණාකර ගෙවීම් ක්‍රමය ගෙවීම් කාලසටහනට සකසන්න, Row {0}: Please set the correct code on Mode of Payment {1},පේළිය {0}: කරුණාකර නිවැරදි කේතය ගෙවීම් ක්‍රමයට සකසන්න {1}, -Row {0}: Qty is mandatory,ෙරෝ {0}: යවන ලද අනිවාර්ය වේ, Row {0}: Quality Inspection rejected for item {1},පේළිය {0}: තත්ත්ව පරීක්ෂාව අයිතමය සඳහා {1}, Row {0}: UOM Conversion Factor is mandatory,ෙරෝ {0}: UOM පරිවර්තන සාධකය අනිවාර්ය වේ, Row {0}: select the workstation against the operation {1},පේළිය {0}: මෙහෙයුමට එරෙහිව පරිගණකය තෝරා ගන්න {1}, @@ -3461,7 +3460,6 @@ Issue Type.,නිකුත් කිරීමේ වර්ගය., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","සර්වරයේ තීරු වින්යාසය සමඟ ගැටළුවක් පවතින බව පෙනේ. අසාර්ථකත්වයේ දී, එම මුදල ඔබේ ගිණුමට නැවත ලබා දෙනු ඇත.", Item Reported,අයිතමය වාර්තා කර ඇත, Item listing removed,අයිතම ලැයිස්තුගත කිරීම ඉවත් කරන ලදි, -Item quantity can not be zero,අයිතමයේ ප්‍රමාණය ශුන්‍ය විය නොහැක, Item taxes updated,අයිතම බදු යාවත්කාලීන කරන ලදි, Item {0}: {1} qty produced. ,අයිතමය {0}: {1} qty නිෂ්පාදනය., Joining Date can not be greater than Leaving Date,සම්බන්ධ වන දිනය නිවාඩු දිනයට වඩා වැඩි විය නොහැක, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},පේළිය # {0}: පිරිවැය මධ්‍යස්ථානය {1 company සමාගමට අයත් නොවේ {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,පේළිය # {0}: වැඩ ඇණවුමේ {3 in හි නිමි භාණ්ඩ {2} qty සඳහා {1 operation මෙහෙයුම සම්පූර්ණ නොවේ. කරුණාකර ජොබ් කාඩ් {4 via හරහා මෙහෙයුම් තත්ත්වය යාවත්කාලීන කරන්න., Row #{0}: Payment document is required to complete the transaction,පේළිය # {0}: ගනුදෙනුව සම්පූර්ණ කිරීම සඳහා ගෙවීම් ලේඛනය අවශ්‍ය වේ, +Row #{0}: Quantity for Item {1} cannot be zero.,පේළිය # {0}: අයිතමයේ {1} ප්‍රමාණය ශුන්‍ය විය නොහැක, Row #{0}: Serial No {1} does not belong to Batch {2},පේළිය # {0}: අනුක්‍රමික අංකය {1 B කණ්ඩායම {2 to ට අයත් නොවේ, Row #{0}: Service End Date cannot be before Invoice Posting Date,පේළිය # {0}: ඉන්වොයිසිය පළ කිරීමේ දිනයට පෙර සේවා අවසන් දිනය විය නොහැක, Row #{0}: Service Start Date cannot be greater than Service End Date,පේළිය # {0}: සේවා ආරම්භක දිනය සේවා අවසන් දිනයට වඩා වැඩි විය නොහැක, diff --git a/erpnext/translations/sk.csv b/erpnext/translations/sk.csv index 025c8b788f..e3323ddc9e 100644 --- a/erpnext/translations/sk.csv +++ b/erpnext/translations/sk.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Riadok {0}: V Dane z obratu a poplatkoch nastavte prosím na dôvod oslobodenia od dane, Row {0}: Please set the Mode of Payment in Payment Schedule,Riadok {0}: Nastavte si spôsob platby v pláne platieb, Row {0}: Please set the correct code on Mode of Payment {1},Riadok {0}: Nastavte správny kód v platobnom režime {1}, -Row {0}: Qty is mandatory,Row {0}: Množství je povinný, Row {0}: Quality Inspection rejected for item {1},Riadok {0}: Kontrola kvality zamietnutá pre položku {1}, Row {0}: UOM Conversion Factor is mandatory,Riadok {0}: Konverzný faktor MJ je povinný, Row {0}: select the workstation against the operation {1},Riadok {0}: vyberte pracovnú stanicu proti operácii {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Typ vydania., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Zdá sa, že existuje problém s konfiguráciou pásma servera. V prípade zlyhania bude suma vrátená na váš účet.", Item Reported,Položka bola nahlásená, Item listing removed,Zoznam položiek bol odstránený, -Item quantity can not be zero,Množstvo položky nemôže byť nula, Item taxes updated,Dane z tovaru boli aktualizované, Item {0}: {1} qty produced. ,Položka {0}: {1} vyprodukované množstvo., Joining Date can not be greater than Leaving Date,Dátum vstupu nemôže byť väčší ako dátum odchodu, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Riadok # {0}: Nákladové stredisko {1} nepatrí spoločnosti {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Riadok # {0}: Operácia {1} nie je dokončená pre {2} množstvo hotového tovaru v objednávke {3}. Aktualizujte prevádzkový stav prostredníctvom Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Riadok # {0}: Na dokončenie transakcie je potrebný platobný doklad, +Row #{0}: Quantity for Item {1} cannot be zero.,Riadok # {0}: Množstvo položky {1} nemôže byť nula., Row #{0}: Serial No {1} does not belong to Batch {2},Riadok # {0}: Poradové číslo {1} nepatrí do šarže {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Riadok # {0}: Dátum ukončenia služby nemôže byť pred dátumom zaúčtovania faktúry, Row #{0}: Service Start Date cannot be greater than Service End Date,Riadok # {0}: Dátum začatia služby nemôže byť väčší ako dátum ukončenia služby, diff --git a/erpnext/translations/sl.csv b/erpnext/translations/sl.csv index 86b5e58129..2937afd703 100644 --- a/erpnext/translations/sl.csv +++ b/erpnext/translations/sl.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"Vrstica {0}: Prosimo, nastavite Razlog oprostitve plačila davkov na promet in davkov", Row {0}: Please set the Mode of Payment in Payment Schedule,Vrstica {0}: v plačilni shemi nastavite način plačila, Row {0}: Please set the correct code on Mode of Payment {1},Vrstica {0}: nastavite pravilno kodo na način plačila {1}, -Row {0}: Qty is mandatory,Vrstica {0}: Kol je obvezna, Row {0}: Quality Inspection rejected for item {1},Vrstica {0}: pregled izdelka je zavrnjen za postavko {1}, Row {0}: UOM Conversion Factor is mandatory,Vrstica {0}: UOM Conversion Factor je obvezna, Row {0}: select the workstation against the operation {1},Vrstica {0}: izberite delovno postajo proti operaciji {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Vrsta izdaje, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Zdi se, da obstaja težava s strežniško konfiguracijo črtne kode. V primeru neuspeha bo znesek povrnjen na vaš račun.", Item Reported,Element je prijavljen, Item listing removed,Seznam elementov je odstranjen, -Item quantity can not be zero,Količina artikla ne more biti nič, Item taxes updated,Davki na postavke so posodobljeni, Item {0}: {1} qty produced. ,Postavka {0}: {1} proizvedeno., Joining Date can not be greater than Leaving Date,Datum pridružitve ne sme biti večji od datuma zapustitve, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Vrstica # {0}: stroškovno središče {1} ne pripada podjetju {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Vrstica # {0}: Postopek {1} ni končan za {2} količino končnih izdelkov v delovnem naročilu {3}. Posodobite stanje delovanja s Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Vrstica # {0}: Za dokončanje transakcije je potreben plačilni dokument, +Row #{0}: Quantity for Item {1} cannot be zero.,Vrstica # {0}: Količina artikla {1} ne more biti nič., Row #{0}: Serial No {1} does not belong to Batch {2},Vrstica # {0}: Serijska št. {1} ne spada v serijo {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Vrstica # {0}: Končni datum storitve ne sme biti pred datumom objave računa, Row #{0}: Service Start Date cannot be greater than Service End Date,Vrstica # {0}: datum začetka storitve ne sme biti večji od končnega datuma storitve, diff --git a/erpnext/translations/sq.csv b/erpnext/translations/sq.csv index 3cfa4297df..f3e68062b0 100644 --- a/erpnext/translations/sq.csv +++ b/erpnext/translations/sq.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Rreshti {0}: Ju lutemi vendosni arsyen e përjashtimit nga taksat në taksat dhe tarifat e shitjeve, Row {0}: Please set the Mode of Payment in Payment Schedule,Rreshti {0}: Ju lutemi vendosni Mënyrën e Pagesës në Programin e Pagesave, Row {0}: Please set the correct code on Mode of Payment {1},Rresht {0}: Ju lutemi vendosni kodin e saktë në mënyrën e pagesës {1}, -Row {0}: Qty is mandatory,Row {0}: Qty është e detyrueshme, Row {0}: Quality Inspection rejected for item {1},Rreshti {0}: Inspektimi i Cilësisë i refuzuar për artikullin {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: UOM Konvertimi Faktori është i detyrueshëm, Row {0}: select the workstation against the operation {1},Rresht {0}: zgjidhni stacionin e punës kundër operacionit {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Lloji i çështjes., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Duket se ka një problem me konfigurimin e shiritit të serverit. Në rast të dështimit, shuma do të kthehet në llogarinë tuaj.", Item Reported,Njoftimi i raportuar, Item listing removed,Lista e sendeve u hoq, -Item quantity can not be zero,Sasia e sendit nuk mund të jetë zero, Item taxes updated,Taksat e sendeve azhurnohen, Item {0}: {1} qty produced. ,Artikulli {0}: {1} prodhohet., Joining Date can not be greater than Leaving Date,Data e anëtarësimit nuk mund të jetë më e madhe se data e largimit, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Rreshti # {0}: Qendra e Kostos {1} nuk i përket kompanisë {2, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Rreshti # {0}: Operacioni {1} nuk është përfunduar për 2 {sasi të mallrave të gatshëm në Rendin e Punës {3. Ju lutemi azhurnoni statusin e funksionimit përmes Kartës së Punës {4., Row #{0}: Payment document is required to complete the transaction,Rreshti # {0}: Dokumenti i pagesës kërkohet për të përfunduar transaksionin, +Row #{0}: Quantity for Item {1} cannot be zero.,Rreshti # {0}: Sasia e sendit {1} nuk mund të jetë zero., Row #{0}: Serial No {1} does not belong to Batch {2},Rreshti # {0}: Seriali Nr {1} nuk i përket Batch {2, Row #{0}: Service End Date cannot be before Invoice Posting Date,Rreshti # {0}: Data e mbarimit të shërbimit nuk mund të jetë përpara datës së postimit të faturës, Row #{0}: Service Start Date cannot be greater than Service End Date,Rreshti # {0}: Data e fillimit të shërbimit nuk mund të jetë më e madhe se data e përfundimit të shërbimit, diff --git a/erpnext/translations/sr.csv b/erpnext/translations/sr.csv index 621772f39f..d22a101a2a 100644 --- a/erpnext/translations/sr.csv +++ b/erpnext/translations/sr.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Ред {0}: Подесите разлог ослобађања од пореза у порезима и накнадама на промет, Row {0}: Please set the Mode of Payment in Payment Schedule,Ред {0}: Молимо вас да подесите Начин плаћања у Распореду плаћања, Row {0}: Please set the correct code on Mode of Payment {1},Ред {0}: Молимо поставите тачан код на Начин плаћања {1}, -Row {0}: Qty is mandatory,Ред {0}: Кол је обавезно, Row {0}: Quality Inspection rejected for item {1},Ред {0}: Инспекција квалитета одбијена за ставку {1}, Row {0}: UOM Conversion Factor is mandatory,Ред {0}: УОМ фактор конверзије је обавезна, Row {0}: select the workstation against the operation {1},Ред {0}: изаберите радну станицу против операције {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Врста издања., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Чини се да постоји проблем са конфигурацијом стрипе сервера. У случају неуспеха, износ ће бити враћен на ваш рачун.", Item Reported,Ставка пријављена, Item listing removed,Попис предмета је уклоњен, -Item quantity can not be zero,Количина предмета не може бити једнака нули, Item taxes updated,Ажурирани су порези на артикле, Item {0}: {1} qty produced. ,Ставка {0}: {1} Количина произведена., Joining Date can not be greater than Leaving Date,Датум придруживања не може бити већи од Датум напуштања, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Ред # {0}: Трошкови {1} не припада компанији {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Ред # {0}: Операција {1} није завршена за {2} Количина готових производа у радном налогу {3}. Ажурирајте статус рада путем Јоб Цард {4}., Row #{0}: Payment document is required to complete the transaction,Ред # {0}: За завршетак трансакције потребан је документ о плаћању, +Row #{0}: Quantity for Item {1} cannot be zero.,Ред # {0}: Количина предмета {1} не може бити једнака нули., Row #{0}: Serial No {1} does not belong to Batch {2},Ред # {0}: Серијски број {1} не припада групи {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Ред број # 0: Датум завршетка услуге не може бити прије датума књижења фактуре, Row #{0}: Service Start Date cannot be greater than Service End Date,Ред број # {0}: Датум почетка услуге не може бити већи од датума завршетка услуге, diff --git a/erpnext/translations/sv.csv b/erpnext/translations/sv.csv index 4fef88b7f4..66f707dabe 100644 --- a/erpnext/translations/sv.csv +++ b/erpnext/translations/sv.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Rad {0}: Vänligen ange skattefrihetsskäl i moms och avgifter, Row {0}: Please set the Mode of Payment in Payment Schedule,Rad {0}: Ange betalningsmetod i betalningsschema, Row {0}: Please set the correct code on Mode of Payment {1},Rad {0}: Ange rätt kod på betalningsmetod {1}, -Row {0}: Qty is mandatory,Rad {0}: Antal är obligatoriskt, Row {0}: Quality Inspection rejected for item {1},Rad {0}: Kvalitetskontroll avvisad för artikel {1}, Row {0}: UOM Conversion Factor is mandatory,Rad {0}: UOM Omvandlingsfaktor är obligatorisk, Row {0}: select the workstation against the operation {1},Rad {0}: välj arbetsstation mot operationen {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Problemtyp., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",Det verkar som om det finns ett problem med serverns randkonfiguration. Vid fel kommer beloppet att återbetalas till ditt konto., Item Reported,Objekt rapporterat, Item listing removed,Objektlistan har tagits bort, -Item quantity can not be zero,Artikelkvantitet kan inte vara noll, Item taxes updated,Produktskatter uppdaterade, Item {0}: {1} qty produced. ,Objekt {0}: {1} producerad antal., Joining Date can not be greater than Leaving Date,Anslutningsdatum kan inte vara större än Leaving Date, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Rad # {0}: Cost Center {1} tillhör inte företaget {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Rad # {0}: Drift {1} är inte slutfört för {2} antal färdigvaror i arbetsordern {3}. Uppdatera driftsstatus via Jobbkort {4}., Row #{0}: Payment document is required to complete the transaction,Rad # {0}: Betalningsdokument krävs för att slutföra transaktionen, +Row #{0}: Quantity for Item {1} cannot be zero.,Rad # {0}: Artikelkvantitet för artikel {1} kan inte vara noll., Row #{0}: Serial No {1} does not belong to Batch {2},Rad # {0}: Serienummer {1} tillhör inte batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Rad nr {0}: Service slutdatum kan inte vara före fakturadatum, Row #{0}: Service Start Date cannot be greater than Service End Date,Rad # {0}: Service-startdatum kan inte vara större än slutdatum för service, diff --git a/erpnext/translations/sw.csv b/erpnext/translations/sw.csv index 3b4d8aee64..83ff58a738 100644 --- a/erpnext/translations/sw.csv +++ b/erpnext/translations/sw.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Row {0}: Tafadhali weka kwa Sababu ya Msamaha wa Ushuru katika Ushuru na Uuzaji, Row {0}: Please set the Mode of Payment in Payment Schedule,Njia {0}: Tafadhali seti Njia ya Malipo katika Ratiba ya Malipo, Row {0}: Please set the correct code on Mode of Payment {1},Safu {0}: Tafadhali seti nambari sahihi kwenye Njia ya Malipo {1}, -Row {0}: Qty is mandatory,Row {0}: Uchina ni lazima, Row {0}: Quality Inspection rejected for item {1},Safu {0}: Ukaguzi wa Ubora uliokataliwa kwa bidhaa {1}, Row {0}: UOM Conversion Factor is mandatory,Row {0}: Kipengele cha kubadilisha UOM ni lazima, Row {0}: select the workstation against the operation {1},Row {0}: chagua kituo cha kazi dhidi ya uendeshaji {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Aina ya Toleo., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Inaonekana kwamba kuna suala la usanidi wa stripe ya seva. Katika hali ya kushindwa, kiasi hicho kitarejeshwa kwa akaunti yako.", Item Reported,Bidhaa Imeripotiwa, Item listing removed,Orodha ya bidhaa imeondolewa, -Item quantity can not be zero,Wingi wa kitu hauwezi kuwa sifuri, Item taxes updated,Kodi ya bidhaa iliyosasishwa, Item {0}: {1} qty produced. ,Bidhaa {0}: {1} qty imetolewa, Joining Date can not be greater than Leaving Date,Kujiunga Tarehe haiwezi kuwa kubwa kuliko Tarehe ya Kuondoka, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Njia # {0}: Kituo cha Gharama {1} sio ya kampuni {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Njia # {0}: Operesheni {1} haijakamilika kwa {2} qty ya bidhaa kumaliza katika Agizo la Kazi {3}. Tafadhali sasisha hali ya operesheni kupitia Kadi ya kazi {4}., Row #{0}: Payment document is required to complete the transaction,Njia # {0}: Hati ya malipo inahitajika kukamilisha ununuzi, +Row #{0}: Quantity for Item {1} cannot be zero.,Njia # {0}: Wingi wa kitu {1} hauwezi kuwa sifuri, Row #{0}: Serial No {1} does not belong to Batch {2},Safu ya # {0}: Nambari ya Hapana {1} sio ya Kundi {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Njia # {0}: Tarehe ya Mwisho wa Huduma haiwezi kuwa kabla ya Tarehe ya Kutuma ankara, Row #{0}: Service Start Date cannot be greater than Service End Date,Safu # {0}: Tarehe ya Kuanza kwa Huduma haiwezi kuwa kubwa kuliko Tarehe ya Mwisho wa Huduma, diff --git a/erpnext/translations/ta.csv b/erpnext/translations/ta.csv index f40e512427..246fc9aa8f 100644 --- a/erpnext/translations/ta.csv +++ b/erpnext/translations/ta.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,வரிசை {0}: விற்பனை வரி மற்றும் கட்டணங்களில் வரி விலக்கு காரணத்தை அமைக்கவும், Row {0}: Please set the Mode of Payment in Payment Schedule,வரிசை {0}: கட்டணம் செலுத்தும் முறையை கட்டண அட்டவணையில் அமைக்கவும், Row {0}: Please set the correct code on Mode of Payment {1},வரிசை {0}: கட்டண முறையின் சரியான குறியீட்டை அமைக்கவும் {1}, -Row {0}: Qty is mandatory,ரோ {0}: அளவு கட்டாய ஆகிறது, Row {0}: Quality Inspection rejected for item {1},வரிசை {0}: உருப்படியை {1} க்கான தர ஆய்வு நிராகரிக்கப்பட்டது, Row {0}: UOM Conversion Factor is mandatory,ரோ {0}: UOM மாற்றக் காரணி கட்டாயமாகும், Row {0}: select the workstation against the operation {1},வரிசை {0}: நடவடிக்கைக்கு எதிராக பணிநிலையத்தைத் தேர்ந்தெடுக்கவும் {1}, @@ -3461,7 +3460,6 @@ Issue Type.,வெளியீட்டு வகை., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","சர்வர் ஸ்ட்ரீப் கட்டமைப்பில் சிக்கல் இருப்பதாகத் தோன்றுகிறது. தோல்வி ஏற்பட்டால், உங்கள் கணக்கில் பணம் திரும்பப்பெறப்படும்.", Item Reported,பொருள் புகாரளிக்கப்பட்டது, Item listing removed,உருப்படி பட்டியல் நீக்கப்பட்டது, -Item quantity can not be zero,பொருளின் அளவு பூஜ்ஜியமாக இருக்க முடியாது, Item taxes updated,பொருள் வரி புதுப்பிக்கப்பட்டது, Item {0}: {1} qty produced. ,பொருள் {0}: {1} qty தயாரிக்கப்பட்டது., Joining Date can not be greater than Leaving Date,சேரும் தேதியை விட்டு வெளியேறுவதை விட அதிகமாக இருக்க முடியாது, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},வரிசை # {0}: செலவு மையம் {1 company நிறுவனத்திற்கு சொந்தமில்லை {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,வரிசை # {0}: பணி ஆணை {3 in இல் finished 2} qty முடிக்கப்பட்ட பொருட்களுக்கு {1 operation செயல்பாடு முடிக்கப்படவில்லை. வேலை அட்டை {4 via வழியாக செயல்பாட்டு நிலையை புதுப்பிக்கவும்., Row #{0}: Payment document is required to complete the transaction,வரிசை # {0}: பரிவர்த்தனையை முடிக்க கட்டண ஆவணம் தேவை, +Row #{0}: Quantity for Item {1} cannot be zero.,வரிசை # {0}: பொருளின் {1} அளவு பூஜ்ஜியமாக இருக்க முடியாது, Row #{0}: Serial No {1} does not belong to Batch {2},வரிசை # {0}: வரிசை எண் {1 B தொகுதி {2 to க்கு சொந்தமானது அல்ல, Row #{0}: Service End Date cannot be before Invoice Posting Date,வரிசை # {0}: விலைப்பட்டியல் இடுகையிடும் தேதிக்கு முன் சேவை முடிவு தேதி இருக்கக்கூடாது, Row #{0}: Service Start Date cannot be greater than Service End Date,வரிசை # {0}: சேவை தொடக்க தேதி சேவை முடிவு தேதியை விட அதிகமாக இருக்கக்கூடாது, diff --git a/erpnext/translations/te.csv b/erpnext/translations/te.csv index 22fd7d7d1d..278a222999 100644 --- a/erpnext/translations/te.csv +++ b/erpnext/translations/te.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,వరుస {0}: దయచేసి అమ్మకపు పన్నులు మరియు ఛార్జీలలో పన్ను మినహాయింపు కారణాన్ని సెట్ చేయండి, Row {0}: Please set the Mode of Payment in Payment Schedule,వరుస {0}: దయచేసి చెల్లింపు షెడ్యూల్‌లో చెల్లింపు మోడ్‌ను సెట్ చేయండి, Row {0}: Please set the correct code on Mode of Payment {1},అడ్డు వరుస {0}: దయచేసి సరైన కోడ్‌ను చెల్లింపు మోడ్ {1 on లో సెట్ చేయండి, -Row {0}: Qty is mandatory,రో {0}: Qty తప్పనిసరి, Row {0}: Quality Inspection rejected for item {1},అడ్డు వరుస {0}: అంశం {1 item కోసం నాణ్యత తనిఖీ తిరస్కరించబడింది, Row {0}: UOM Conversion Factor is mandatory,రో {0}: UoM మార్పిడి ఫాక్టర్ తప్పనిసరి, Row {0}: select the workstation against the operation {1},అడ్డు వరుస {0}: ఆపరేషన్‌కు వ్యతిరేకంగా వర్క్‌స్టేషన్‌ను ఎంచుకోండి {1}, @@ -3461,7 +3460,6 @@ Issue Type.,ఇష్యూ రకం., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","ఇది సర్వర్ యొక్క చారల కాన్ఫిగరేషన్తో సమస్య ఉన్నట్లు తెలుస్తోంది. వైఫల్యం విషయంలో, మీ ఖాతాకు మొత్తం తిరిగి చెల్లించబడుతుంది.", Item Reported,అంశం నివేదించబడింది, Item listing removed,అంశం జాబితా తీసివేయబడింది, -Item quantity can not be zero,అంశం పరిమాణం సున్నా కాదు, Item taxes updated,అంశం పన్నులు నవీకరించబడ్డాయి, Item {0}: {1} qty produced. ,అంశం {0}: {1} qty ఉత్పత్తి., Joining Date can not be greater than Leaving Date,చేరిన తేదీ లీవింగ్ డేట్ కంటే ఎక్కువ కాదు, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},అడ్డు వరుస # {0}: వ్యయ కేంద్రం {1 company కంపెనీ {2} కు చెందినది కాదు, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,అడ్డు వరుస # {0}: వర్క్ ఆర్డర్ {3 in లో పూర్తయిన వస్తువుల {2} qty కోసం ఆపరేషన్ {1 complete పూర్తి కాలేదు. దయచేసి జాబ్ కార్డ్ {4 via ద్వారా ఆపరేషన్ స్థితిని నవీకరించండి., Row #{0}: Payment document is required to complete the transaction,అడ్డు వరుస # {0}: లావాదేవీని పూర్తి చేయడానికి చెల్లింపు పత్రం అవసరం, +Row #{0}: Quantity for Item {1} cannot be zero.,అడ్డు వరుస # {0}: అంశం {1} యొక్క పరిమాణం సున్నా కాదు, Row #{0}: Serial No {1} does not belong to Batch {2},అడ్డు వరుస # {0}: సీరియల్ సంఖ్య {1 B బ్యాచ్ {2 to కి చెందినది కాదు, Row #{0}: Service End Date cannot be before Invoice Posting Date,అడ్డు వరుస # {0}: ఇన్వాయిస్ పోస్టింగ్ తేదీకి ముందు సేవ ముగింపు తేదీ ఉండకూడదు, Row #{0}: Service Start Date cannot be greater than Service End Date,అడ్డు వరుస # {0}: సేవా ప్రారంభ తేదీ సేవ ముగింపు తేదీ కంటే ఎక్కువగా ఉండకూడదు, diff --git a/erpnext/translations/th.csv b/erpnext/translations/th.csv index 5dfb93c585..997af56999 100644 --- a/erpnext/translations/th.csv +++ b/erpnext/translations/th.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,แถว {0}: โปรดตั้งค่าที่เหตุผลการยกเว้นภาษีในภาษีขายและค่าธรรมเนียม, Row {0}: Please set the Mode of Payment in Payment Schedule,แถว {0}: โปรดตั้งค่าโหมดการชำระเงินในกำหนดการชำระเงิน, Row {0}: Please set the correct code on Mode of Payment {1},แถว {0}: โปรดตั้งรหัสที่ถูกต้องในโหมดการชำระเงิน {1}, -Row {0}: Qty is mandatory,แถว {0}: จำนวนมีผลบังคับใช้, Row {0}: Quality Inspection rejected for item {1},แถว {0}: การตรวจสอบคุณภาพถูกปฏิเสธสำหรับรายการ {1}, Row {0}: UOM Conversion Factor is mandatory,แถว {0}: UOM ปัจจัยการแปลงมีผลบังคับใช้, Row {0}: select the workstation against the operation {1},แถว {0}: เลือกเวิร์กสเตชั่นจากการดำเนินงาน {1}, @@ -3461,7 +3460,6 @@ Issue Type.,ประเภทของปัญหา, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",ดูเหมือนว่ามีปัญหากับการกำหนดค่าแถบของเซิร์ฟเวอร์ ในกรณีที่เกิดความล้มเหลวจำนวนเงินจะได้รับคืนไปยังบัญชีของคุณ, Item Reported,รายการที่รายงาน, Item listing removed,ลบรายการออกแล้ว, -Item quantity can not be zero,ปริมาณสินค้าไม่สามารถเป็นศูนย์ได้, Item taxes updated,อัปเดตภาษีสินค้าแล้ว, Item {0}: {1} qty produced. ,รายการ {0}: {1} จำนวนที่ผลิต, Joining Date can not be greater than Leaving Date,วันที่เข้าร่วมต้องไม่เกินวันที่ออก, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},แถว # {0}: ศูนย์ต้นทุน {1} ไม่ได้เป็นของ บริษัท {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,แถว # {0}: การดำเนินการ {1} ไม่เสร็จสมบูรณ์สำหรับ {2} จำนวนสินค้าสำเร็จรูปในใบสั่งงาน {3} โปรดอัพเดทสถานะการทำงานผ่าน Job Card {4}, Row #{0}: Payment document is required to complete the transaction,แถว # {0}: ต้องใช้เอกสารการชำระเงินเพื่อทำธุรกรรมให้สมบูรณ์, +Row #{0}: Quantity for Item {1} cannot be zero.,แถว # {0}: ปริมาณสินค้า {1} ไม่สามารถเป็นศูนย์ได้, Row #{0}: Serial No {1} does not belong to Batch {2},แถว # {0}: หมายเลขลำดับ {1} ไม่ได้อยู่ในแบทช์ {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Row # {0}: วันที่สิ้นสุดการบริการไม่สามารถอยู่ก่อนวันที่ผ่านรายการใบแจ้งหนี้, Row #{0}: Service Start Date cannot be greater than Service End Date,แถว # {0}: วันที่เริ่มบริการไม่สามารถมากกว่าวันที่สิ้นสุดการให้บริการ, diff --git a/erpnext/translations/tr.csv b/erpnext/translations/tr.csv index 82d28240c1..3a6f48ddc9 100644 --- a/erpnext/translations/tr.csv +++ b/erpnext/translations/tr.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,{0} Satırı: Lütfen Satış Vergileri ve Masraflarında Vergi Muafiyeti Nedeni ayarını yapın, Row {0}: Please set the Mode of Payment in Payment Schedule,{0} Satırı: Lütfen Ödeme Planında Ödeme Modu ayarı, Row {0}: Please set the correct code on Mode of Payment {1},{0} Satırı: Lütfen {1} Ödeme Modunda doğru kodu ayarı, -Row {0}: Qty is mandatory,Satır {0}: Miktar cezaları, Row {0}: Quality Inspection rejected for item {1},{0} Satırı: {1} kalem için Kalite Denetimi reddedildi, Row {0}: UOM Conversion Factor is mandatory,Satır {0}: Ölçü Birimi Dönüşüm Faktörü Hizmetleri, Row {0}: select the workstation against the operation {1},{0} bilgisi: {1} işlemine karşı iş istasyonunu seçin, @@ -3460,7 +3459,6 @@ Issue Type.,Sorun Tipi., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Sunucunun şerit çevresinde bir sorun var gibi görünüyor. Arıza durumunda, tutarları iade edilir.", Item Reported,Öğe Bildirildi, Item listing removed,öğe listesi kaldırıldı, -Item quantity can not be zero,Ürün miktarı sıfır olamaz, Item taxes updated,Öğe vergileri güncellendi, Item {0}: {1} qty produced. ,Öğe {0}: {1} adet oluşturma., Joining Date can not be greater than Leaving Date,Katılım Tarihi Ayrılık Tarihinden daha büyük olamaz, @@ -3632,6 +3630,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},"Satır # {0}: Maliyet Merkezi {1}, {2} işletme ait değil", Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Satır # {0}: {3} İş Emri'nde {2} işlenmiş ürün adedi için {1} işlemi tamamlanmadı. Lütfen çalışma halindeyken {4} Job Card ile güncelleyin., Row #{0}: Payment document is required to complete the transaction,Satır # {0}: İşlemi gizlemek için ödeme belgesi gereklidir, +Row #{0}: Quantity for Item {1} cannot be zero.,Satır # {0}: Ürün {1} miktarı sıfır olamaz., Row #{0}: Serial No {1} does not belong to Batch {2},"Satır # {0}: Seri No {1}, Parti {2} 'ye ait değil", Row #{0}: Service End Date cannot be before Invoice Posting Date,"Satır # {0}: Hizmet Bitiş Tarihi, Fatura Kayıt Tarihinden önce olamaz", Row #{0}: Service Start Date cannot be greater than Service End Date,"Satır # {0}: Hizmet Başlangıç Tarihi, Hizmet Bitiş Tarihinden fazla olamaz", diff --git a/erpnext/translations/uk.csv b/erpnext/translations/uk.csv index f77c6da35e..4fc5d9b828 100644 --- a/erpnext/translations/uk.csv +++ b/erpnext/translations/uk.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"Рядок {0}: Будь ласка, встановіть Причини звільнення від оподаткування податками та зборами з продажу", Row {0}: Please set the Mode of Payment in Payment Schedule,"Рядок {0}: Будь ласка, встановіть Спосіб оплати у Платіжному графіку", Row {0}: Please set the correct code on Mode of Payment {1},Рядок {0}: Введіть правильний код у спосіб оплати {1}, -Row {0}: Qty is mandatory,Ряд {0}: Кількість обов'язково, Row {0}: Quality Inspection rejected for item {1},Рядок {0}: перевірку якості відхилено для елемента {1}, Row {0}: UOM Conversion Factor is mandatory,Ряд {0}: Коефіцієнт перетворення Одиниця виміру є обов'язковим, Row {0}: select the workstation against the operation {1},Рядок {0}: виберіть робочу станцію проти операції {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Тип випуску, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Здається, існує проблема з конфігурацією смуги сервера. У випадку невдачі сума повернеться на ваш рахунок.", Item Reported,Елемент повідомлено, Item listing removed,Список елементів видалено, -Item quantity can not be zero,Кількість предмета не може дорівнювати нулю, Item taxes updated,Податки на предмет оновлено, Item {0}: {1} qty produced. ,Пункт {0}: {1} кількість створено., Joining Date can not be greater than Leaving Date,Дата приєднання не може перевищувати дату відпуску, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Рядок № {0}: Центр витрат {1} не належить компанії {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Рядок № {0}: Операція {1} не завершена для {2} кількості готової продукції в робочому порядку {3}. Оновіть стан роботи за допомогою Job Card {4}., Row #{0}: Payment document is required to complete the transaction,Рядок № {0}: для здійснення транзакції потрібно платіжний документ, +Row #{0}: Quantity for Item {1} cannot be zero.,Рядок № {0}: Кількість предмета {1} не може дорівнювати нулю., Row #{0}: Serial No {1} does not belong to Batch {2},Рядок № {0}: Серійний номер {1} не належить до партії {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Рядок № {0}: Дата закінчення послуги не може бути до дати опублікування рахунка-фактури, Row #{0}: Service Start Date cannot be greater than Service End Date,"Рядок № {0}: дата початку служби не може бути більшою, ніж дата закінчення служби", diff --git a/erpnext/translations/ur.csv b/erpnext/translations/ur.csv index 4dc872be5d..0d7841bd5b 100644 --- a/erpnext/translations/ur.csv +++ b/erpnext/translations/ur.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,قطار {0}: برائے کرم سیل ٹیکس اور محصولات میں ٹیکس چھوٹ کی وجہ مقرر کریں۔, Row {0}: Please set the Mode of Payment in Payment Schedule,قطار {0}: براہ کرم ادائیگی کے نظام الاوقات میں ادائیگی کا انداز وضع کریں۔, Row {0}: Please set the correct code on Mode of Payment {1},صف {0}: براہ کرم درست کوڈ کو ادائیگی کے موڈ پر مقرر کریں {1}, -Row {0}: Qty is mandatory,صف {0}: مقدار لازمی ہے, Row {0}: Quality Inspection rejected for item {1},قطار {0}: معیار معائنہ شے کے لئے مسترد کر دیا {1}, Row {0}: UOM Conversion Factor is mandatory,صف {0}: UOM تبادلوں فیکٹر لازمی ہے, Row {0}: select the workstation against the operation {1},قطار {0}: آپریشن کے خلاف ورکشاپ کا انتخاب کریں {1}, @@ -3461,7 +3460,6 @@ Issue Type.,مسئلہ کی قسم, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",ایسا لگتا ہے کہ سرور کی پٹی ترتیب کے ساتھ ایک مسئلہ ہے. ناکامی کی صورت میں، رقم آپ کے اکاؤنٹ میں واپس کی جائے گی., Item Reported,آئٹم کی اطلاع دی گئی۔, Item listing removed,آئٹم کی فہرست ختم کردی گئی, -Item quantity can not be zero,آئٹم کی مقدار صفر نہیں ہوسکتی ہے۔, Item taxes updated,آئٹم ٹیکس کی تازہ کاری, Item {0}: {1} qty produced. ,آئٹم {0}: {1} کیوٹی تیار کی گئی۔, Joining Date can not be greater than Leaving Date,تاریخ میں شامل ہونا تاریخ چھوڑنے سے زیادہ نہیں ہوسکتا ہے, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},قطار # {0}: لاگت سنٹر {1 company کا تعلق کمپنی {2 to سے نہیں ہے۔, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,قطار # {0}: ورک آرڈر {3 in میں تیار شدہ سامان کی {2} مقدار کے لئے آپریشن {1 not مکمل نہیں ہوا ہے۔ براہ کرم جاب کارڈ via 4 via کے ذریعے آپریشن کی حیثیت کو اپ ڈیٹ کریں۔, Row #{0}: Payment document is required to complete the transaction,قطار # {0}: ٹرانزیکشن کو مکمل کرنے کے لئے ادائیگی دستاویز کی ضرورت ہے۔, +Row #{0}: Quantity for Item {1} cannot be zero.,قطار # {0}: آئٹم {1} کی مقدار صفر نہیں ہوسکتی ہے۔, Row #{0}: Serial No {1} does not belong to Batch {2},قطار # {0}: سیریل نمبر {1 B بیچ {2 to سے تعلق نہیں رکھتی ہے۔, Row #{0}: Service End Date cannot be before Invoice Posting Date,قطار # {0}: خدمت کی اختتامی تاریخ انوائس پوسٹ کرنے کی تاریخ سے پہلے نہیں ہوسکتی ہے, Row #{0}: Service Start Date cannot be greater than Service End Date,قطار # {0}: سروس شروع ہونے کی تاریخ سروس اختتامی تاریخ سے زیادہ نہیں ہوسکتی ہے, diff --git a/erpnext/translations/uz.csv b/erpnext/translations/uz.csv index c09aa895e9..3f2654b9ad 100644 --- a/erpnext/translations/uz.csv +++ b/erpnext/translations/uz.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,"{0} qatori: Iltimos, soliqlarni to'lash va soliqlarni to'lashda soliqdan ozod qilish sababini belgilang", Row {0}: Please set the Mode of Payment in Payment Schedule,"{0} qatori: Iltimos, to'lov jadvalida to'lov usulini o'rnating", Row {0}: Please set the correct code on Mode of Payment {1},"{0} qator: Iltimos, to'lash rejimida to'g'ri kodni o'rnating {1}", -Row {0}: Qty is mandatory,Row {0}: Miqdor majburiydir, Row {0}: Quality Inspection rejected for item {1},{0} qator: {1} elementi uchun sifat nazorati rad qilindi, Row {0}: UOM Conversion Factor is mandatory,Row {0}: UOM Conversion Factor majburiydir, Row {0}: select the workstation against the operation {1},Row {0}: ish stantsiyasini {1} operatsiyasidan qarshi tanlang, @@ -3461,7 +3460,6 @@ Issue Type.,Muammo turi., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",Serverning chiziqli konfiguratsiyasi bilan bog'liq muammo mavjud. Muvaffaqiyatsiz bo'lgan taqdirda sizning hisobingizga mablag 'qaytariladi., Item Reported,Xabar berilgan, Item listing removed,Elementlar ro‘yxati olib tashlandi, -Item quantity can not be zero,Mahsulot miqdori nolga teng bo'lolmaydi, Item taxes updated,Soliqlar yangilandi, Item {0}: {1} qty produced. ,{0}: {1} qty ishlab chiqarildi., Joining Date can not be greater than Leaving Date,Qo'shilish sanasi qoldirilgan kundan katta bo'lishi mumkin emas, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},# {0} qator: {1} Xarajatlar markazi {2} kompaniyasiga tegishli emas., Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"# {0} qator: {3} ish tartibidagi {2} qt tayyor mahsulot uchun {1} operatsiyasi tugallanmagan. Iltimos, ish holatini {4} ish kartasi orqali yangilang.", Row #{0}: Payment document is required to complete the transaction,# {0} qator: tranzaktsiyani yakunlash uchun to'lov hujjati talab qilinadi, +Row #{0}: Quantity for Item {1} cannot be zero.,# {0} qator: Mahsulot {1} miqdori nolga teng bo'lolmaydi., Row #{0}: Serial No {1} does not belong to Batch {2},# {0} qator: {1} seriya {2} to'plamiga tegishli emas., Row #{0}: Service End Date cannot be before Invoice Posting Date,# {0} qator: xizmatni tugatish sanasi fakturani yuborish sanasidan oldin bo'lishi mumkin emas, Row #{0}: Service Start Date cannot be greater than Service End Date,# {0} qator: xizmatni boshlash sanasi xizmatning tugash sanasidan oshib ketmasligi kerak, diff --git a/erpnext/translations/vi.csv b/erpnext/translations/vi.csv index eb251a5978..dfd2083dcf 100644 --- a/erpnext/translations/vi.csv +++ b/erpnext/translations/vi.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Hàng {0}: Vui lòng đặt tại Lý do miễn thuế trong Thuế và phí bán hàng, Row {0}: Please set the Mode of Payment in Payment Schedule,Hàng {0}: Vui lòng đặt Chế độ thanh toán trong Lịch thanh toán, Row {0}: Please set the correct code on Mode of Payment {1},Hàng {0}: Vui lòng đặt mã chính xác cho Phương thức thanh toán {1}, -Row {0}: Qty is mandatory,Hàng {0}: Số lượng là bắt buộc, Row {0}: Quality Inspection rejected for item {1},Hàng {0}: Kiểm tra chất lượng bị từ chối cho mục {1}, Row {0}: UOM Conversion Factor is mandatory,Hàng {0}: Nhân tố thay đổi UOM là bắt buộc, Row {0}: select the workstation against the operation {1},Hàng {0}: chọn máy trạm chống lại hoạt động {1}, @@ -3461,7 +3460,6 @@ Issue Type.,Các loại vấn đề., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Dường như có sự cố với cấu hình sọc của máy chủ. Trong trường hợp thất bại, số tiền sẽ được hoàn trả vào tài khoản của bạn.", Item Reported,Mục báo cáo, Item listing removed,Danh sách mục bị xóa, -Item quantity can not be zero,Số lượng mặt hàng không thể bằng không, Item taxes updated,Mục thuế được cập nhật, Item {0}: {1} qty produced. ,Mục {0}: {1} qty được sản xuất., Joining Date can not be greater than Leaving Date,Ngày tham gia không thể lớn hơn Ngày rời, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},Hàng # {0}: Trung tâm chi phí {1} không thuộc về công ty {2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Hàng # {0}: Thao tác {1} chưa được hoàn thành cho {2} qty hàng thành phẩm trong Đơn hàng công việc {3}. Vui lòng cập nhật trạng thái hoạt động thông qua Thẻ công việc {4}., Row #{0}: Payment document is required to complete the transaction,Hàng # {0}: Cần có chứng từ thanh toán để hoàn thành giao dịch, +Row #{0}: Quantity for Item {1} cannot be zero.,Hàng # {0}: Số lượng mặt hàng {1} không thể bằng không., Row #{0}: Serial No {1} does not belong to Batch {2},Hàng # {0}: Số thứ tự {1} không thuộc về Batch {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Hàng # {0}: Ngày kết thúc dịch vụ không thể trước Ngày đăng hóa đơn, Row #{0}: Service Start Date cannot be greater than Service End Date,Hàng # {0}: Ngày bắt đầu dịch vụ không thể lớn hơn Ngày kết thúc dịch vụ, diff --git a/erpnext/translations/zh-TW.csv b/erpnext/translations/zh-TW.csv index 0f76e97f97..bbdbe80d78 100644 --- a/erpnext/translations/zh-TW.csv +++ b/erpnext/translations/zh-TW.csv @@ -1650,7 +1650,6 @@ Laboratory Testing Datetime,實驗室測試日期時間 Add Quote,添加報價 UOM coversion factor required for UOM: {0} in Item: {1},所需的計量單位計量單位:丁文因素:{0}項:{1} Indirect Expenses,間接費用 -Row {0}: Qty is mandatory,列#{0}:數量是強制性的 Agriculture,農業 Create Sales Order,創建銷售訂單 Accounting Entry for Asset,資產會計分錄 diff --git a/erpnext/translations/zh.csv b/erpnext/translations/zh.csv index 08f8d33578..604fcc0edc 100644 --- a/erpnext/translations/zh.csv +++ b/erpnext/translations/zh.csv @@ -2273,7 +2273,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,行{0}:请设置销售税和费用中的免税原因, Row {0}: Please set the Mode of Payment in Payment Schedule,行{0}:请在付款时间表中设置付款方式, Row {0}: Please set the correct code on Mode of Payment {1},行{0}:请在付款方式{1}上设置正确的代码, -Row {0}: Qty is mandatory,第{0}行的数量字段必填, Row {0}: Quality Inspection rejected for item {1},行{0}:项目{1}的质量检验被拒绝, Row {0}: UOM Conversion Factor is mandatory,行{0}:计量单位转换系数是必需的, Row {0}: select the workstation against the operation {1},行{0}:根据操作{1}选择工作站, @@ -3461,7 +3460,6 @@ Issue Type.,问题类型。, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",看起来服务器的条带配置存在问题。如果失败,这笔款项将退还给您的账户。, Item Reported,项目报告, Item listing removed,项目清单已删除, -Item quantity can not be zero,物品数量不能为零, Item taxes updated,物品税已更新, Item {0}: {1} qty produced. ,项目{0}:产生了{1}数量。, Joining Date can not be greater than Leaving Date,加入日期不能大于离开日期, @@ -3633,6 +3631,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},第{0}行:成本中心{1}不属于公司{2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,行#{0}:对于工作订单{3}中的{2}数量的成品,未完成操作{1}。请通过工作卡{4}更新操作状态。, Row #{0}: Payment document is required to complete the transaction,行#{0}:完成交易需要付款文件, +Row #{0}: Quantity for Item {1} cannot be zero.,行 # {0}: 商品 {1} 的数量不能为零。 Row #{0}: Serial No {1} does not belong to Batch {2},行#{0}:序列号{1}不属于批次{2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,行#{0}:服务终止日期不能早于发票过帐日期, Row #{0}: Service Start Date cannot be greater than Service End Date,行#{0}:服务开始日期不能大于服务结束日期, diff --git a/erpnext/translations/zh_tw.csv b/erpnext/translations/zh_tw.csv index dd683c5a27..634662f770 100644 --- a/erpnext/translations/zh_tw.csv +++ b/erpnext/translations/zh_tw.csv @@ -2324,7 +2324,6 @@ Row {0}: Please check 'Is Advance' against Account {1} if this is an advance ent Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,行{0}:請設置銷售稅和費用中的免稅原因, Row {0}: Please set the Mode of Payment in Payment Schedule,行{0}:請在付款時間表中設置付款方式, Row {0}: Please set the correct code on Mode of Payment {1},行{0}:請在付款方式{1}上設置正確的代碼, -Row {0}: Qty is mandatory,列#{0}:數量是強制性的, Row {0}: Quality Inspection rejected for item {1},行{0}:項目{1}的質量檢驗被拒絕, Row {0}: UOM Conversion Factor is mandatory,行{0}:計量單位轉換係數是必需的, Row {0}: select the workstation against the operation {1},行{0}:根據操作{1}選擇工作站, @@ -3556,7 +3555,6 @@ Issue Type.,問題類型。, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.",看起來服務器的條帶配置存在問題。如果失敗,這筆款項將退還給您的賬戶。, Item Reported,項目報告, Item listing removed,項目清單已刪除, -Item quantity can not be zero,物品數量不能為零, Item taxes updated,物品稅已更新, Item {0}: {1} qty produced. ,項目{0}:產生了{1}數量。, Joining Date can not be greater than Leaving Date,加入日期不能大於離開日期, @@ -3752,6 +3750,7 @@ Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subco Row #{0}: Cost Center {1} does not belong to company {2},第{0}行:成本中心{1}不屬於公司{2}, Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,行#{0}:對於工作訂單{3}中的{2}數量的成品,未完成操作{1}。請通過工作卡{4}更新操作狀態。, Row #{0}: Payment document is required to complete the transaction,第{0}行:需要付款憑證才能完成交易, +Row #{0}: Quantity for Item {1} cannot be zero.,行 # {0}: 商品 {1} 的數量不能為零。 Row #{0}: Serial No {1} does not belong to Batch {2},行#{0}:序列號{1}不屬於批次{2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,行#{0}:服務終止日期不能早於發票過帳日期, Row #{0}: Service Start Date cannot be greater than Service End Date,行#{0}:服務開始日期不能大於服務結束日期, From 7da9ffa3bd072fbfc9627e6eb5afb3dd3078f560 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 3 Jan 2024 17:59:15 +0530 Subject: [PATCH 04/55] fix: typerror on multi select dialog --- erpnext/public/js/utils.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index 866e94f95a..598167b337 100755 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -865,16 +865,20 @@ erpnext.utils.map_current_doc = function(opts) { } if (opts.source_doctype) { + let data_fields = []; + if(opts.source_doctype == "Purchase Receipt") { + data_fields.push({ + fieldname: 'merge_taxes', + fieldtype: 'Check', + label: __('Merge taxes from multiple documents'), + }); + } const d = new frappe.ui.form.MultiSelectDialog({ doctype: opts.source_doctype, target: opts.target, date_field: opts.date_field || undefined, setters: opts.setters, - data_fields: [{ - fieldname: 'merge_taxes', - fieldtype: 'Check', - label: __('Merge taxes from multiple documents'), - }], + data_fields: data_fields, get_query: opts.get_query, add_filters_group: 1, allow_child_item_selection: opts.allow_child_item_selection, @@ -888,7 +892,10 @@ erpnext.utils.map_current_doc = function(opts) { return; } opts.source_name = values; - opts.args = args; + if (opts.allow_child_item_selection || opts.source_doctype == "Purchase Receipt") { + // args contains filtered child docnames + opts.args = args; + } d.dialog.hide(); _map(); }, From e84c9f7c51fc6e8c5c631c74131f9290624b2a05 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Wed, 3 Jan 2024 20:10:19 +0530 Subject: [PATCH 05/55] fix(UX): dont override framework's permission check messages (#39118) --- erpnext/accounts/party.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 008614e6d3..caa1d8583b 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -114,14 +114,12 @@ def _get_party_details( set_account_and_due_date(party, account, party_type, company, posting_date, bill_date, doctype) ) party = party_details[party_type.lower()] - - if not ignore_permissions and not ( - frappe.has_permission(party_type, "read", party) - or frappe.has_permission(party_type, "select", party) - ): - frappe.throw(_("Not permitted for {0}").format(party), frappe.PermissionError) - party = frappe.get_doc(party_type, party) + + if not ignore_permissions: + ptype = "select" if frappe.only_has_select_perm(party_type) else "read" + frappe.has_permission(party_type, ptype, party, throw=True) + currency = party.get("default_currency") or currency or get_company_currency(company) party_address, shipping_address = set_address_details( From 0f1be03faf96aaf83063e28dc57a5e016944683c Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 3 Jan 2024 20:56:12 +0530 Subject: [PATCH 06/55] fix: ignore cancelled payments in Sales/Purchase Register --- erpnext/accounts/report/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/utils.py b/erpnext/accounts/report/utils.py index 9f96449ba7..0912c7270d 100644 --- a/erpnext/accounts/report/utils.py +++ b/erpnext/accounts/report/utils.py @@ -251,6 +251,7 @@ def get_journal_entries(filters, args): ) .where( (je.voucher_type == "Journal Entry") + & (je.docstatus == 1) & (journal_account.party == filters.get(args.party)) & (journal_account.account.isin(args.party_account)) ) @@ -281,7 +282,9 @@ def get_payment_entries(filters, args): pe.cost_center, ) .where( - (pe.party == filters.get(args.party)) & (pe[args.account_fieldname].isin(args.party_account)) + (pe.docstatus == 1) + & (pe.party == filters.get(args.party)) + & (pe[args.account_fieldname].isin(args.party_account)) ) .orderby(pe.posting_date, pe.name, order=Order.desc) ) From 5e2669f4b6e8ed917cc8e882b49a4a617a854464 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 3 Jan 2024 21:43:38 +0530 Subject: [PATCH 07/55] feat: provision to close SCO --- .../subcontracting_order.js | 23 +++++++++++++++++++ .../subcontracting_order.json | 4 ++-- .../subcontracting_order.py | 5 ++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js index 587a3b4ebf..ae9a3252ef 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js @@ -101,9 +101,32 @@ frappe.ui.form.on('Subcontracting Order', { }, refresh: function (frm) { + if (frm.has_perm("submit")) { + if (frm.doc.status == "Closed") { + frm.add_custom_button(__('Re-open'), () => frm.events.update_subcontracting_order_status(frm), __("Status")); + } else if(flt(frm.doc.per_received, 2) < 100) { + frm.add_custom_button(__('Close'), () => frm.events.update_subcontracting_order_status(frm, "Closed"), __("Status")); + } + } + frm.trigger('get_materials_from_supplier'); }, + update_subcontracting_order_status(frm, status) { + frappe.call({ + method: "erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order.update_subcontracting_order_status", + args: { + sco: frm.doc.name, + status: status, + }, + callback: function (r) { + if (!r.exc) { + frm.reload_doc(); + } + }, + }); + }, + get_materials_from_supplier: function (frm) { let sco_rm_details = []; diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json index 28c52c9272..507e23365c 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json @@ -370,7 +370,7 @@ "in_standard_filter": 1, "label": "Status", "no_copy": 1, - "options": "Draft\nOpen\nPartially Received\nCompleted\nMaterial Transferred\nPartial Material Transferred\nCancelled", + "options": "Draft\nOpen\nPartially Received\nCompleted\nMaterial Transferred\nPartial Material Transferred\nCancelled\nClosed", "print_hide": 1, "read_only": 1, "reqd": 1, @@ -454,7 +454,7 @@ "icon": "fa fa-file-text", "is_submittable": 1, "links": [], - "modified": "2023-06-03 16:18:17.782538", + "modified": "2024-01-03 20:56:04.670380", "modified_by": "Administrator", "module": "Subcontracting", "name": "Subcontracting Order", diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index 0fe8c13efb..6690244325 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -68,6 +68,7 @@ class SubcontractingOrder(SubcontractingController): "Material Transferred", "Partial Material Transferred", "Cancelled", + "Closed", ] supplied_items: DF.Table[SubcontractingOrderSuppliedItem] supplier: DF.Link @@ -357,8 +358,8 @@ def get_mapped_subcontracting_receipt(source_name, target_doc=None): @frappe.whitelist() -def update_subcontracting_order_status(sco): +def update_subcontracting_order_status(sco, status=None): if isinstance(sco, str): sco = frappe.get_doc("Subcontracting Order", sco) - sco.update_status() + sco.update_status(status) From 9e973476b2a925d4557b3a6b17517e46d652ac20 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 3 Jan 2024 22:13:37 +0530 Subject: [PATCH 08/55] fix: don't allow to submit/cancel SCR against a closed SCO --- .../subcontracting_receipt/subcontracting_receipt.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py index 52bf13c78d..7c2a1f12e2 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py @@ -8,6 +8,7 @@ from frappe.utils import cint, flt, get_link_to_form, getdate, nowdate import erpnext from erpnext.accounts.utils import get_account_currency +from erpnext.buying.utils import check_on_hold_or_closed_status from erpnext.controllers.subcontracting_controller import SubcontractingController from erpnext.stock.stock_ledger import get_valuation_rate @@ -142,6 +143,7 @@ class SubcontractingReceipt(SubcontractingController): self.get_current_stock() def on_submit(self): + self.validate_closed_subcontracting_order() self.validate_available_qty_for_consumption() self.update_status_updater_args() self.update_prevdoc_status() @@ -165,6 +167,7 @@ class SubcontractingReceipt(SubcontractingController): "Repost Item Valuation", "Serial and Batch Bundle", ) + self.validate_closed_subcontracting_order() self.update_status_updater_args() self.update_prevdoc_status() self.set_consumed_qty_in_subcontract_order() @@ -175,6 +178,11 @@ class SubcontractingReceipt(SubcontractingController): self.update_status() self.delete_auto_created_batches() + def validate_closed_subcontracting_order(self): + for item in self.items: + if item.subcontracting_order: + check_on_hold_or_closed_status("Subcontracting Order", item.subcontracting_order) + def validate_items_qty(self): for item in self.items: if not (item.qty or item.rejected_qty): From 5bc2035bd082001e2552138a5df55554f2e6f8de Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 3 Jan 2024 22:20:06 +0530 Subject: [PATCH 09/55] fix: don't allow to submit/cancel SE against a closed SCO --- .../stock/doctype/stock_entry/stock_entry.py | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 2ccee94078..bccbc28087 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -24,6 +24,7 @@ from frappe.utils import ( import erpnext from erpnext.accounts.general_ledger import process_gl_map +from erpnext.buying.utils import check_on_hold_or_closed_status from erpnext.controllers.taxes_and_totals import init_landed_taxes_and_totals from erpnext.manufacturing.doctype.bom.bom import ( add_additional_cost, @@ -208,7 +209,6 @@ class StockEntry(StockController): self.validate_bom() self.set_process_loss_qty() self.validate_purchase_order() - self.validate_subcontracting_order() if self.purpose in ("Manufacture", "Repack"): self.mark_finished_and_scrap_items() @@ -274,6 +274,7 @@ class StockEntry(StockController): return False def on_submit(self): + self.validate_closed_subcontracting_order() self.update_stock_ledger() self.update_work_order() self.validate_subcontract_order() @@ -294,6 +295,7 @@ class StockEntry(StockController): self.set_material_request_transfer_status("Completed") def on_cancel(self): + self.validate_closed_subcontracting_order() self.update_subcontract_order_supplied_items() self.update_subcontracting_order_status() @@ -1203,19 +1205,9 @@ class StockEntry(StockController): ) ) - def validate_subcontracting_order(self): - if self.get("subcontracting_order") and self.purpose in [ - "Send to Subcontractor", - "Material Transfer", - ]: - sco_status = frappe.db.get_value("Subcontracting Order", self.subcontracting_order, "status") - - if sco_status == "Closed": - frappe.throw( - _("Cannot create Stock Entry against a closed Subcontracting Order {0}.").format( - self.subcontracting_order - ) - ) + def validate_closed_subcontracting_order(self): + if self.get("subcontracting_order"): + check_on_hold_or_closed_status("Subcontracting Order", self.subcontracting_order) def mark_finished_and_scrap_items(self): if self.purpose != "Repack" and any( From bb839b2924c2dd4c2a06b087d7624ca7aac08f04 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 3 Jan 2024 22:22:21 +0530 Subject: [PATCH 10/55] fix(ux): filter closed SCO in `Get Items From` dialog --- .../doctype/subcontracting_order/subcontracting_order_list.js | 2 +- .../doctype/subcontracting_receipt/subcontracting_receipt.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js index 7ca12642c5..ec54944a84 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js @@ -10,7 +10,7 @@ frappe.listview_settings['Subcontracting Order'] = { "Completed": "green", "Partial Material Transferred": "purple", "Material Transferred": "blue", - "Closed": "red", + "Closed": "green", "Cancelled": "red", }; return [__(doc.status), status_colors[doc.status], "status,=," + doc.status]; diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js index 575c4eda73..05357999a1 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js @@ -93,7 +93,8 @@ frappe.ui.form.on('Subcontracting Receipt', { get_query_filters: { docstatus: 1, per_received: ['<', 100], - company: frm.doc.company + company: frm.doc.company, + status: ['!=', 'Closed'], } }); }, __('Get Items From')); From 5b1571879cdb7859725bda2b0d32d9a4f57676e8 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 4 Jan 2024 10:48:01 +0530 Subject: [PATCH 11/55] fix: flaky demo test case --- erpnext/accounts/party.py | 4 +--- erpnext/controllers/accounts_controller.py | 6 ------ erpnext/setup/demo.py | 5 +++++ 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index caa1d8583b..fc9034b2ee 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -635,9 +635,7 @@ def get_due_date_from_template(template_name, posting_date, bill_date): return due_date -def validate_due_date( - posting_date, due_date, party_type, party, company=None, bill_date=None, template_name=None -): +def validate_due_date(posting_date, due_date, bill_date=None, template_name=None): if getdate(due_date) < getdate(posting_date): frappe.throw(_("Due Date cannot be before Posting / Supplier Invoice Date")) else: diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index de7a7f9da4..0409c68535 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -561,18 +561,12 @@ class AccountsController(TransactionBase): validate_due_date( self.posting_date, self.due_date, - "Customer", - self.customer, - self.company, self.payment_terms_template, ) elif self.doctype == "Purchase Invoice": validate_due_date( self.bill_date or self.posting_date, self.due_date, - "Supplier", - self.supplier, - self.company, self.bill_date, self.payment_terms_template, ) diff --git a/erpnext/setup/demo.py b/erpnext/setup/demo.py index 4bc98b91bd..df2c49b2b6 100644 --- a/erpnext/setup/demo.py +++ b/erpnext/setup/demo.py @@ -149,6 +149,11 @@ def convert_order_to_invoices(): invoice.set_posting_time = 1 invoice.posting_date = order.transaction_date invoice.due_date = order.transaction_date + invoice.bill_date = order.transaction_date + + if invoice.get("payment_schedule"): + invoice.payment_schedule[0].due_date = order.transaction_date + invoice.update_stock = 1 invoice.submit() From 277dade9f9a0a439d435dd6a53474aae67cd8f24 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 4 Jan 2024 11:22:42 +0530 Subject: [PATCH 12/55] fix: Subscription update patch --- .../patches/v14_0/update_invoicing_period_in_subscription.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v14_0/update_invoicing_period_in_subscription.py b/erpnext/patches/v14_0/update_invoicing_period_in_subscription.py index 2879e57e1a..b70548ccb7 100644 --- a/erpnext/patches/v14_0/update_invoicing_period_in_subscription.py +++ b/erpnext/patches/v14_0/update_invoicing_period_in_subscription.py @@ -4,5 +4,5 @@ import frappe def execute(): subscription = frappe.qb.DocType("Subscription") frappe.qb.update(subscription).set( - subscription.generate_invoice_at, "Beginning of the currency subscription period" + subscription.generate_invoice_at, "Beginning of the current subscription period" ).where(subscription.generate_invoice_at_period_start == 1).run() From e1b0fffd0c934d376562e3ba8707b38426ea09a1 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 4 Jan 2024 11:43:02 +0530 Subject: [PATCH 13/55] fix: don't set rate for non-stock item in Internal Transfer --- erpnext/controllers/selling_controller.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 919e459c9e..22b0d08c92 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -432,6 +432,9 @@ class SellingController(StockController): items = self.get("items") + (self.get("packed_items") or []) for d in items: + if not frappe.get_cached_value("Item", d.item_code, "is_stock_item"): + continue + if not self.get("return_against") or ( get_valuation_method(d.item_code) == "Moving Average" and self.get("is_return") ): From 57b6a987034522266caca853d4ee26316526e526 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 4 Jan 2024 12:20:53 +0530 Subject: [PATCH 14/55] test: internal transfer for non-stock item --- .../delivery_note/test_delivery_note.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py index 3abd1d9e5e..dae42895ed 100644 --- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py @@ -1518,6 +1518,25 @@ class TestDeliveryNote(FrappeTestCase): "Stock Settings", "auto_create_serial_and_batch_bundle_for_outward", 0 ) + def test_internal_transfer_for_non_stock_item(self): + from erpnext.selling.doctype.customer.test_customer import create_internal_customer + from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note + + item = make_item(properties={"is_stock_item": 0}).name + warehouse = "_Test Warehouse - _TC" + target = "Stores - _TC" + company = "_Test Company" + customer = create_internal_customer(represents_company=company) + rate = 100 + + so = make_sales_order(item_code=item, qty=1, rate=rate, customer=customer, warehouse=warehouse) + dn = make_delivery_note(so.name) + dn.items[0].target_warehouse = target + dn.save().submit() + + self.assertEqual(so.items[0].rate, rate) + self.assertEqual(dn.items[0].rate, so.items[0].rate) + def create_delivery_note(**args): dn = frappe.new_doc("Delivery Note") From 0d01bd8a5a49f5bba80ef797d5823f762e0fc86a Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 4 Jan 2024 12:34:25 +0530 Subject: [PATCH 15/55] fix: don't close PO on SCO close --- .../doctype/subcontracting_order/subcontracting_order.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index 6690244325..bc3061169a 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -7,7 +7,6 @@ from frappe.model.mapper import get_mapped_doc from frappe.utils import flt from erpnext.buying.doctype.purchase_order.purchase_order import is_subcontracting_order_created -from erpnext.buying.doctype.purchase_order.purchase_order import update_status as update_po_status from erpnext.controllers.subcontracting_controller import SubcontractingController from erpnext.stock.stock_balance import update_bin_qty from erpnext.stock.utils import get_bin @@ -310,9 +309,6 @@ class SubcontractingOrder(SubcontractingController): "Subcontracting Order", self.name, "status", status, update_modified=update_modified ) - if status == "Closed": - update_po_status("Closed", self.purchase_order) - @frappe.whitelist() def make_subcontracting_receipt(source_name, target_doc=None): From 245effcccd3866bac2974023d37cd48b89849aeb Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 4 Jan 2024 12:48:36 +0530 Subject: [PATCH 16/55] fix: update qty on SCO status change --- .../subcontracting_order/subcontracting_order.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index bc3061169a..14f9bfd5dc 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -112,16 +112,10 @@ class SubcontractingOrder(SubcontractingController): def on_submit(self): self.update_prevdoc_status() - self.update_requested_qty() - self.update_ordered_qty_for_subcontracting() - self.update_reserved_qty_for_subcontracting() self.update_status() def on_cancel(self): self.update_prevdoc_status() - self.update_requested_qty() - self.update_ordered_qty_for_subcontracting() - self.update_reserved_qty_for_subcontracting() self.update_status() def validate_purchase_order_for_subcontracting(self): @@ -305,9 +299,11 @@ class SubcontractingOrder(SubcontractingController): status = "Cancelled" if status: - frappe.db.set_value( - "Subcontracting Order", self.name, "status", status, update_modified=update_modified - ) + self.db_set("status", status, update_modified=update_modified) + + self.update_requested_qty() + self.update_ordered_qty_for_subcontracting() + self.update_reserved_qty_for_subcontracting() @frappe.whitelist() From 784b6dcfea2aa9eb3fe557bb4f87cdc1f7341560 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 4 Jan 2024 13:05:17 +0530 Subject: [PATCH 17/55] fix: don't allow to reopen SCO if PO is closed --- .../doctype/subcontracting_order/subcontracting_order.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index 14f9bfd5dc..3daa6335f3 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -7,6 +7,7 @@ from frappe.model.mapper import get_mapped_doc from frappe.utils import flt from erpnext.buying.doctype.purchase_order.purchase_order import is_subcontracting_order_created +from erpnext.buying.utils import check_on_hold_or_closed_status from erpnext.controllers.subcontracting_controller import SubcontractingController from erpnext.stock.stock_balance import update_bin_qty from erpnext.stock.utils import get_bin @@ -271,6 +272,9 @@ class SubcontractingOrder(SubcontractingController): self.set_missing_values() def update_status(self, status=None, update_modified=True): + if self.status == "Closed": + check_on_hold_or_closed_status("Purchase Order", self.purchase_order) + if self.docstatus >= 1 and not status: if self.docstatus == 1: if self.status == "Draft": From 0819675fce1cffe3a930fe2cbd015998e4e7c00d Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 4 Jan 2024 13:44:53 +0530 Subject: [PATCH 18/55] fix: auto close and reopen SCO based on PO status --- .../buying/doctype/purchase_order/purchase_order.py | 12 ++++++++++++ .../subcontracting_order/subcontracting_order.py | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 2efb46e9d3..b830e7d204 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -452,6 +452,7 @@ class PurchaseOrder(BuyingController): self.update_requested_qty() self.update_ordered_qty() self.update_reserved_qty_for_subcontract() + self.update_subcontracting_order_status() self.notify_update() clear_doctype_notifications(self) @@ -627,6 +628,17 @@ class PurchaseOrder(BuyingController): if frappe.db.get_single_value("Buying Settings", "auto_create_subcontracting_order"): make_subcontracting_order(self.name, save=True, notify=True) + def update_subcontracting_order_status(self): + from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + update_subcontracting_order_status as update_sco_status, + ) + + if self.is_subcontracted and not self.is_old_subcontracting_flow: + sco = frappe.db.get_value("Subcontracting Order", {"purchase_order": self.name, "docstatus": 1}) + + if sco: + update_sco_status(sco, "Closed" if self.status == "Closed" else None) + def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor=1.0): """get last purchase rate for an item""" diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index 3daa6335f3..309e4fe643 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -272,7 +272,7 @@ class SubcontractingOrder(SubcontractingController): self.set_missing_values() def update_status(self, status=None, update_modified=True): - if self.status == "Closed": + if self.status == "Closed" and self.status != status: check_on_hold_or_closed_status("Purchase Order", self.purchase_order) if self.docstatus >= 1 and not status: @@ -302,7 +302,7 @@ class SubcontractingOrder(SubcontractingController): elif self.docstatus == 2: status = "Cancelled" - if status: + if status and self.status != status: self.db_set("status", status, update_modified=update_modified) self.update_requested_qty() From f09e2130a1a3ca999247f89f76c20efcc003b450 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Thu, 4 Jan 2024 14:58:02 +0530 Subject: [PATCH 19/55] fix: serial / batch barcode scanner (#39114) --- erpnext/controllers/accounts_controller.py | 14 ++ erpnext/public/js/controllers/transaction.js | 30 ++- erpnext/public/js/utils/barcode_scanner.js | 237 ++++++++++++++---- .../serial_and_batch_bundle.py | 63 ++++- erpnext/stock/serial_batch_bundle.py | 2 +- erpnext/stock/utils.py | 7 + 6 files changed, 286 insertions(+), 67 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 0409c68535..82b5416ef5 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -129,6 +129,17 @@ class AccountsController(TransactionBase): if self.doctype in relevant_docs: self.set_payment_schedule() + def remove_bundle_for_non_stock_invoices(self): + has_sabb = False + if self.doctype in ("Sales Invoice", "Purchase Invoice") and not self.update_stock: + for item in self.get("items"): + if item.serial_and_batch_bundle: + item.serial_and_batch_bundle = None + has_sabb = True + + if has_sabb: + self.remove_serial_and_batch_bundle() + def ensure_supplier_is_not_blocked(self): is_supplier_payment = self.doctype == "Payment Entry" and self.party_type == "Supplier" is_buying_invoice = self.doctype in ["Purchase Invoice", "Purchase Order"] @@ -156,6 +167,9 @@ class AccountsController(TransactionBase): if self.get("_action") and self._action != "update_after_submit": self.set_missing_values(for_validate=True) + if self.get("_action") == "submit": + self.remove_bundle_for_non_stock_invoices() + self.ensure_supplier_is_not_blocked() self.validate_date_with_fiscal_year() diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 9427c38064..4d8f6839b4 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -454,7 +454,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe item.weight_uom = ''; item.conversion_factor = 0; - if(['Sales Invoice'].includes(this.frm.doc.doctype)) { + if(['Sales Invoice', 'Purchase Invoice'].includes(this.frm.doc.doctype)) { update_stock = cint(me.frm.doc.update_stock); show_batch_dialog = update_stock; @@ -545,7 +545,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe }, () => me.toggle_conversion_factor(item), () => { - if (show_batch_dialog) + if (show_batch_dialog && !frappe.flags.trigger_from_barcode_scanner) return frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"]) .then((r) => { if (r.message && @@ -1239,6 +1239,20 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } } + sync_bundle_data() { + let doctypes = ["Sales Invoice", "Purchase Invoice", "Delivery Note", "Purchase Receipt"]; + + if (this.frm.is_new() && doctypes.includes(this.frm.doc.doctype)) { + const barcode_scanner = new erpnext.utils.BarcodeScanner({frm:this.frm}); + barcode_scanner.sync_bundle_data(); + barcode_scanner.remove_item_from_localstorage(); + } + } + + before_save(doc) { + this.sync_bundle_data(); + } + service_start_date(frm, cdt, cdn) { var child = locals[cdt][cdn]; @@ -1576,6 +1590,18 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe return item_list; } + items_delete() { + this.update_localstorage_scanned_data(); + } + + update_localstorage_scanned_data() { + let doctypes = ["Sales Invoice", "Purchase Invoice", "Delivery Note", "Purchase Receipt"]; + if (this.frm.is_new() && doctypes.includes(this.frm.doc.doctype)) { + const barcode_scanner = new erpnext.utils.BarcodeScanner({frm:this.frm}); + barcode_scanner.update_localstorage_scanned_data(); + } + } + _set_values_for_item_list(children) { const items_rule_dict = {}; diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js index a1ebfe9aa4..cf7fab89ff 100644 --- a/erpnext/public/js/utils/barcode_scanner.js +++ b/erpnext/public/js/utils/barcode_scanner.js @@ -7,8 +7,6 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { this.scan_barcode_field = this.frm.fields_dict[this.scan_field_name]; this.barcode_field = opts.barcode_field || "barcode"; - this.serial_no_field = opts.serial_no_field || "serial_no"; - this.batch_no_field = opts.batch_no_field || "batch_no"; this.uom_field = opts.uom_field || "uom"; this.qty_field = opts.qty_field || "qty"; // field name on row which defines max quantity to be scanned e.g. picklist @@ -84,6 +82,7 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { update_table(data) { return new Promise((resolve, reject) => { let cur_grid = this.frm.fields_dict[this.items_table_name].grid; + frappe.flags.trigger_from_barcode_scanner = true; const {item_code, barcode, batch_no, serial_no, uom} = data; @@ -106,50 +105,38 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { this.frm.has_items = false; } - if (this.is_duplicate_serial_no(row, serial_no)) { + if (serial_no && this.is_duplicate_serial_no(row, item_code, serial_no)) { this.clean_up(); reject(); return; } frappe.run_serially([ - () => this.set_selector_trigger_flag(data), - () => this.set_serial_no(row, serial_no), - () => this.set_batch_no(row, batch_no), + () => this.set_serial_and_batch(row, item_code, serial_no, batch_no), () => this.set_barcode(row, barcode), () => this.set_item(row, item_code, barcode, batch_no, serial_no).then(qty => { this.show_scan_message(row.idx, row.item_code, qty); }), () => this.set_barcode_uom(row, uom), () => this.clean_up(), - () => this.revert_selector_flag(), - () => resolve(row) + () => resolve(row), + () => { + if (row.serial_and_batch_bundle && !this.frm.is_new()) { + this.frm.save(); + } + + frappe.flags.trigger_from_barcode_scanner = false; + } ]); }); } - // batch and serial selector is reduandant when all info can be added by scan - // this flag on item row is used by transaction.js to avoid triggering selector - set_selector_trigger_flag(data) { - const {has_batch_no, has_serial_no} = data; - - const require_selecting_batch = has_batch_no; - const require_selecting_serial = has_serial_no; - - if (!(require_selecting_batch || require_selecting_serial)) { - frappe.flags.hide_serial_batch_dialog = true; - } - } - - revert_selector_flag() { - frappe.flags.hide_serial_batch_dialog = false; - } - set_item(row, item_code, barcode, batch_no, serial_no) { return new Promise(resolve => { const increment = async (value = 1) => { const item_data = {item_code: item_code}; item_data[this.qty_field] = Number((row[this.qty_field] || 0)) + Number(value); + frappe.flags.trigger_from_barcode_scanner = true; await frappe.model.set_value(row.doctype, row.name, item_data); return value; }; @@ -158,8 +145,6 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { frappe.prompt(__("Please enter quantity for item {0}", [item_code]), ({value}) => { increment(value).then((value) => resolve(value)); }); - } else if (this.frm.has_items) { - this.prepare_item_for_scan(row, item_code, barcode, batch_no, serial_no); } else { increment().then((value) => resolve(value)); } @@ -182,9 +167,8 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { frappe.model.set_value(row.doctype, row.name, item_data); frappe.run_serially([ - () => this.set_batch_no(row, this.dialog.get_value("batch_no")), () => this.set_barcode(row, this.dialog.get_value("barcode")), - () => this.set_serial_no(row, this.dialog.get_value("serial_no")), + () => this.set_serial_and_batch(row, item_code, this.dialog.get_value("serial_no"), this.dialog.get_value("batch_no")), () => this.add_child_for_remaining_qty(row), () => this.clean_up() ]); @@ -338,32 +322,144 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { } } - async set_serial_no(row, serial_no) { - if (serial_no && frappe.meta.has_field(row.doctype, this.serial_no_field)) { - const existing_serial_nos = row[this.serial_no_field]; - let new_serial_nos = ""; - - if (!!existing_serial_nos) { - new_serial_nos = existing_serial_nos + "\n" + serial_no; - } else { - new_serial_nos = serial_no; - } - await frappe.model.set_value(row.doctype, row.name, this.serial_no_field, new_serial_nos); + async set_serial_and_batch(row, item_code, serial_no, batch_no) { + if (this.frm.is_new() || !row.serial_and_batch_bundle) { + this.set_bundle_in_localstorage(row, item_code, serial_no, batch_no); + } else if(row.serial_and_batch_bundle) { + frappe.call({ + method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.update_serial_or_batch", + args: { + bundle_id: row.serial_and_batch_bundle, + serial_no: serial_no, + batch_no: batch_no, + }, + }) } } + get_key_for_localstorage() { + let parts = this.frm.doc.name.split("-"); + return parts[parts.length - 1] + this.frm.doc.doctype; + } + + update_localstorage_scanned_data() { + let docname = this.frm.doc.name + if (localStorage[docname]) { + let items = JSON.parse(localStorage[docname]); + let existing_items = this.frm.doc.items.map(d => d.item_code); + if (!existing_items.length) { + localStorage.removeItem(docname); + return; + } + + for (let item_code in items) { + if (!existing_items.includes(item_code)) { + delete items[item_code]; + } + } + + localStorage[docname] = JSON.stringify(items); + } + } + + async set_bundle_in_localstorage(row, item_code, serial_no, batch_no) { + let docname = this.frm.doc.name + + let entries = JSON.parse(localStorage.getItem(docname)); + if (!entries) { + entries = {}; + } + + let key = item_code; + if (!entries[key]) { + entries[key] = []; + } + + let existing_row = []; + if (!serial_no && batch_no) { + existing_row = entries[key].filter((e) => e.batch_no === batch_no); + if (existing_row.length) { + existing_row[0].qty += 1; + } + } else if (serial_no) { + existing_row = entries[key].filter((e) => e.serial_no === serial_no); + if (existing_row.length) { + frappe.throw(__("Serial No {0} has already scanned.", [serial_no])); + } + } + + if (!existing_row.length) { + entries[key].push({ + "serial_no": serial_no, + "batch_no": batch_no, + "qty": 1 + }); + } + + localStorage.setItem(docname, JSON.stringify(entries)); + + // Auto remove from localstorage after 1 hour + setTimeout(() => { + localStorage.removeItem(docname); + }, 3600000) + } + + remove_item_from_localstorage() { + let docname = this.frm.doc.name; + if (localStorage[docname]) { + localStorage.removeItem(docname); + } + } + + async sync_bundle_data() { + let docname = this.frm.doc.name; + + if (localStorage[docname]) { + let entries = JSON.parse(localStorage[docname]); + if (entries) { + for (let entry in entries) { + let row = this.frm.doc.items.filter((item) => { + if (item.item_code === entry) { + return true; + } + })[0]; + + if (row) { + this.create_serial_and_batch_bundle(row, entries, entry) + .then(() => { + if (!entries) { + localStorage.removeItem(docname); + } + }); + } + } + } + } + } + + async create_serial_and_batch_bundle(row, entries, key) { + frappe.call({ + method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.add_serial_batch_ledgers", + args: { + entries: entries[key], + child_row: row, + doc: this.frm.doc, + warehouse: row.warehouse, + do_not_save: 1 + }, + callback: function(r) { + row.serial_and_batch_bundle = r.message.name; + delete entries[key]; + } + }) + } + async set_barcode_uom(row, uom) { if (uom && frappe.meta.has_field(row.doctype, this.uom_field)) { await frappe.model.set_value(row.doctype, row.name, this.uom_field, uom); } } - async set_batch_no(row, batch_no) { - if (batch_no && frappe.meta.has_field(row.doctype, this.batch_no_field)) { - await frappe.model.set_value(row.doctype, row.name, this.batch_no_field, batch_no); - } - } - async set_barcode(row, barcode) { if (barcode && frappe.meta.has_field(row.doctype, this.barcode_field)) { await frappe.model.set_value(row.doctype, row.name, this.barcode_field, barcode); @@ -379,13 +475,52 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { } } - is_duplicate_serial_no(row, serial_no) { - const is_duplicate = row[this.serial_no_field]?.includes(serial_no); + is_duplicate_serial_no(row, item_code, serial_no) { + if (this.frm.is_new() || !row.serial_and_batch_bundle) { + let is_duplicate = this.check_duplicate_serial_no_in_localstorage(item_code, serial_no); + if (is_duplicate) { + this.show_alert(__("Serial No {0} is already added", [serial_no]), "orange"); + } - if (is_duplicate) { - this.show_alert(__("Serial No {0} is already added", [serial_no]), "orange"); + return is_duplicate; + } else if (row.serial_and_batch_bundle) { + this.check_duplicate_serial_no_in_db(row, serial_no, (r) => { + if (r.message) { + this.show_alert(__("Serial No {0} is already added", [serial_no]), "orange"); + } + + return r.message; + }) } - return is_duplicate; + } + + async check_duplicate_serial_no_in_db(row, serial_no, response) { + frappe.call({ + method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.is_duplicate_serial_no", + args: { + serial_no: serial_no, + bundle_id: row.serial_and_batch_bundle + }, + callback(r) { + response(r); + } + }) + } + + check_duplicate_serial_no_in_localstorage(item_code, serial_no) { + let docname = this.frm.doc.name + let entries = JSON.parse(localStorage.getItem(docname)); + + if (!entries) { + return false; + } + + let existing_row = []; + if (entries[item_code]) { + existing_row = entries[item_code].filter((e) => e.serial_no === serial_no); + } + + return existing_row.length; } get_row_to_modify_on_scan(item_code, batch_no, uom, barcode) { diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py index 218406f56f..eede928827 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py @@ -729,19 +729,13 @@ class SerialandBatchBundle(Document): def before_cancel(self): self.delink_serial_and_batch_bundle() - self.clear_table() def delink_serial_and_batch_bundle(self): - self.voucher_no = None - sles = frappe.get_all("Stock Ledger Entry", filters={"serial_and_batch_bundle": self.name}) for sle in sles: frappe.db.set_value("Stock Ledger Entry", sle.name, "serial_and_batch_bundle", None) - def clear_table(self): - self.set("entries", []) - @property def child_table(self): if self.voucher_type == "Job Card": @@ -876,7 +870,6 @@ class SerialandBatchBundle(Document): self.validate_voucher_no_docstatus() self.delink_refernce_from_voucher() self.delink_reference_from_batch() - self.clear_table() @frappe.whitelist() def add_serial_batch(self, data): @@ -1156,7 +1149,7 @@ def get_filters_for_bundle(item_code=None, docstatus=None, voucher_no=None, name @frappe.whitelist() -def add_serial_batch_ledgers(entries, child_row, doc, warehouse) -> object: +def add_serial_batch_ledgers(entries, child_row, doc, warehouse, do_not_save=False) -> object: if isinstance(child_row, str): child_row = frappe._dict(parse_json(child_row)) @@ -1170,20 +1163,23 @@ def add_serial_batch_ledgers(entries, child_row, doc, warehouse) -> object: if frappe.db.exists("Serial and Batch Bundle", child_row.serial_and_batch_bundle): sb_doc = update_serial_batch_no_ledgers(entries, child_row, parent_doc, warehouse) else: - sb_doc = create_serial_batch_no_ledgers(entries, child_row, parent_doc, warehouse) + sb_doc = create_serial_batch_no_ledgers( + entries, child_row, parent_doc, warehouse, do_not_save=do_not_save + ) return sb_doc -def create_serial_batch_no_ledgers(entries, child_row, parent_doc, warehouse=None) -> object: +def create_serial_batch_no_ledgers( + entries, child_row, parent_doc, warehouse=None, do_not_save=False +) -> object: warehouse = warehouse or ( child_row.rejected_warehouse if child_row.is_rejected else child_row.warehouse ) - type_of_transaction = child_row.type_of_transaction + type_of_transaction = get_type_of_transaction(parent_doc, child_row) if parent_doc.get("doctype") == "Stock Entry": - type_of_transaction = "Outward" if child_row.s_warehouse else "Inward" warehouse = warehouse or child_row.s_warehouse or child_row.t_warehouse doc = frappe.get_doc( @@ -1214,13 +1210,30 @@ def create_serial_batch_no_ledgers(entries, child_row, parent_doc, warehouse=Non doc.save() - frappe.db.set_value(child_row.doctype, child_row.name, "serial_and_batch_bundle", doc.name) + if do_not_save: + frappe.db.set_value(child_row.doctype, child_row.name, "serial_and_batch_bundle", doc.name) frappe.msgprint(_("Serial and Batch Bundle created"), alert=True) return doc +def get_type_of_transaction(parent_doc, child_row): + type_of_transaction = child_row.type_of_transaction + if parent_doc.get("doctype") == "Stock Entry": + type_of_transaction = "Outward" if child_row.s_warehouse else "Inward" + + if not type_of_transaction: + type_of_transaction = "Outward" + if parent_doc.get("doctype") in ["Purchase Receipt", "Purchase Invoice"]: + type_of_transaction = "Inward" + + if parent_doc.get("is_return"): + type_of_transaction = "Inward" if type_of_transaction == "Outward" else "Outward" + + return type_of_transaction + + def update_serial_batch_no_ledgers(entries, child_row, parent_doc, warehouse=None) -> object: doc = frappe.get_doc("Serial and Batch Bundle", child_row.serial_and_batch_bundle) doc.voucher_detail_no = child_row.name @@ -1247,6 +1260,25 @@ def update_serial_batch_no_ledgers(entries, child_row, parent_doc, warehouse=Non return doc +@frappe.whitelist() +def update_serial_or_batch(bundle_id, serial_no=None, batch_no=None): + if batch_no and not serial_no: + if qty := frappe.db.get_value( + "Serial and Batch Entry", {"parent": bundle_id, "batch_no": batch_no}, "qty" + ): + frappe.db.set_value( + "Serial and Batch Entry", {"parent": bundle_id, "batch_no": batch_no}, "qty", qty + 1 + ) + return + + doc = frappe.get_cached_doc("Serial and Batch Bundle", bundle_id) + if not serial_no and not batch_no: + return + + doc.append("entries", {"serial_no": serial_no, "batch_no": batch_no, "qty": 1}) + doc.save(ignore_permissions=True) + + def get_serial_and_batch_ledger(**kwargs): kwargs = frappe._dict(kwargs) @@ -2032,3 +2064,8 @@ def get_stock_ledgers_batches(kwargs): @frappe.whitelist() def get_batch_no_from_serial_no(serial_no): return frappe.get_cached_value("Serial No", serial_no, "batch_no") + + +@frappe.whitelist() +def is_duplicate_serial_no(bundle_id, serial_no): + return frappe.db.exists("Serial and Batch Entry", {"parent": bundle_id, "serial_no": serial_no}) diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 39df2279cd..4cfe5d817e 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -209,7 +209,7 @@ class SerialBatchBundle: frappe.db.set_value( "Serial and Batch Bundle", {"voucher_no": self.sle.voucher_no, "voucher_type": self.sle.voucher_type}, - {"is_cancelled": 1, "voucher_no": ""}, + {"is_cancelled": 1}, ) if self.sle.serial_and_batch_bundle: diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index bd0d4697c9..4b0e2845c4 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -591,6 +591,13 @@ def scan_barcode(search_value: str) -> BarcodeScanResult: as_dict=True, ) if batch_no_data: + if frappe.get_cached_value("Item", batch_no_data.item_code, "has_serial_no"): + frappe.throw( + _( + "Batch No {0} is linked with Item {1} which has serial no. Please scan serial no instead." + ).format(search_value, batch_no_data.item_code) + ) + _update_item_info(batch_no_data) set_cache(batch_no_data) return batch_no_data From cdd5441435ee448d3efb2155a93865ec29bbf8ab Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 4 Jan 2024 15:15:55 +0530 Subject: [PATCH 20/55] fix(text): test_update_status --- .../subcontracting_order/subcontracting_order.js | 2 +- .../subcontracting_order/subcontracting_order.py | 5 ----- .../test_subcontracting_order.py | 13 ++++++------- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js index ae9a3252ef..4c8a0ad60e 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js @@ -101,7 +101,7 @@ frappe.ui.form.on('Subcontracting Order', { }, refresh: function (frm) { - if (frm.has_perm("submit")) { + if (frm.doc.docstatus == 1 && frm.has_perm("submit")) { if (frm.doc.status == "Closed") { frm.add_custom_button(__('Re-open'), () => frm.events.update_subcontracting_order_status(frm), __("Status")); } else if(flt(frm.doc.per_received, 2) < 100) { diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py index 309e4fe643..daccbbbd0f 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -283,11 +283,6 @@ class SubcontractingOrder(SubcontractingController): status = "Completed" elif self.per_received > 0 and self.per_received < 100: status = "Partially Received" - for item in self.supplied_items: - if not item.returned_qty or (item.supplied_qty - item.consumed_qty - item.returned_qty) > 0: - break - else: - status = "Closed" else: total_required_qty = total_supplied_qty = 0 for item in self.supplied_items: diff --git a/erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py index 37dabf1bfb..6c0ee45d9c 100644 --- a/erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py +++ b/erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py @@ -95,14 +95,14 @@ class TestSubcontractingOrder(FrappeTestCase): self.assertEqual(sco.status, "Partially Received") # Closed - ste = get_materials_from_supplier(sco.name, [d.name for d in sco.supplied_items]) - ste.save() - ste.submit() - sco.load_from_db() + sco.update_status("Closed") self.assertEqual(sco.status, "Closed") - ste.cancel() - sco.load_from_db() + scr = make_subcontracting_receipt(sco.name) + scr.save() + self.assertRaises(frappe.exceptions.ValidationError, scr.submit) + sco.update_status() self.assertEqual(sco.status, "Partially Received") + scr.cancel() # Completed scr = make_subcontracting_receipt(sco.name) @@ -564,7 +564,6 @@ class TestSubcontractingOrder(FrappeTestCase): sco.load_from_db() - self.assertEqual(sco.status, "Closed") self.assertEqual(sco.supplied_items[0].returned_qty, 5) def test_ordered_qty_for_subcontracting_order(self): From e912e9597dbd83724afbcd00f3b2acd75b50a8f0 Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Thu, 4 Jan 2024 13:33:28 +0100 Subject: [PATCH 21/55] fix(Employee): treeview (#39126) --- erpnext/setup/doctype/employee/employee.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/erpnext/setup/doctype/employee/employee.json b/erpnext/setup/doctype/employee/employee.json index 1143ccb7b1..daf2df5a59 100644 --- a/erpnext/setup/doctype/employee/employee.json +++ b/erpnext/setup/doctype/employee/employee.json @@ -616,8 +616,8 @@ "fieldname": "relieving_date", "fieldtype": "Date", "label": "Relieving Date", - "no_copy": 1, "mandatory_depends_on": "eval:doc.status == \"Left\"", + "no_copy": 1, "oldfieldname": "relieving_date", "oldfieldtype": "Date" }, @@ -822,12 +822,14 @@ "icon": "fa fa-user", "idx": 24, "image_field": "image", + "is_tree": 1, "links": [], - "modified": "2023-10-04 10:57:05.174592", + "modified": "2024-01-03 17:36:20.984421", "modified_by": "Administrator", "module": "Setup", "name": "Employee", "naming_rule": "By \"Naming Series\" field", + "nsm_parent_field": "reports_to", "owner": "Administrator", "permissions": [ { @@ -860,7 +862,6 @@ "read": 1, "report": 1, "role": "HR Manager", - "set_user_permissions": 1, "share": 1, "write": 1 } @@ -871,4 +872,4 @@ "sort_order": "DESC", "states": [], "title_field": "employee_name" -} +} \ No newline at end of file From 68c0e188e8a8e6adcce629ce9abc407fe4ae3a86 Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Thu, 4 Jan 2024 13:42:41 +0100 Subject: [PATCH 22/55] fix: remove `parent_field` parameter from calls to `rebuild_tree` (#39146) fix: remove parent_field parameter from calls to rebuild_tree The parent_field parameter became redundant with https://github.com/frappe/frappe/pull/24107 --- .../doctype/account/chart_of_accounts/chart_of_accounts.py | 2 +- .../v11_0/create_department_records_for_each_company.py | 2 +- erpnext/patches/v11_0/make_location_from_warehouse.py | 2 +- erpnext/patches/v11_0/rebuild_tree_for_company.py | 2 +- .../patches/v11_0/rename_supplier_type_to_supplier_group.py | 2 +- erpnext/patches/v11_0/update_department_lft_rgt.py | 2 +- erpnext/setup/doctype/company/company.py | 4 ++-- erpnext/setup/doctype/item_group/test_item_group.py | 2 +- erpnext/stock/__init__.py | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py index 9e67c4cf0d..9f56455990 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py +++ b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py @@ -74,7 +74,7 @@ def create_charts( # after all accounts are already inserted. frappe.local.flags.ignore_update_nsm = True _import_accounts(chart, None, None, root_account=True) - rebuild_tree("Account", "parent_account") + rebuild_tree("Account") frappe.local.flags.ignore_update_nsm = False diff --git a/erpnext/patches/v11_0/create_department_records_for_each_company.py b/erpnext/patches/v11_0/create_department_records_for_each_company.py index 84be2bee9d..7a0641d7c8 100644 --- a/erpnext/patches/v11_0/create_department_records_for_each_company.py +++ b/erpnext/patches/v11_0/create_department_records_for_each_company.py @@ -35,7 +35,7 @@ def execute(): # append list of new department for each company comp_dict[company.name][department.name] = copy_doc.name - rebuild_tree("Department", "parent_department") + rebuild_tree("Department") doctypes = ["Asset", "Employee", "Payroll Entry", "Staffing Plan", "Job Opening"] for d in doctypes: diff --git a/erpnext/patches/v11_0/make_location_from_warehouse.py b/erpnext/patches/v11_0/make_location_from_warehouse.py index c863bb7ecf..8d9c8d8ef6 100644 --- a/erpnext/patches/v11_0/make_location_from_warehouse.py +++ b/erpnext/patches/v11_0/make_location_from_warehouse.py @@ -27,7 +27,7 @@ def execute(): except frappe.DuplicateEntryError: continue - rebuild_tree("Location", "parent_location") + rebuild_tree("Location") def get_parent_warehouse_name(warehouse): diff --git a/erpnext/patches/v11_0/rebuild_tree_for_company.py b/erpnext/patches/v11_0/rebuild_tree_for_company.py index fc06c5d30d..a9b23445e9 100644 --- a/erpnext/patches/v11_0/rebuild_tree_for_company.py +++ b/erpnext/patches/v11_0/rebuild_tree_for_company.py @@ -4,4 +4,4 @@ from frappe.utils.nestedset import rebuild_tree def execute(): frappe.reload_doc("setup", "doctype", "company") - rebuild_tree("Company", "parent_company") + rebuild_tree("Company") diff --git a/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py b/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py index 96daba7d36..67eb915902 100644 --- a/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py +++ b/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py @@ -41,4 +41,4 @@ def build_tree(): } ).insert(ignore_permissions=True) - rebuild_tree("Supplier Group", "parent_supplier_group") + rebuild_tree("Supplier Group") diff --git a/erpnext/patches/v11_0/update_department_lft_rgt.py b/erpnext/patches/v11_0/update_department_lft_rgt.py index 778392ec5f..380ca4d47a 100644 --- a/erpnext/patches/v11_0/update_department_lft_rgt.py +++ b/erpnext/patches/v11_0/update_department_lft_rgt.py @@ -18,4 +18,4 @@ def execute(): ) ) - rebuild_tree("Department", "parent_department") + rebuild_tree("Department") diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 9897847896..ec953b885e 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -249,7 +249,7 @@ class Company(NestedSet): if frappe.flags.parent_company_changed: from frappe.utils.nestedset import rebuild_tree - rebuild_tree("Company", "parent_company") + rebuild_tree("Company") frappe.clear_cache() @@ -397,7 +397,7 @@ class Company(NestedSet): frappe.local.flags.ignore_update_nsm = True make_records(records) frappe.local.flags.ignore_update_nsm = False - rebuild_tree("Department", "parent_department") + rebuild_tree("Department") def validate_coa_input(self): if self.create_chart_of_accounts_based_on == "Existing Company": diff --git a/erpnext/setup/doctype/item_group/test_item_group.py b/erpnext/setup/doctype/item_group/test_item_group.py index 11bc9b92c1..d95199d151 100644 --- a/erpnext/setup/doctype/item_group/test_item_group.py +++ b/erpnext/setup/doctype/item_group/test_item_group.py @@ -79,7 +79,7 @@ class TestItem(unittest.TestCase): group_b.save() def test_rebuild_tree(self): - rebuild_tree("Item Group", "parent_item_group") + rebuild_tree("Item Group") self.test_basic_tree() def move_it_back(self): diff --git a/erpnext/stock/__init__.py b/erpnext/stock/__init__.py index 45bf012be8..bd16d69df7 100644 --- a/erpnext/stock/__init__.py +++ b/erpnext/stock/__init__.py @@ -59,7 +59,7 @@ def get_warehouse_account(warehouse, warehouse_account=None): else: from frappe.utils.nestedset import rebuild_tree - rebuild_tree("Warehouse", "parent_warehouse") + rebuild_tree("Warehouse") else: account = frappe.db.sql( """ From bae7c6496402466df3af15c6bffcf51b97ae2037 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Thu, 4 Jan 2024 18:47:06 +0530 Subject: [PATCH 23/55] fix: inventory dimension negative stock validation (#39149) --- .../inventory_dimension/inventory_dimension.py | 2 +- .../test_inventory_dimension.py | 8 ++++++++ .../stock_ledger_entry/stock_ledger_entry.py | 14 +++++++++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py index 60624d4164..d5eef5ad22 100644 --- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py +++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py @@ -305,7 +305,7 @@ def get_evaluated_inventory_dimension(doc, sl_dict, parent_doc=None): dimensions = get_document_wise_inventory_dimensions(doc.doctype) filter_dimensions = [] for row in dimensions: - if row.type_of_transaction: + if row.type_of_transaction and row.type_of_transaction != "Both": if ( row.type_of_transaction == "Inward" if doc.docstatus == 1 diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py index 33394e5a11..361c2f8cd9 100644 --- a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py +++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py @@ -429,6 +429,14 @@ class TestInventoryDimension(FrappeTestCase): ) warehouse = create_warehouse("Negative Stock Warehouse") + + doc = make_stock_entry(item_code=item_code, source=warehouse, qty=10, do_not_submit=True) + doc.items[0].inv_site = "Site 1" + self.assertRaises(frappe.ValidationError, doc.submit) + doc.reload() + if doc.docstatus == 1: + doc.cancel() + doc = make_stock_entry(item_code=item_code, target=warehouse, qty=10, do_not_submit=True) doc.items[0].to_inv_site = "Site 1" diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 6e7af6815f..277ca01320 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -111,16 +111,20 @@ class StockLedgerEntry(Document): "posting_date": self.posting_date, "posting_time": self.posting_time, "company": self.company, + "sle": self.name, } ) sle = get_previous_sle(kwargs, extra_cond=extra_cond) + qty_after_transaction = 0.0 + flt_precision = cint(frappe.db.get_default("float_precision")) or 2 if sle: - flt_precision = cint(frappe.db.get_default("float_precision")) or 2 - diff = sle.qty_after_transaction + flt(self.actual_qty) - diff = flt(diff, flt_precision) - if diff < 0 and abs(diff) > 0.0001: - self.throw_validation_error(diff, dimensions) + qty_after_transaction = sle.qty_after_transaction + + diff = qty_after_transaction + flt(self.actual_qty) + diff = flt(diff, flt_precision) + if diff < 0 and abs(diff) > 0.0001: + self.throw_validation_error(diff, dimensions) def throw_validation_error(self, diff, dimensions): dimension_msg = _(", with the inventory {0}: {1}").format( From 3fb78864184135c67e290599f5c5a257744ec2f2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:50:49 +0530 Subject: [PATCH 24/55] fix: Creating Asset Activity while Importing Asset (backport #39113) (#39156) fix: Creating Asset Activity while Importing Asset (#39113) * fix: import asset not working on activity * chore: fix linting issue in asset_activity.py --------- Co-authored-by: Anand Baburajan (cherry picked from commit 5e4693763ae7f8dde2013093d926d6abd39fd174) Co-authored-by: Aulia Bismar --- erpnext/assets/doctype/asset_activity/asset_activity.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/assets/doctype/asset_activity/asset_activity.py b/erpnext/assets/doctype/asset_activity/asset_activity.py index a64cb1aba3..7177223b4f 100644 --- a/erpnext/assets/doctype/asset_activity/asset_activity.py +++ b/erpnext/assets/doctype/asset_activity/asset_activity.py @@ -3,6 +3,7 @@ import frappe from frappe.model.document import Document +from frappe.utils import now_datetime class AssetActivity(Document): @@ -30,5 +31,6 @@ def add_asset_activity(asset, subject): "asset": asset, "subject": subject, "user": frappe.session.user, + "date": now_datetime(), } ).insert(ignore_permissions=True, ignore_links=True) From e05bf9d32a00aac55021faaacbfa914ee9f7275a Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Fri, 5 Jan 2024 15:35:14 +0530 Subject: [PATCH 25/55] fix: add read permission to Buying Settings --- .../buying_settings/buying_settings.json | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.json b/erpnext/buying/doctype/buying_settings/buying_settings.json index 3f8559e63f..b05de7d0b2 100644 --- a/erpnext/buying/doctype/buying_settings/buying_settings.json +++ b/erpnext/buying/doctype/buying_settings/buying_settings.json @@ -214,7 +214,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2023-11-28 13:01:18.403492", + "modified": "2024-01-05 15:26:02.320942", "modified_by": "Administrator", "module": "Buying", "name": "Buying Settings", @@ -238,6 +238,41 @@ "role": "Purchase Manager", "share": 1, "write": 1 + }, + { + "email": 1, + "print": 1, + "read": 1, + "role": "Accounts User", + "share": 1 + }, + { + "email": 1, + "print": 1, + "read": 1, + "role": "Accounts Manager", + "share": 1 + }, + { + "email": 1, + "print": 1, + "read": 1, + "role": "Stock Manager", + "share": 1 + }, + { + "email": 1, + "print": 1, + "read": 1, + "role": "Stock User", + "share": 1 + }, + { + "email": 1, + "print": 1, + "read": 1, + "role": "Purchase User", + "share": 1 } ], "sort_field": "modified", From 15dc5c7e9966e3bf06ec0aa951d7185fb6cf6d0e Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 5 Jan 2024 14:32:05 +0530 Subject: [PATCH 26/55] refactor: prevent permissions by always processing in background --- erpnext/utilities/bulk_transaction.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/erpnext/utilities/bulk_transaction.py b/erpnext/utilities/bulk_transaction.py index 679d5bd348..9678488a26 100644 --- a/erpnext/utilities/bulk_transaction.py +++ b/erpnext/utilities/bulk_transaction.py @@ -15,18 +15,15 @@ def transaction_processing(data, from_doctype, to_doctype): length_of_data = len(deserialized_data) - if length_of_data > 10: - frappe.msgprint( - _("Started a background job to create {1} {0}").format(to_doctype, length_of_data) - ) - frappe.enqueue( - job, - deserialized_data=deserialized_data, - from_doctype=from_doctype, - to_doctype=to_doctype, - ) - else: - job(deserialized_data, from_doctype, to_doctype) + frappe.msgprint( + _("Started a background job to create {1} {0}").format(to_doctype, length_of_data) + ) + frappe.enqueue( + job, + deserialized_data=deserialized_data, + from_doctype=from_doctype, + to_doctype=to_doctype, + ) @frappe.whitelist() From b69cdeb4a6c881642fd2e3a081f13b65191d44bc Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 5 Jan 2024 15:56:04 +0530 Subject: [PATCH 27/55] refactor: allow sales invoice in Bank Reconciliation tool --- .../bank_transaction/bank_transaction.py | 18 ++++++++++-------- erpnext/hooks.py | 1 + 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py index 629ed1cf75..57f7c0eca3 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py @@ -366,15 +366,17 @@ def set_voucher_clearance(doctype, docname, clearance_date, self): and len(get_reconciled_bank_transactions(doctype, docname)) < 2 ): return - frappe.db.set_value(doctype, docname, "clearance_date", clearance_date) - elif doctype == "Sales Invoice": - frappe.db.set_value( - "Sales Invoice Payment", - dict(parenttype=doctype, parent=docname), - "clearance_date", - clearance_date, - ) + if doctype == "Sales Invoice": + frappe.db.set_value( + "Sales Invoice Payment", + dict(parenttype=doctype, parent=docname), + "clearance_date", + clearance_date, + ) + return + + frappe.db.set_value(doctype, docname, "clearance_date", clearance_date) elif doctype == "Bank Transaction": # For when a second bank transaction has fixed another, e.g. refund diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 0f80d5ee88..6efb893e63 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -489,6 +489,7 @@ bank_reconciliation_doctypes = [ "Payment Entry", "Journal Entry", "Purchase Invoice", + "Sales Invoice", ] accounting_dimension_doctypes = [ From fe43dab4d78091e626ddfb6432b2d69f84793d92 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Jan 2024 17:12:08 +0530 Subject: [PATCH 28/55] fix: improved validation message --- erpnext/assets/doctype/asset_category/asset_category.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/assets/doctype/asset_category/asset_category.py b/erpnext/assets/doctype/asset_category/asset_category.py index 034ec555dc..d401b81c2e 100644 --- a/erpnext/assets/doctype/asset_category/asset_category.py +++ b/erpnext/assets/doctype/asset_category/asset_category.py @@ -86,12 +86,12 @@ class AssetCategory(Document): if selected_key_type not in expected_key_types: frappe.throw( _( - "Row #{}: {} of {} should be {}. Please modify the account or select a different account." + "Row #{0}: {1} of {2} should be {3}. Please update the {1} or select a different account." ).format( d.idx, frappe.unscrub(key_to_match), frappe.bold(selected_account), - frappe.bold(expected_key_types), + frappe.bold(" or ".join(expected_key_types)), ), title=_("Invalid Account"), ) From c34f09c503b367f6ea1eee5e24f8aa6e94976e01 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Jan 2024 17:38:51 +0530 Subject: [PATCH 29/55] fix: Purchase date and amount is not mandatory for composite asset creation --- erpnext/assets/doctype/asset/asset.json | 12 ++++++------ erpnext/assets/doctype/asset/asset.py | 13 +++++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json index ac712d4431..d0c9350d77 100644 --- a/erpnext/assets/doctype/asset/asset.json +++ b/erpnext/assets/doctype/asset/asset.json @@ -202,9 +202,9 @@ "fieldname": "purchase_date", "fieldtype": "Date", "label": "Purchase Date", + "mandatory_depends_on": "eval:!doc.is_existing_asset", "read_only": 1, - "read_only_depends_on": "eval:!doc.is_existing_asset && !doc.is_composite_asset", - "reqd": 1 + "read_only_depends_on": "eval:!doc.is_existing_asset && !doc.is_composite_asset" }, { "fieldname": "disposal_date", @@ -227,15 +227,15 @@ "fieldname": "gross_purchase_amount", "fieldtype": "Currency", "label": "Gross Purchase Amount", + "mandatory_depends_on": "eval:(!doc.is_composite_asset || doc.docstatus==1)", "options": "Company:company:default_currency", - "read_only_depends_on": "eval:!doc.is_existing_asset", - "reqd": 1 + "read_only_depends_on": "eval:!doc.is_existing_asset" }, { "fieldname": "available_for_use_date", "fieldtype": "Date", "label": "Available-for-use Date", - "reqd": 1 + "mandatory_depends_on": "eval:(!doc.is_composite_asset || doc.docstatus==1)" }, { "default": "0", @@ -590,7 +590,7 @@ "link_fieldname": "target_asset" } ], - "modified": "2023-12-21 16:46:20.732869", + "modified": "2024-01-05 17:36:53.131512", "modified_by": "Administrator", "module": "Assets", "name": "Asset", diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index dd34189391..5f448987a5 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -57,7 +57,7 @@ class Asset(AccountsController): asset_owner: DF.Literal["", "Company", "Supplier", "Customer"] asset_owner_company: DF.Link | None asset_quantity: DF.Int - available_for_use_date: DF.Date + available_for_use_date: DF.Date | None booked_fixed_asset: DF.Check calculate_depreciation: DF.Check capitalized_in: DF.Link | None @@ -92,7 +92,7 @@ class Asset(AccountsController): number_of_depreciations_booked: DF.Int opening_accumulated_depreciation: DF.Currency policy_number: DF.Data | None - purchase_date: DF.Date + purchase_date: DF.Date | None purchase_invoice: DF.Link | None purchase_receipt: DF.Link | None purchase_receipt_amount: DF.Currency @@ -316,7 +316,12 @@ class Asset(AccountsController): frappe.throw(_("Gross Purchase Amount is mandatory"), frappe.MandatoryError) if is_cwip_accounting_enabled(self.asset_category): - if not self.is_existing_asset and not self.purchase_receipt and not self.purchase_invoice: + if ( + not self.is_existing_asset + and not self.is_composite_asset + and not self.purchase_receipt + and not self.purchase_invoice + ): frappe.throw( _("Please create purchase receipt or purchase invoice for the item {0}").format( self.item_code @@ -329,7 +334,7 @@ class Asset(AccountsController): and not frappe.db.get_value("Purchase Invoice", self.purchase_invoice, "update_stock") ): frappe.throw( - _("Update stock must be enable for the purchase invoice {0}").format(self.purchase_invoice) + _("Update stock must be enabled for the purchase invoice {0}").format(self.purchase_invoice) ) if not self.calculate_depreciation: From 4d56f725fe23495fa2392be01545c5d2fa8889b3 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Fri, 5 Jan 2024 18:44:06 +0530 Subject: [PATCH 30/55] fix: make `Sales Person` non-mandatory --- .../doctype/maintenance_schedule/maintenance_schedule.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py index 6100756a6a..19f57223b1 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py @@ -117,7 +117,7 @@ class MaintenanceSchedule(TransactionBase): self.update_amc_date(serial_nos, d.end_date) no_email_sp = [] - if d.sales_person not in email_map: + if d.sales_person and d.sales_person not in email_map: sp = frappe.get_doc("Sales Person", d.sales_person) try: email_map[d.sales_person] = sp.get_email_id() @@ -133,9 +133,9 @@ class MaintenanceSchedule(TransactionBase): scheduled_date = frappe.db.sql( """select scheduled_date from - `tabMaintenance Schedule Detail` where sales_person=%s and item_code=%s and + `tabMaintenance Schedule Detail` where item_code=%s and parent=%s""", - (d.sales_person, d.item_code, self.name), + (d.item_code, self.name), as_dict=1, ) @@ -232,8 +232,6 @@ class MaintenanceSchedule(TransactionBase): throw(_("Please select Start Date and End Date for Item {0}").format(d.item_code)) elif not d.no_of_visits: throw(_("Please mention no of visits required")) - elif not d.sales_person: - throw(_("Please select a Sales Person for item: {0}").format(d.item_name)) if getdate(d.start_date) >= getdate(d.end_date): throw(_("Start date should be less than end date for Item {0}").format(d.item_code)) From 4cc3c1b76529b99e1f0ed2594c0edc3152cc6534 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 5 Jan 2024 20:42:38 +0530 Subject: [PATCH 31/55] fix: incorrect outstanding amt validation on advance as liability --- erpnext/accounts/doctype/payment_entry/payment_entry.js | 4 ++++ erpnext/accounts/doctype/payment_entry/payment_entry.py | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index 26112409b7..81ffee3f6e 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -747,6 +747,10 @@ frappe.ui.form.on('Payment Entry', { args["get_orders_to_be_billed"] = true; } + if (frm.doc.book_advance_payments_in_separate_party_account) { + args["book_advance_payments_in_separate_party_account"] = true; + } + frappe.flags.allocate_payment_amount = filters['allocate_payment_amount']; return frappe.call({ diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 11c7c179b6..052eff393e 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -256,6 +256,7 @@ class PaymentEntry(AccountsController): "get_outstanding_invoices": True, "get_orders_to_be_billed": True, "vouchers": vouchers, + "book_advance_payments_in_separate_party_account": self.book_advance_payments_in_separate_party_account, }, validate=True, ) @@ -1628,11 +1629,16 @@ def get_outstanding_reference_documents(args, validate=False): outstanding_invoices = [] negative_outstanding_invoices = [] + if args.get("book_advance_payments_in_separate_party_account"): + party_account = get_party_account(args.get("party_type"), args.get("party"), args.get("company")) + else: + party_account = args.get("party_account") + if args.get("get_outstanding_invoices"): outstanding_invoices = get_outstanding_invoices( args.get("party_type"), args.get("party"), - get_party_account(args.get("party_type"), args.get("party"), args.get("company")), + party_account, common_filter=common_filter, posting_date=posting_and_due_date, min_outstanding=args.get("outstanding_amt_greater_than"), From 07b605a2873f796ef576f21bc30748c78b32a34e Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Fri, 5 Jan 2024 19:03:42 +0100 Subject: [PATCH 32/55] fix: make Dr/Cr in CoA translatable (#39033) * fix: make Dr/Cr in CoA translatable * fix: german translations --- erpnext/accounts/doctype/account/account_tree.js | 2 +- erpnext/translations/de.csv | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js index f240aa6e95..0b29769293 100644 --- a/erpnext/accounts/doctype/account/account_tree.js +++ b/erpnext/accounts/doctype/account/account_tree.js @@ -77,7 +77,7 @@ frappe.treeview_settings["Account"] = { // show Dr if positive since balance is calculated as debit - credit else show Cr const balance = account.balance_in_account_currency || account.balance; - const dr_or_cr = balance > 0 ? "Dr": "Cr"; + const dr_or_cr = balance > 0 ? __("Dr"): __("Cr"); const format = (value, currency) => format_currency(Math.abs(value), currency); if (account.balance!==undefined) { diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index d05d0d96c3..84c71ba367 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -600,7 +600,7 @@ Course Code: ,Kurscode:, Course Enrollment {0} does not exists,Die Kursanmeldung {0} existiert nicht, Course Schedule,Kurstermine, Course: ,Kurs:, -Cr,Haben, +Cr,H, Create,Erstellen, Create BOM,Stückliste anlegen, Create Delivery Trip,Erstelle Auslieferungsfahrt, @@ -3401,7 +3401,7 @@ Do you want to submit the material request,Möchten Sie die Materialanfrage einr Doctype,DocType, Document {0} successfully uncleared,Dokument {0} wurde nicht erfolgreich gelöscht, Download Template,Vorlage herunterladen, -Dr,Soll, +Dr,S, Due Date,Fälligkeitsdatum, Duplicate,Duplizieren, Duplicate Project with Tasks,Projekt mit Aufgaben duplizieren, @@ -7370,6 +7370,7 @@ Default Stock UOM,Standardlagermaßeinheit, Sample Retention Warehouse,Beispiel Retention Warehouse, Default Valuation Method,Standard-Bewertungsmethode, Show Barcode Field,Anzeigen Barcode-Feld, +Show Balances in Chart Of Accounts,Saldo in Kontenplan anzeigen, Convert Item Description to Clean HTML,Elementbeschreibung in HTML bereinigen, Allow Negative Stock,Negativen Lagerbestand zulassen, Automatically Set Serial Nos based on FIFO,Automatisch Seriennummern auf Basis FIFO einstellen, @@ -8812,7 +8813,6 @@ Column {0},Spalte {0}, Field Mapping,Feldzuordnung, Not Specified,Keine Angabe, Update Type,Aktualisierungsart, -Dr,Soll, End Time,Endzeit, Fetching...,Abrufen ..., "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Es scheint, dass ein Problem mit der Stripe-Konfiguration des Servers vorliegt. Im Falle eines Fehlers wird der Betrag Ihrem Konto gutgeschrieben.", From cd293a5173aaec693afee23e9b874b1db649a267 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Fri, 5 Jan 2024 22:58:04 +0530 Subject: [PATCH 33/55] fix: update Maintenance Schedule status on Maintenance Visit submit --- .../maintenance_schedule.py | 46 +++++++++------ .../maintenance_visit/maintenance_visit.py | 59 +++++++++++++++---- .../maintenance_visit_purpose.json | 15 ++++- .../maintenance_visit_purpose.py | 3 +- 4 files changed, 89 insertions(+), 34 deletions(-) diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py index 19f57223b1..ceb4406170 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py @@ -131,12 +131,11 @@ class MaintenanceSchedule(TransactionBase): ).format(self.owner, "
" + "
".join(no_email_sp)) ) - scheduled_date = frappe.db.sql( - """select scheduled_date from - `tabMaintenance Schedule Detail` where item_code=%s and - parent=%s""", - (d.item_code, self.name), - as_dict=1, + scheduled_date = frappe.db.get_all( + "Maintenance Schedule Detail", + {"parent": self.name, "item_code": d.item_code}, + ["scheduled_date"], + as_list=False, ) for key in scheduled_date: @@ -450,20 +449,28 @@ def get_serial_nos_from_schedule(item_code, schedule=None): def make_maintenance_visit(source_name, target_doc=None, item_name=None, s_id=None): from frappe.model.mapper import get_mapped_doc + def condition(doc): + if s_id: + return doc.name == s_id + elif item_name: + return doc.item_name == item_name + + return True + def update_status_and_detail(source, target, parent): target.maintenance_type = "Scheduled" - target.maintenance_schedule_detail = s_id def update_serial(source, target, parent): - if source.serial_and_batch_bundle: - serial_nos = frappe.get_doc( - "Serial and Batch Bundle", source.serial_and_batch_bundle - ).get_serial_nos() + if source.item_reference: + if sbb := frappe.db.get_value( + "Maintenance Schedule Item", source.item_reference, "serial_and_batch_bundle" + ): + serial_nos = frappe.get_doc("Serial and Batch Bundle", sbb).get_serial_nos() - if len(serial_nos) == 1: - target.serial_no = serial_nos[0] - else: - target.serial_no = "" + if len(serial_nos) == 1: + target.serial_no = serial_nos[0] + else: + target.serial_no = "" doclist = get_mapped_doc( "Maintenance Schedule", @@ -475,10 +482,13 @@ def make_maintenance_visit(source_name, target_doc=None, item_name=None, s_id=No "validation": {"docstatus": ["=", 1]}, "postprocess": update_status_and_detail, }, - "Maintenance Schedule Item": { + "Maintenance Schedule Detail": { "doctype": "Maintenance Visit Purpose", - "condition": lambda doc: doc.item_name == item_name if item_name else True, - "field_map": {"sales_person": "service_person"}, + "condition": condition, + "field_map": { + "sales_person": "service_person", + "name": "maintenance_schedule_detail", + }, "postprocess": update_serial, }, }, diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.py b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.py index e7df4847dd..d2511b8cbc 100644 --- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.py +++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.py @@ -56,20 +56,39 @@ class MaintenanceVisit(TransactionBase): frappe.throw(_("Add Items in the Purpose Table"), title=_("Purposes Required")) def validate_maintenance_date(self): - if self.maintenance_type == "Scheduled" and self.maintenance_schedule_detail: - item_ref = frappe.db.get_value( - "Maintenance Schedule Detail", self.maintenance_schedule_detail, "item_reference" - ) - if item_ref: - start_date, end_date = frappe.db.get_value( - "Maintenance Schedule Item", item_ref, ["start_date", "end_date"] + if self.maintenance_type == "Scheduled": + if self.maintenance_schedule_detail: + item_ref = frappe.db.get_value( + "Maintenance Schedule Detail", self.maintenance_schedule_detail, "item_reference" ) - if get_datetime(self.mntc_date) < get_datetime(start_date) or get_datetime( - self.mntc_date - ) > get_datetime(end_date): - frappe.throw( - _("Date must be between {0} and {1}").format(format_date(start_date), format_date(end_date)) + if item_ref: + start_date, end_date = frappe.db.get_value( + "Maintenance Schedule Item", item_ref, ["start_date", "end_date"] ) + if get_datetime(self.mntc_date) < get_datetime(start_date) or get_datetime( + self.mntc_date + ) > get_datetime(end_date): + frappe.throw( + _("Date must be between {0} and {1}").format(format_date(start_date), format_date(end_date)) + ) + else: + for purpose in self.purposes: + if purpose.maintenance_schedule_detail: + item_ref = frappe.db.get_value( + "Maintenance Schedule Detail", purpose.maintenance_schedule_detail, "item_reference" + ) + if item_ref: + start_date, end_date = frappe.db.get_value( + "Maintenance Schedule Item", item_ref, ["start_date", "end_date"] + ) + if get_datetime(self.mntc_date) < get_datetime(start_date) or get_datetime( + self.mntc_date + ) > get_datetime(end_date): + frappe.throw( + _("Date must be between {0} and {1}").format( + format_date(start_date), format_date(end_date) + ) + ) def validate(self): self.validate_serial_no() @@ -82,6 +101,7 @@ class MaintenanceVisit(TransactionBase): if not cancel: status = self.completion_status actual_date = self.mntc_date + if self.maintenance_schedule_detail: frappe.db.set_value( "Maintenance Schedule Detail", self.maintenance_schedule_detail, "completion_status", status @@ -89,6 +109,21 @@ class MaintenanceVisit(TransactionBase): frappe.db.set_value( "Maintenance Schedule Detail", self.maintenance_schedule_detail, "actual_date", actual_date ) + else: + for purpose in self.purposes: + if purpose.maintenance_schedule_detail: + frappe.db.set_value( + "Maintenance Schedule Detail", + purpose.maintenance_schedule_detail, + "completion_status", + status, + ) + frappe.db.set_value( + "Maintenance Schedule Detail", + purpose.maintenance_schedule_detail, + "actual_date", + actual_date, + ) def update_customer_issue(self, flag): if not self.maintenance_schedule: diff --git a/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json b/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json index ba05355553..a5a63c4c4d 100644 --- a/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json +++ b/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json @@ -17,7 +17,8 @@ "work_details", "work_done", "prevdoc_doctype", - "prevdoc_docname" + "prevdoc_docname", + "maintenance_schedule_detail" ], "fields": [ { @@ -49,6 +50,8 @@ "options": "Serial No" }, { + "fetch_from": "item_code.description", + "fetch_if_empty": 1, "fieldname": "description", "fieldtype": "Text Editor", "in_list_view": 1, @@ -56,7 +59,6 @@ "oldfieldname": "description", "oldfieldtype": "Small Text", "print_width": "300px", - "reqd": 1, "width": "300px" }, { @@ -103,12 +105,19 @@ { "fieldname": "section_break_6", "fieldtype": "Section Break" + }, + { + "fieldname": "maintenance_schedule_detail", + "fieldtype": "Data", + "hidden": 1, + "label": "Maintenance Schedule Detail", + "options": "Maintenance Schedule Detail" } ], "idx": 1, "istable": 1, "links": [], - "modified": "2023-02-27 11:09:33.114458", + "modified": "2024-01-05 21:46:53.239830", "modified_by": "Administrator", "module": "Maintenance", "name": "Maintenance Visit Purpose", diff --git a/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.py b/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.py index 3686941c64..1d4dab2873 100644 --- a/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.py +++ b/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.py @@ -14,9 +14,10 @@ class MaintenanceVisitPurpose(Document): if TYPE_CHECKING: from frappe.types import DF - description: DF.TextEditor + description: DF.TextEditor | None item_code: DF.Link | None item_name: DF.Data | None + maintenance_schedule_detail: DF.Data | None parent: DF.Data parentfield: DF.Data parenttype: DF.Data From b96c063c93532b8910b910b04750b3de367954cc Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 8 Jan 2024 12:51:14 +0530 Subject: [PATCH 34/55] fix: duplicate entry for serial / batch creation (#39188) --- .../serial_and_batch_bundle.py | 19 ++++++++--- .../test_serial_and_batch_bundle.py | 34 +++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py index eede928827..620b9606a7 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py @@ -1004,13 +1004,17 @@ def make_serial_nos(item_code, serial_nos): item = frappe.get_cached_value("Item", item_code, ["description", "item_code"], as_dict=1) serial_nos = [d.get("serial_no") for d in serial_nos if d.get("serial_no")] + existing_serial_nos = frappe.get_all("Serial No", filters={"name": ("in", serial_nos)}) + + existing_serial_nos = [d.get("name") for d in existing_serial_nos if d.get("name")] + serial_nos = list(set(serial_nos) - set(existing_serial_nos)) + + if not serial_nos: + return serial_nos_details = [] user = frappe.session.user for serial_no in serial_nos: - if frappe.db.exists("Serial No", serial_no): - continue - serial_nos_details.append( ( serial_no, @@ -1046,9 +1050,16 @@ def make_serial_nos(item_code, serial_nos): def make_batch_nos(item_code, batch_nos): item = frappe.get_cached_value("Item", item_code, ["description", "item_code"], as_dict=1) - batch_nos = [d.get("batch_no") for d in batch_nos if d.get("batch_no")] + existing_batches = frappe.get_all("Batch", filters={"name": ("in", batch_nos)}) + + existing_batches = [d.get("name") for d in existing_batches if d.get("name")] + + batch_nos = list(set(batch_nos) - set(existing_batches)) + if not batch_nos: + return + batch_nos_details = [] user = frappe.session.user for batch_no in batch_nos: diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py index 19757479a5..0d453fb841 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py @@ -10,6 +10,8 @@ from frappe.utils import add_days, add_to_date, flt, nowdate, nowtime, today from erpnext.stock.doctype.item.test_item import make_item from erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle import ( add_serial_batch_ledgers, + make_batch_nos, + make_serial_nos, ) from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry @@ -481,6 +483,38 @@ class TestSerialandBatchBundle(FrappeTestCase): docstatus = frappe.db.get_value("Serial and Batch Bundle", bundle, "docstatus") self.assertEqual(docstatus, 2) + def test_batch_duplicate_entry(self): + item_code = make_item(properties={"has_batch_no": 1}).name + + batch_id = "TEST-BATTCCH-VAL-00001" + batch_nos = [{"batch_no": batch_id, "qty": 1}] + + make_batch_nos(item_code, batch_nos) + self.assertTrue(frappe.db.exists("Batch", batch_id)) + + batch_id = "TEST-BATTCCH-VAL-00001" + batch_nos = [{"batch_no": batch_id, "qty": 1}] + + # Shouldn't throw duplicate entry error + make_batch_nos(item_code, batch_nos) + self.assertTrue(frappe.db.exists("Batch", batch_id)) + + def test_serial_no_duplicate_entry(self): + item_code = make_item(properties={"has_serial_no": 1}).name + + serial_no_id = "TEST-SNID-VAL-00001" + serial_nos = [{"serial_no": serial_no_id, "qty": 1}] + + make_serial_nos(item_code, serial_nos) + self.assertTrue(frappe.db.exists("Serial No", serial_no_id)) + + serial_no_id = "TEST-SNID-VAL-00001" + serial_nos = [{"batch_no": serial_no_id, "qty": 1}] + + # Shouldn't throw duplicate entry error + make_serial_nos(item_code, serial_nos) + self.assertTrue(frappe.db.exists("Serial No", serial_no_id)) + def get_batch_from_bundle(bundle): from erpnext.stock.serial_batch_bundle import get_batch_nos From 7d264696f3da3d2345588fa391aece975ec82b09 Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Mon, 8 Jan 2024 13:07:42 +0530 Subject: [PATCH 35/55] fix: account currency from existing company coa --- .../doctype/account/chart_of_accounts/chart_of_accounts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py index 9f56455990..05ff2a178a 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py +++ b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py @@ -231,6 +231,8 @@ def build_account_tree(tree, parent, all_accounts): tree[child.account_name]["account_type"] = child.account_type if child.tax_rate: tree[child.account_name]["tax_rate"] = child.tax_rate + if child.account_currency: + tree[child.account_name]["account_currency"] = child.account_currency if not parent: tree[child.account_name]["root_type"] = child.root_type From 5923b48edefd2bdb4624abddc1d626e3c8228ee6 Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Mon, 8 Jan 2024 13:18:01 +0530 Subject: [PATCH 36/55] fix: avoid copying party balance --- .../doctype/payment_entry/payment_entry.json | 3 +- .../doctype/payment_entry/payment_entry.py | 82 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json index aa181564b0..3a1e1ea9ad 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.json +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json @@ -223,6 +223,7 @@ "fieldname": "party_balance", "fieldtype": "Currency", "label": "Party Balance", + "no_copy": 1, "print_hide": 1, "read_only": 1 }, @@ -759,7 +760,7 @@ "table_fieldname": "payment_entries" } ], - "modified": "2023-11-23 12:07:20.887885", + "modified": "2024-01-08 13:17:15.744754", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Entry", diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 052eff393e..37bd8e6fcd 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -50,6 +50,88 @@ class InvalidPaymentEntry(ValidationError): class PaymentEntry(AccountsController): + # begin: auto-generated types + # This code is auto-generated. Do not modify anything in this block. + + from typing import TYPE_CHECKING + + if TYPE_CHECKING: + from frappe.types import DF + + from erpnext.accounts.doctype.advance_taxes_and_charges.advance_taxes_and_charges import ( + AdvanceTaxesandCharges, + ) + from erpnext.accounts.doctype.payment_entry_deduction.payment_entry_deduction import ( + PaymentEntryDeduction, + ) + from erpnext.accounts.doctype.payment_entry_reference.payment_entry_reference import ( + PaymentEntryReference, + ) + + amended_from: DF.Link | None + apply_tax_withholding_amount: DF.Check + auto_repeat: DF.Link | None + bank: DF.ReadOnly | None + bank_account: DF.Link | None + bank_account_no: DF.ReadOnly | None + base_paid_amount: DF.Currency + base_paid_amount_after_tax: DF.Currency + base_received_amount: DF.Currency + base_received_amount_after_tax: DF.Currency + base_total_allocated_amount: DF.Currency + base_total_taxes_and_charges: DF.Currency + book_advance_payments_in_separate_party_account: DF.Check + clearance_date: DF.Date | None + company: DF.Link + contact_email: DF.Data | None + contact_person: DF.Link | None + cost_center: DF.Link | None + custom_remarks: DF.Check + deductions: DF.Table[PaymentEntryDeduction] + difference_amount: DF.Currency + letter_head: DF.Link | None + mode_of_payment: DF.Link | None + naming_series: DF.Literal["ACC-PAY-.YYYY.-"] + paid_amount: DF.Currency + paid_amount_after_tax: DF.Currency + paid_from: DF.Link + paid_from_account_balance: DF.Currency + paid_from_account_currency: DF.Link + paid_from_account_type: DF.Data | None + paid_to: DF.Link + paid_to_account_balance: DF.Currency + paid_to_account_currency: DF.Link + paid_to_account_type: DF.Data | None + party: DF.DynamicLink | None + party_balance: DF.Currency + party_bank_account: DF.Link | None + party_name: DF.Data | None + party_type: DF.Link | None + payment_order: DF.Link | None + payment_order_status: DF.Literal["Initiated", "Payment Ordered"] + payment_type: DF.Literal["Receive", "Pay", "Internal Transfer"] + posting_date: DF.Date + print_heading: DF.Link | None + project: DF.Link | None + purchase_taxes_and_charges_template: DF.Link | None + received_amount: DF.Currency + received_amount_after_tax: DF.Currency + reference_date: DF.Date | None + reference_no: DF.Data | None + references: DF.Table[PaymentEntryReference] + remarks: DF.SmallText | None + sales_taxes_and_charges_template: DF.Link | None + source_exchange_rate: DF.Float + status: DF.Literal["", "Draft", "Submitted", "Cancelled"] + target_exchange_rate: DF.Float + tax_withholding_category: DF.Link | None + taxes: DF.Table[AdvanceTaxesandCharges] + title: DF.Data | None + total_allocated_amount: DF.Currency + total_taxes_and_charges: DF.Currency + unallocated_amount: DF.Currency + # end: auto-generated types + def __init__(self, *args, **kwargs): super(PaymentEntry, self).__init__(*args, **kwargs) if not self.is_new(): From 6de8c18f9803c055c17e220f8f8d7eed5dfb45c6 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 8 Jan 2024 13:18:29 +0530 Subject: [PATCH 37/55] fix: bank transction status upon reconciliation --- .../bank_reconciliation_tool.py | 4 ++++ .../doctype/bank_transaction/bank_transaction.py | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py index 0779a09e2f..9e6b51d2c1 100644 --- a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py +++ b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py @@ -444,6 +444,10 @@ def reconcile_vouchers(bank_transaction_name, vouchers): vouchers = json.loads(vouchers) transaction = frappe.get_doc("Bank Transaction", bank_transaction_name) transaction.add_payment_entries(vouchers) + transaction.validate_duplicate_references() + transaction.allocate_payment_entries() + transaction.update_allocated_amount() + transaction.set_status() transaction.save() return transaction diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py index 57f7c0eca3..8d82123989 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py @@ -3,12 +3,11 @@ import frappe from frappe import _ +from frappe.model.document import Document from frappe.utils import flt -from erpnext.controllers.status_updater import StatusUpdater - -class BankTransaction(StatusUpdater): +class BankTransaction(Document): # begin: auto-generated types # This code is auto-generated. Do not modify anything in this block. @@ -50,6 +49,15 @@ class BankTransaction(StatusUpdater): def validate(self): self.validate_duplicate_references() + def set_status(self): + if self.docstatus == 2: + self.db_set("status", "Cancelled") + elif self.docstatus == 1: + if self.unallocated_amount > 0: + self.db_set("status", "Unreconciled") + elif self.unallocated_amount <= 0: + self.db_set("status", "Reconciled") + def validate_duplicate_references(self): """Make sure the same voucher is not allocated twice within the same Bank Transaction""" if not self.payment_entries: @@ -88,7 +96,7 @@ class BankTransaction(StatusUpdater): for payment_entry in self.payment_entries: self.clear_linked_payment_entry(payment_entry, for_cancel=True) - self.set_status(update=True) + self.set_status() def add_payment_entries(self, vouchers): "Add the vouchers with zero allocation. Save() will perform the allocations and clearance" From d0ea598cdfb203882fca887d2ba34938c4c75b8e Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Mon, 8 Jan 2024 15:50:50 +0530 Subject: [PATCH 38/55] fix: fetch name for fy --- erpnext/accounts/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index f9208f051e..25fbe170b8 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -1280,7 +1280,7 @@ def parse_naming_series_variable(doc, variable): else: date = getdate() company = None - return get_fiscal_year(date=date, company=company)[0] + return get_fiscal_year(date=date, company=company).name @frappe.whitelist() From 3d54fd8389c41b14e8002518b111ebd71fd94186 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 8 Jan 2024 16:04:40 +0530 Subject: [PATCH 39/55] fix: add expected_start_date in sort by --- erpnext/projects/doctype/project/project.json | 3 +- erpnext/projects/doctype/project/project.py | 53 +++++++++++++++++++ erpnext/projects/doctype/task/task.json | 3 +- erpnext/projects/doctype/task/task.py | 7 +-- 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/erpnext/projects/doctype/project/project.json b/erpnext/projects/doctype/project/project.json index 715b09c64b..5917e9b5d2 100644 --- a/erpnext/projects/doctype/project/project.json +++ b/erpnext/projects/doctype/project/project.json @@ -131,6 +131,7 @@ "set_only_once": 1 }, { + "bold": 1, "fieldname": "expected_start_date", "fieldtype": "Date", "label": "Expected Start Date", @@ -453,7 +454,7 @@ "index_web_pages_for_search": 1, "links": [], "max_attachments": 4, - "modified": "2023-08-28 22:27:28.370849", + "modified": "2024-01-08 16:01:34.598258", "modified_by": "Administrator", "module": "Projects", "name": "Project", diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 751dcbd06a..6bd0b756d9 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -19,6 +19,59 @@ from erpnext.setup.doctype.holiday_list.holiday_list import is_holiday class Project(Document): + # begin: auto-generated types + # This code is auto-generated. Do not modify anything in this block. + + from typing import TYPE_CHECKING + + if TYPE_CHECKING: + from erpnext.projects.doctype.project_user.project_user import ProjectUser + from frappe.types import DF + + actual_end_date: DF.Date | None + actual_start_date: DF.Date | None + actual_time: DF.Float + collect_progress: DF.Check + company: DF.Link + copied_from: DF.Data | None + cost_center: DF.Link | None + customer: DF.Link | None + daily_time_to_send: DF.Time | None + day_to_send: DF.Literal["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] + department: DF.Link | None + estimated_costing: DF.Currency + expected_end_date: DF.Date | None + expected_start_date: DF.Date | None + first_email: DF.Time | None + frequency: DF.Literal["Hourly", "Twice Daily", "Daily", "Weekly"] + from_time: DF.Time | None + gross_margin: DF.Currency + holiday_list: DF.Link | None + is_active: DF.Literal["Yes", "No"] + message: DF.Text | None + naming_series: DF.Literal["PROJ-.####"] + notes: DF.TextEditor | None + per_gross_margin: DF.Percent + percent_complete: DF.Percent + percent_complete_method: DF.Literal["Manual", "Task Completion", "Task Progress", "Task Weight"] + priority: DF.Literal["Medium", "Low", "High"] + project_name: DF.Data + project_template: DF.Link | None + project_type: DF.Link | None + sales_order: DF.Link | None + second_email: DF.Time | None + status: DF.Literal["Open", "Completed", "Cancelled"] + to_time: DF.Time | None + total_billable_amount: DF.Currency + total_billed_amount: DF.Currency + total_consumed_material_cost: DF.Currency + total_costing_amount: DF.Currency + total_purchase_cost: DF.Currency + total_sales_amount: DF.Currency + users: DF.Table[ProjectUser] + weekly_time_to_send: DF.Time | None + # end: auto-generated types + def onload(self): self.set_onload( "activity_summary", diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json index 4d2d225242..cc9832b584 100644 --- a/erpnext/projects/doctype/task/task.json +++ b/erpnext/projects/doctype/task/task.json @@ -153,6 +153,7 @@ "label": "Timeline" }, { + "bold": 1, "fieldname": "exp_start_date", "fieldtype": "Date", "label": "Expected Start Date", @@ -398,7 +399,7 @@ "is_tree": 1, "links": [], "max_attachments": 5, - "modified": "2023-11-20 11:42:41.884069", + "modified": "2024-01-08 16:00:41.296203", "modified_by": "Administrator", "module": "Projects", "name": "Task", diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 22df846e39..e96b8e4fc6 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -24,9 +24,8 @@ class Task(NestedSet): from typing import TYPE_CHECKING if TYPE_CHECKING: - from frappe.types import DF - from erpnext.projects.doctype.task_depends_on.task_depends_on import TaskDependsOn + from frappe.types import DF act_end_date: DF.Date | None act_start_date: DF.Date | None @@ -57,9 +56,7 @@ class Task(NestedSet): review_date: DF.Date | None rgt: DF.Int start: DF.Int - status: DF.Literal[ - "Open", "Working", "Pending Review", "Overdue", "Template", "Completed", "Cancelled" - ] + status: DF.Literal["Open", "Working", "Pending Review", "Overdue", "Template", "Completed", "Cancelled"] subject: DF.Data task_weight: DF.Float template_task: DF.Data | None From eab22eb2822055e0e04adf853879237c00988572 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 8 Jan 2024 16:35:45 +0530 Subject: [PATCH 40/55] fix: Introduced company field to show amounts in company currency --- .../asset_depreciation_schedule.json | 11 ++++++++++- .../asset_depreciation_schedule.py | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json index be35914251..73838163d3 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json +++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json @@ -9,6 +9,7 @@ "field_order": [ "asset", "naming_series", + "company", "column_break_2", "gross_purchase_amount", "opening_accumulated_depreciation", @@ -193,12 +194,20 @@ "fieldtype": "Check", "label": "Depreciate based on shifts", "read_only": 1 + }, + { + "fetch_from": "asset.company", + "fieldname": "company", + "fieldtype": "Link", + "label": "Company", + "options": "Company", + "read_only": 1 } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2023-11-29 00:57:00.461998", + "modified": "2024-01-08 16:31:04.533928", "modified_by": "Administrator", "module": "Assets", "name": "Asset Depreciation Schedule", diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py index 67234ccd84..4c94be5320 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py @@ -35,6 +35,7 @@ class AssetDepreciationSchedule(Document): amended_from: DF.Link | None asset: DF.Link + company: DF.Link | None daily_prorata_based: DF.Check depreciation_method: DF.Literal[ "", "Straight Line", "Double Declining Balance", "Written Down Value", "Manual" From 9ba6ff67d5727ee97f12a9cbee120e78c20d6cec Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 8 Jan 2024 17:11:26 +0530 Subject: [PATCH 41/55] fix: project filters on Delivery Note and Sales Order --- erpnext/public/js/utils/dimension_tree_filter.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/public/js/utils/dimension_tree_filter.js b/erpnext/public/js/utils/dimension_tree_filter.js index bb23f1512b..3f70c09f66 100644 --- a/erpnext/public/js/utils/dimension_tree_filter.js +++ b/erpnext/public/js/utils/dimension_tree_filter.js @@ -16,6 +16,8 @@ erpnext.accounts.dimensions = { }, callback: function(r) { me.accounting_dimensions = r.message[0]; + // Ignoring "Project" as it is already handled specifically in Sales Order and Delivery Note + me.accounting_dimensions = me.accounting_dimensions.filter(x=>{return x.document_type != "Project"}); me.default_dimensions = r.message[1]; me.setup_filters(frm, doctype); } From 466625213b6355b53b7af3ee1682cee6fc8649a4 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 8 Jan 2024 17:18:29 +0530 Subject: [PATCH 42/55] fix: FG Item incorrect qty in the work order (#39200) --- .../production_plan/production_plan.py | 11 ++--- .../production_plan/test_production_plan.py | 41 ++++++++++++++++++- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index 2bfd4be53a..f64af50188 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -646,6 +646,10 @@ class ProductionPlan(Document): "project": self.project, } + key = (d.item_code, d.sales_order, d.warehouse) + if not d.sales_order: + key = (d.name, d.item_code, d.warehouse) + if not item_details["project"] and d.sales_order: item_details["project"] = frappe.get_cached_value("Sales Order", d.sales_order, "project") @@ -654,12 +658,9 @@ class ProductionPlan(Document): item_dict[(d.item_code, d.material_request_item, d.warehouse)] = item_details else: item_details.update( - { - "qty": flt(item_dict.get((d.item_code, d.sales_order, d.warehouse), {}).get("qty")) - + (flt(d.planned_qty) - flt(d.ordered_qty)) - } + {"qty": flt(item_dict.get(key, {}).get("qty")) + (flt(d.planned_qty) - flt(d.ordered_qty))} ) - item_dict[(d.item_code, d.sales_order, d.warehouse)] = item_details + item_dict[key] = item_details return item_dict diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py index f6dfaa5058..fedeb7a477 100644 --- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py @@ -672,7 +672,7 @@ class TestProductionPlan(FrappeTestCase): items_data = pln.get_production_items() # Update qty - items_data[(item, None, None)]["qty"] = qty + items_data[(pln.po_items[0].name, item, None)]["qty"] = qty # Create and Submit Work Order for each item in items_data for key, item in items_data.items(): @@ -1522,6 +1522,45 @@ class TestProductionPlan(FrappeTestCase): for d in mr_items: self.assertEqual(d.get("quantity"), 1000.0) + def test_fg_item_quantity(self): + from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + from erpnext.stock.utils import get_or_make_bin + + fg_item = make_item(properties={"is_stock_item": 1}).name + rm_item = make_item(properties={"is_stock_item": 1}).name + + make_bom(item=fg_item, raw_materials=[rm_item], source_warehouse="_Test Warehouse - _TC") + + pln = create_production_plan(item_code=fg_item, planned_qty=10, do_not_submit=1) + + pln.append( + "po_items", + { + "item_code": rm_item, + "planned_qty": 20, + "bom_no": pln.po_items[0].bom_no, + "warehouse": pln.po_items[0].warehouse, + "planned_start_date": add_to_date(nowdate(), days=1), + }, + ) + pln.submit() + wo_qty = {} + + for row in pln.po_items: + wo_qty[row.name] = row.planned_qty + + pln.make_work_order() + + work_orders = frappe.get_all( + "Work Order", + fields=["qty", "production_plan_item as name"], + filters={"production_plan": pln.name}, + ) + self.assertEqual(len(work_orders), 2) + + for row in work_orders: + self.assertEqual(row.qty, wo_qty[row.name]) + def create_production_plan(**args): """ From cf988434e9e4fd7f7c6df2b024902f8df9942ca3 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 8 Jan 2024 17:32:22 +0530 Subject: [PATCH 43/55] refactor: remove 'Bank Trasaction' logic from status_update --- erpnext/controllers/status_updater.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index d09001c8fc..297f8c26be 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -131,11 +131,6 @@ status_map = { "eval:self.status != 'Stopped' and self.per_ordered == 100 and self.docstatus == 1 and self.material_request_type == 'Manufacture'", ], ], - "Bank Transaction": [ - ["Unreconciled", "eval:self.docstatus == 1 and self.unallocated_amount>0"], - ["Reconciled", "eval:self.docstatus == 1 and self.unallocated_amount<=0"], - ["Cancelled", "eval:self.docstatus == 2"], - ], "POS Opening Entry": [ ["Draft", None], ["Open", "eval:self.docstatus == 1 and not self.pos_closing_entry"], From 498bf15ecd63af122ba8740536c89cd1275ad4d1 Mon Sep 17 00:00:00 2001 From: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> Date: Mon, 8 Jan 2024 17:58:59 +0530 Subject: [PATCH 44/55] chore: linter fix --- erpnext/projects/doctype/task/task.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index e96b8e4fc6..22df846e39 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -24,9 +24,10 @@ class Task(NestedSet): from typing import TYPE_CHECKING if TYPE_CHECKING: - from erpnext.projects.doctype.task_depends_on.task_depends_on import TaskDependsOn from frappe.types import DF + from erpnext.projects.doctype.task_depends_on.task_depends_on import TaskDependsOn + act_end_date: DF.Date | None act_start_date: DF.Date | None actual_time: DF.Float @@ -56,7 +57,9 @@ class Task(NestedSet): review_date: DF.Date | None rgt: DF.Int start: DF.Int - status: DF.Literal["Open", "Working", "Pending Review", "Overdue", "Template", "Completed", "Cancelled"] + status: DF.Literal[ + "Open", "Working", "Pending Review", "Overdue", "Template", "Completed", "Cancelled" + ] subject: DF.Data task_weight: DF.Float template_task: DF.Data | None From be8bb235dc3dc6157507d59089c43146eb38ea6a Mon Sep 17 00:00:00 2001 From: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:00:02 +0530 Subject: [PATCH 45/55] chore: linter fix --- erpnext/projects/doctype/project/project.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 6bd0b756d9..d17d21cf27 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -25,9 +25,10 @@ class Project(Document): from typing import TYPE_CHECKING if TYPE_CHECKING: - from erpnext.projects.doctype.project_user.project_user import ProjectUser from frappe.types import DF + from erpnext.projects.doctype.project_user.project_user import ProjectUser + actual_end_date: DF.Date | None actual_start_date: DF.Date | None actual_time: DF.Float @@ -37,7 +38,9 @@ class Project(Document): cost_center: DF.Link | None customer: DF.Link | None daily_time_to_send: DF.Time | None - day_to_send: DF.Literal["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] + day_to_send: DF.Literal[ + "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" + ] department: DF.Link | None estimated_costing: DF.Currency expected_end_date: DF.Date | None From c14986f9e6e617b67e97c8d25843a4dc33b77dcf Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 8 Jan 2024 18:15:55 +0530 Subject: [PATCH 46/55] fix: Show maintain-stock and is-fixed-asset checkbox in item quick entry dialog --- erpnext/stock/doctype/item/item.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 13f3be8c36..6529bb2806 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -202,6 +202,7 @@ "label": "Allow Alternative Item" }, { + "allow_in_quick_entry": 1, "bold": 1, "default": "1", "depends_on": "eval:!doc.is_fixed_asset", @@ -239,6 +240,7 @@ "label": "Standard Selling Rate" }, { + "allow_in_quick_entry": 1, "default": "0", "fieldname": "is_fixed_asset", "fieldtype": "Check", @@ -246,6 +248,7 @@ "set_only_once": 1 }, { + "allow_in_quick_entry": 1, "depends_on": "is_fixed_asset", "fieldname": "asset_category", "fieldtype": "Link", @@ -888,7 +891,7 @@ "index_web_pages_for_search": 1, "links": [], "make_attachments_public": 1, - "modified": "2023-09-18 15:41:32.688051", + "modified": "2024-01-08 18:09:30.225085", "modified_by": "Administrator", "module": "Stock", "name": "Item", @@ -961,4 +964,4 @@ "states": [], "title_field": "item_name", "track_changes": 1 -} +} \ No newline at end of file From b498094a9759bb95a3c77c6ec6877aafc6daa0ea Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 9 Jan 2024 12:40:41 +0530 Subject: [PATCH 47/55] fix: total allocated percentage for sales team issue --- .../selling/doctype/quotation/quotation.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py index 00b79e3aad..ab74f7f738 100644 --- a/erpnext/selling/doctype/quotation/quotation.py +++ b/erpnext/selling/doctype/quotation/quotation.py @@ -370,15 +370,16 @@ def _make_sales_order(source_name, target_doc=None, customer_group=None, ignore_ ) # sales team - for d in customer.get("sales_team") or []: - target.append( - "sales_team", - { - "sales_person": d.sales_person, - "allocated_percentage": d.allocated_percentage or None, - "commission_rate": d.commission_rate, - }, - ) + if not target.get("sales_team"): + for d in customer.get("sales_team") or []: + target.append( + "sales_team", + { + "sales_person": d.sales_person, + "allocated_percentage": d.allocated_percentage or None, + "commission_rate": d.commission_rate, + }, + ) target.flags.ignore_permissions = ignore_permissions target.delivery_date = nowdate() From 5e0d017497ef7afaaa70abffbd3d3924f9e56063 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 9 Jan 2024 15:32:45 +0530 Subject: [PATCH 48/55] fix: BOM replace tool does not update exploded items of root (#39244) --- .../bom_update_log/bom_updation_utils.py | 6 +- .../bom_update_log/test_bom_update_log.py | 62 +++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom_update_log/bom_updation_utils.py b/erpnext/manufacturing/doctype/bom_update_log/bom_updation_utils.py index a2919b79b8..f013b88e94 100644 --- a/erpnext/manufacturing/doctype/bom_update_log/bom_updation_utils.py +++ b/erpnext/manufacturing/doctype/bom_update_log/bom_updation_utils.py @@ -86,10 +86,12 @@ def get_ancestor_boms(new_bom: str, bom_list: Optional[List] = None) -> List: if new_bom == d.parent: frappe.throw(_("BOM recursion: {0} cannot be child of {1}").format(new_bom, d.parent)) - bom_list.append(d.parent) + if d.parent not in tuple(bom_list): + bom_list.append(d.parent) + get_ancestor_boms(d.parent, bom_list) - return list(set(bom_list)) + return bom_list def update_new_bom_in_bom_items(unit_cost: float, current_bom: str, new_bom: str) -> None: diff --git a/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py b/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py index b38fc8976b..30e6f5e209 100644 --- a/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py +++ b/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py @@ -57,6 +57,68 @@ class TestBOMUpdateLog(FrappeTestCase): log.reload() self.assertEqual(log.status, "Completed") + def test_bom_replace_for_root_bom(self): + """ + - B-Item A (Root Item) + - B-Item B + - B-Item C + - B-Item D + - B-Item E + - B-Item F + + Create New BOM for B-Item E with B-Item G and replace it in the above BOM. + """ + + from erpnext.manufacturing.doctype.bom.test_bom import create_nested_bom + from erpnext.stock.doctype.item.test_item import make_item + + items = ["B-Item A", "B-Item B", "B-Item C", "B-Item D", "B-Item E", "B-Item F", "B-Item G"] + + for item_code in items: + if not frappe.db.exists("Item", item_code): + make_item(item_code) + + for item_code in items: + remove_bom(item_code) + + bom_tree = { + "B-Item A": {"B-Item B": {"B-Item C": {}}, "B-Item D": {"B-Item E": {"B-Item F": {}}}} + } + + root_bom = create_nested_bom(bom_tree, prefix="") + + exploded_items = frappe.get_all( + "BOM Explosion Item", filters={"parent": root_bom.name}, fields=["item_code"] + ) + + exploded_items = [item.item_code for item in exploded_items] + expected_exploded_items = ["B-Item C", "B-Item F"] + self.assertEqual(sorted(exploded_items), sorted(expected_exploded_items)) + + old_bom = frappe.db.get_value("BOM", {"item": "B-Item E"}, "name") + bom_tree = {"B-Item E": {"B-Item G": {}}} + + new_bom = create_nested_bom(bom_tree, prefix="") + enqueue_replace_bom(boms=frappe._dict(current_bom=old_bom, new_bom=new_bom.name)) + + exploded_items = frappe.get_all( + "BOM Explosion Item", filters={"parent": root_bom.name}, fields=["item_code"] + ) + + exploded_items = [item.item_code for item in exploded_items] + expected_exploded_items = ["B-Item C", "B-Item G"] + self.assertEqual(sorted(exploded_items), sorted(expected_exploded_items)) + + +def remove_bom(item_code): + boms = frappe.get_all("BOM", fields=["docstatus", "name"], filters={"item": item_code}) + + for row in boms: + if row.docstatus == 1: + frappe.get_doc("BOM", row.name).cancel() + + frappe.delete_doc("BOM", row.name) + def update_cost_in_all_boms_in_test(): """ From d32a407e08609737fa0bc880d5ef737ebf2b3e4c Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 9 Jan 2024 15:35:42 +0530 Subject: [PATCH 49/55] fix: update status on manual allocation --- erpnext/accounts/doctype/bank_transaction/bank_transaction.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py index 8d82123989..1d6cb8e2c0 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py @@ -91,6 +91,7 @@ class BankTransaction(Document): self.validate_duplicate_references() self.allocate_payment_entries() self.update_allocated_amount() + self.set_status() def on_cancel(self): for payment_entry in self.payment_entries: From 2d2ff7cf52a548b8e880cd212cbbe6ef4569ea28 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 9 Jan 2024 15:37:46 +0530 Subject: [PATCH 50/55] fix: incorrect indicator title for portal sales order (#39247) --- .../doctype/sales_order/sales_order.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 09941eaa82..95423612c8 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -582,17 +582,17 @@ class SalesOrder(SellingController): def set_indicator(self): """Set indicator for portal""" - if self.per_billed < 100 and self.per_delivered < 100: - self.indicator_color = "orange" - self.indicator_title = _("Not Paid and Not Delivered") + self.indicator_color = { + "Draft": "red", + "On Hold": "orange", + "To Deliver and Bill": "orange", + "To Bill": "orange", + "To Deliver": "orange", + "Completed": "green", + "Cancelled": "red", + }.get(self.status, "blue") - elif self.per_billed == 100 and self.per_delivered < 100: - self.indicator_color = "orange" - self.indicator_title = _("Paid and Not Delivered") - - else: - self.indicator_color = "green" - self.indicator_title = _("Paid") + self.indicator_title = _(self.status) def on_recurring(self, reference_doc, auto_repeat_doc): def _get_delivery_date(ref_doc_delivery_date, red_doc_transaction_date, transaction_date): From 274c65c451ccc71f11f29a2abc6d13b2b49b776c Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 9 Jan 2024 16:20:42 +0530 Subject: [PATCH 51/55] fix: TypeError is pricing rules (#39252) --- erpnext/accounts/doctype/pricing_rule/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/pricing_rule/utils.py b/erpnext/accounts/doctype/pricing_rule/utils.py index 18aa6820a3..17293adb95 100644 --- a/erpnext/accounts/doctype/pricing_rule/utils.py +++ b/erpnext/accounts/doctype/pricing_rule/utils.py @@ -527,7 +527,7 @@ def get_qty_amount_data_for_cumulative(pr_doc, doc, items=None): values.extend(warehouses) if items: - condition = " and `tab{child_doc}`.{apply_on} in ({items})".format( + condition += " and `tab{child_doc}`.{apply_on} in ({items})".format( child_doc=child_doctype, apply_on=apply_on, items=",".join(["%s"] * len(items)) ) From b15795392bdf8165e7ddfb60451353ebefa177d2 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Tue, 9 Jan 2024 19:01:21 +0530 Subject: [PATCH 52/55] fix: Duplicate Closing Stock Balance --- .../doctype/closing_stock_balance/closing_stock_balance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py b/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py index f71d21dd0b..1c7018366a 100644 --- a/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py +++ b/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.py @@ -65,7 +65,7 @@ class ClosingStockBalance(Document): & ( (table.from_date.between(self.from_date, self.to_date)) | (table.to_date.between(self.from_date, self.to_date)) - | (table.from_date >= self.from_date and table.to_date <= self.to_date) + | (table.from_date >= self.from_date and table.to_date >= self.to_date) ) ) ) From e0ad52b50036e689247f23090a5de89a7fb4abfa Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Tue, 9 Jan 2024 21:05:00 +0530 Subject: [PATCH 53/55] fix: skip rate validation for return `DN Items` with `Moving Average` valuation --- erpnext/controllers/sales_and_purchase_return.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index e7bd2a7265..6e50279d04 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -10,7 +10,7 @@ from frappe.utils import flt, format_datetime, get_datetime import erpnext from erpnext.stock.serial_batch_bundle import get_batches_from_bundle from erpnext.stock.serial_batch_bundle import get_serial_nos as get_serial_nos_from_bundle -from erpnext.stock.utils import get_incoming_rate +from erpnext.stock.utils import get_incoming_rate, get_valuation_method class StockOverReturnError(frappe.ValidationError): @@ -116,7 +116,12 @@ def validate_returned_items(doc): ref = valid_items.get(d.item_code, frappe._dict()) validate_quantity(doc, d, ref, valid_items, already_returned_items) - if ref.rate and doc.doctype in ("Delivery Note", "Sales Invoice") and flt(d.rate) > ref.rate: + if ( + ref.rate + and flt(d.rate) > ref.rate + and doc.doctype in ("Delivery Note", "Sales Invoice") + and get_valuation_method(ref.item_code) != "Moving Average" + ): frappe.throw( _("Row # {0}: Rate cannot be greater than the rate used in {1} {2}").format( d.idx, doc.doctype, doc.return_against From bb18ae82cfd235ca0dc6b85059df77cf7d002f48 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 9 Jan 2024 21:56:47 +0530 Subject: [PATCH 54/55] refactor: use db.get_single_value --- erpnext/accounts/doctype/account/account.py | 4 ++-- erpnext/accounts/doctype/gl_entry/gl_entry.py | 4 ++-- .../accounts/doctype/purchase_invoice/purchase_invoice.py | 4 ++-- .../doctype/purchase_invoice/test_purchase_invoice.py | 4 ++-- erpnext/accounts/general_ledger.py | 6 +++--- .../report/accounts_receivable/accounts_receivable.py | 4 ++-- .../accounts_receivable_summary.py | 4 ++-- .../customer_ledger_summary/customer_ledger_summary.py | 4 ++-- erpnext/assets/doctype/asset/depreciation.py | 2 +- .../doctype/request_for_quotation/request_for_quotation.py | 6 +++--- .../doctype/tally_migration/tally_migration.py | 4 +--- erpnext/manufacturing/doctype/workstation/workstation.py | 2 +- .../patches/v13_0/modify_invalid_gain_loss_gl_entries.py | 2 +- erpnext/patches/v14_0/migrate_crm_settings.py | 3 +-- erpnext/selling/doctype/sales_order/test_sales_order.py | 4 ++-- .../customer_credit_balance/customer_credit_balance.py | 2 +- erpnext/startup/boot.py | 2 +- erpnext/stock/doctype/item/item.py | 4 ++-- erpnext/stock/doctype/price_list/price_list.py | 4 ++-- erpnext/stock/doctype/purchase_receipt/purchase_receipt.py | 2 +- .../doctype/repost_item_valuation/repost_item_valuation.py | 7 ++----- erpnext/stock/reorder_item.py | 4 ++-- erpnext/stock/stock_balance.py | 4 ++-- erpnext/stock/utils.py | 2 +- erpnext/support/doctype/issue/issue.py | 2 +- erpnext/utilities/doctype/video/video.py | 4 ++-- 26 files changed, 44 insertions(+), 50 deletions(-) diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py index 82af85d702..651599dafd 100644 --- a/erpnext/accounts/doctype/account/account.py +++ b/erpnext/accounts/doctype/account/account.py @@ -91,8 +91,8 @@ class Account(NestedSet): super(Account, self).on_update() def onload(self): - frozen_accounts_modifier = frappe.db.get_value( - "Accounts Settings", "Accounts Settings", "frozen_accounts_modifier" + frozen_accounts_modifier = frappe.db.get_single_value( + "Accounts Settings", "frozen_accounts_modifier" ) if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles(): self.set_onload("can_freeze_account", True) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index 139f52696b..777a5bb91c 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -435,8 +435,8 @@ def update_outstanding_amt( def validate_frozen_account(account, adv_adj=None): frozen_account = frappe.get_cached_value("Account", account, "freeze_account") if frozen_account == "Yes" and not adv_adj: - frozen_accounts_modifier = frappe.db.get_value( - "Accounts Settings", None, "frozen_accounts_modifier" + frozen_accounts_modifier = frappe.db.get_single_value( + "Accounts Settings", "frozen_accounts_modifier" ) if not frozen_accounts_modifier: diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index e676560c5c..7f145c569e 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -552,7 +552,7 @@ class PurchaseInvoice(BuyingController): self.against_expense_account = ",".join(against_accounts) def po_required(self): - if frappe.db.get_value("Buying Settings", None, "po_required") == "Yes": + if frappe.db.get_single_value("Buying Settings", "po_required") == "Yes": if frappe.get_value( "Supplier", self.supplier, "allow_purchase_invoice_creation_without_purchase_order" @@ -572,7 +572,7 @@ class PurchaseInvoice(BuyingController): def pr_required(self): stock_items = self.get_stock_items() - if frappe.db.get_value("Buying Settings", None, "pr_required") == "Yes": + if frappe.db.get_single_value("Buying Settings", "pr_required") == "Yes": if frappe.get_value( "Supplier", self.supplier, "allow_purchase_invoice_creation_without_purchase_receipt" diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 8aa95bfa44..5acd8b074b 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -1237,8 +1237,8 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin): @change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1}) def test_gain_loss_with_advance_entry(self): - unlink_enabled = frappe.db.get_value( - "Accounts Settings", "Accounts Settings", "unlink_payment_on_cancel_of_invoice" + unlink_enabled = frappe.db.get_single_value( + "Accounts Settings", "unlink_payment_on_cancel_of_invoice" ) frappe.db.set_single_value("Accounts Settings", "unlink_payment_on_cancel_of_invoice", 1) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 91ba239f33..b48a8e6115 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -654,10 +654,10 @@ def check_freezing_date(posting_date, adv_adj=False): Hence stop admin to bypass if accounts are freezed """ if not adv_adj: - acc_frozen_upto = frappe.db.get_value("Accounts Settings", None, "acc_frozen_upto") + acc_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") if acc_frozen_upto: - frozen_accounts_modifier = frappe.db.get_value( - "Accounts Settings", None, "frozen_accounts_modifier" + frozen_accounts_modifier = frappe.db.get_single_value( + "Accounts Settings", "frozen_accounts_modifier" ) if getdate(posting_date) <= getdate(acc_frozen_upto) and ( frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator" diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 9feda11d3f..3a70afc3f0 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -55,8 +55,8 @@ class ReceivablePayableReport(object): def run(self, args): self.filters.update(args) self.set_defaults() - self.party_naming_by = frappe.db.get_value( - args.get("naming_by")[0], None, args.get("naming_by")[1] + self.party_naming_by = frappe.db.get_single_value( + args.get("naming_by")[0], args.get("naming_by")[1] ) self.get_columns() self.get_data() diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py index 22b5c6ba76..0947cffc9f 100644 --- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py @@ -24,8 +24,8 @@ class AccountsReceivableSummary(ReceivablePayableReport): def run(self, args): self.account_type = args.get("account_type") self.party_type = get_party_types_from_account_type(self.account_type) - self.party_naming_by = frappe.db.get_value( - args.get("naming_by")[0], None, args.get("naming_by")[1] + self.party_naming_by = frappe.db.get_single_value( + args.get("naming_by")[0], args.get("naming_by")[1] ) self.get_columns() self.get_data(args) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 0464f99d20..a2c0f86f6c 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -21,8 +21,8 @@ class PartyLedgerSummaryReport(object): frappe.throw(_("From Date must be before To Date")) self.filters.party_type = args.get("party_type") - self.party_naming_by = frappe.db.get_value( - args.get("naming_by")[0], None, args.get("naming_by")[1] + self.party_naming_by = frappe.db.get_single_value( + args.get("naming_by")[0], args.get("naming_by")[1] ) self.get_gl_entries() diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py index 66930c0e7c..017df90d41 100644 --- a/erpnext/assets/doctype/asset/depreciation.py +++ b/erpnext/assets/doctype/asset/depreciation.py @@ -35,7 +35,7 @@ from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_sched def post_depreciation_entries(date=None): # Return if automatic booking of asset depreciation is disabled if not cint( - frappe.db.get_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically") + frappe.db.get_single_value("Accounts Settings", "book_asset_depreciation_entry_automatically") ): return diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index 9aaf86b3ab..eec996c6a9 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -358,8 +358,8 @@ def make_supplier_quotation_from_rfq(source_name, target_doc=None, for_supplier= target_doc.currency = args.currency or get_party_account_currency( "Supplier", for_supplier, source.company ) - target_doc.buying_price_list = args.buying_price_list or frappe.db.get_value( - "Buying Settings", None, "buying_price_list" + target_doc.buying_price_list = args.buying_price_list or frappe.db.get_single_value( + "Buying Settings", "buying_price_list" ) set_missing_values(source, target_doc) @@ -399,7 +399,7 @@ def create_supplier_quotation(doc): "currency": doc.get("currency") or get_party_account_currency("Supplier", doc.get("supplier"), doc.get("company")), "buying_price_list": doc.get("buying_price_list") - or frappe.db.get_value("Buying Settings", None, "buying_price_list"), + or frappe.db.get_single_value("Buying Settings", "buying_price_list"), } ) add_items(sq_doc, doc.get("supplier"), doc.get("items")) diff --git a/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.py b/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.py index 8ebca549a0..ba1fae925e 100644 --- a/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.py +++ b/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.py @@ -129,9 +129,7 @@ class TallyMigration(Document): self.default_cost_center, self.default_round_off_account = frappe.db.get_value( "Company", self.erpnext_company, ["cost_center", "round_off_account"] ) - self.default_warehouse = frappe.db.get_value( - "Stock Settings", "Stock Settings", "default_warehouse" - ) + self.default_warehouse = frappe.db.get_single_value("Stock Settings", "default_warehouse") def _process_master_data(self): def get_company_name(collection): diff --git a/erpnext/manufacturing/doctype/workstation/workstation.py b/erpnext/manufacturing/doctype/workstation/workstation.py index 0a247fc431..0f05eaac00 100644 --- a/erpnext/manufacturing/doctype/workstation/workstation.py +++ b/erpnext/manufacturing/doctype/workstation/workstation.py @@ -156,7 +156,7 @@ def check_if_within_operating_hours(workstation, operation, from_datetime, to_da if not frappe.db.get_single_value("Manufacturing Settings", "allow_production_on_holidays"): check_workstation_for_holiday(workstation, from_datetime, to_datetime) - if not cint(frappe.db.get_value("Manufacturing Settings", None, "allow_overtime")): + if not cint(frappe.db.get_single_value("Manufacturing Settings", "allow_overtime")): is_within_operating_hours(workstation, operation, from_datetime, to_datetime) diff --git a/erpnext/patches/v13_0/modify_invalid_gain_loss_gl_entries.py b/erpnext/patches/v13_0/modify_invalid_gain_loss_gl_entries.py index 0f77afda78..8e58d79b92 100644 --- a/erpnext/patches/v13_0/modify_invalid_gain_loss_gl_entries.py +++ b/erpnext/patches/v13_0/modify_invalid_gain_loss_gl_entries.py @@ -45,7 +45,7 @@ def execute(): message=json.dumps(purchase_invoices + sales_invoices, indent=2), ) - acc_frozen_upto = frappe.db.get_value("Accounts Settings", None, "acc_frozen_upto") + acc_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") if acc_frozen_upto: frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", None) diff --git a/erpnext/patches/v14_0/migrate_crm_settings.py b/erpnext/patches/v14_0/migrate_crm_settings.py index 24772553d9..d093bc386e 100644 --- a/erpnext/patches/v14_0/migrate_crm_settings.py +++ b/erpnext/patches/v14_0/migrate_crm_settings.py @@ -2,8 +2,7 @@ import frappe def execute(): - settings = frappe.db.get_value( - "Selling Settings", + settings = frappe.db.get_single_value( "Selling Settings", ["campaign_naming_by", "close_opportunity_after_days", "default_valid_till"], as_dict=True, diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index a6c86a670d..ac7fdb1b45 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -35,8 +35,8 @@ class TestSalesOrder(FrappeTestCase): def setUpClass(cls): super().setUpClass() cls.unlink_setting = int( - frappe.db.get_value( - "Accounts Settings", "Accounts Settings", "unlink_advance_payment_on_cancelation_of_order" + frappe.db.get_single_value( + "Accounts Settings", "unlink_advance_payment_on_cancelation_of_order" ) ) diff --git a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py index 98633cb719..a584d3ae53 100644 --- a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py +++ b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py @@ -13,7 +13,7 @@ def execute(filters=None): if not filters: filters = {} # Check if customer id is according to naming series or customer name - customer_naming_type = frappe.db.get_value("Selling Settings", None, "cust_master_name") + customer_naming_type = frappe.db.get_single_value("Selling Settings", "cust_master_name") columns = get_columns(customer_naming_type) data = [] diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index 4b4d14f89e..4cd0ef4eef 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -9,7 +9,7 @@ from frappe.utils import cint def boot_session(bootinfo): """boot session - send website info if guest""" - bootinfo.custom_css = frappe.db.get_value("Style Settings", None, "custom_css") or "" + bootinfo.custom_css = frappe.db.get_single_value("Style Settings", "custom_css") or "" if frappe.session["user"] != "Guest": update_page_info(bootinfo) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 2d9e11ab84..feb4583436 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -635,8 +635,8 @@ class Item(Document): def recalculate_bin_qty(self, new_name): from erpnext.stock.stock_balance import repost_stock - existing_allow_negative_stock = frappe.db.get_value( - "Stock Settings", None, "allow_negative_stock" + existing_allow_negative_stock = frappe.db.get_single_value( + "Stock Settings", "allow_negative_stock" ) frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) diff --git a/erpnext/stock/doctype/price_list/price_list.py b/erpnext/stock/doctype/price_list/price_list.py index 580c7c00b1..882c3f5c9c 100644 --- a/erpnext/stock/doctype/price_list/price_list.py +++ b/erpnext/stock/doctype/price_list/price_list.py @@ -39,11 +39,11 @@ class PriceList(Document): def set_default_if_missing(self): if cint(self.selling): - if not frappe.db.get_value("Selling Settings", None, "selling_price_list"): + if not frappe.db.get_single_value("Selling Settings", "selling_price_list"): frappe.set_value("Selling Settings", "Selling Settings", "selling_price_list", self.name) elif cint(self.buying): - if not frappe.db.get_value("Buying Settings", None, "buying_price_list"): + if not frappe.db.get_single_value("Buying Settings", "buying_price_list"): frappe.set_value("Buying Settings", "Buying Settings", "buying_price_list", self.name) def update_item_price(self): diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index c7e36e9904..5cfa739242 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -302,7 +302,7 @@ class PurchaseReceipt(BuyingController): ) def po_required(self): - if frappe.db.get_value("Buying Settings", None, "po_required") == "Yes": + if frappe.db.get_single_value("Buying Settings", "po_required") == "Yes": for d in self.get("items"): if not d.purchase_order: frappe.throw(_("Purchase Order number required for Item {0}").format(d.item_code)) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index 79b8ee30cf..909aa36710 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -140,11 +140,8 @@ class RepostItemValuation(Document): return query[0][0] if query else None def validate_accounts_freeze(self): - acc_settings = frappe.db.get_value( - "Accounts Settings", - "Accounts Settings", - ["acc_frozen_upto", "frozen_accounts_modifier"], - as_dict=1, + acc_settings = frappe.db.get_single_value( + "Accounts Settings", ["acc_frozen_upto", "frozen_accounts_modifier"], as_dict=1 ) if not acc_settings.acc_frozen_upto: return diff --git a/erpnext/stock/reorder_item.py b/erpnext/stock/reorder_item.py index a6f52f3731..4cd9cbb9d5 100644 --- a/erpnext/stock/reorder_item.py +++ b/erpnext/stock/reorder_item.py @@ -18,7 +18,7 @@ def reorder_item(): if not (frappe.db.a_row_exists("Company") and frappe.db.a_row_exists("Fiscal Year")): return - if cint(frappe.db.get_value("Stock Settings", None, "auto_indent")): + if cint(frappe.db.get_single_value("Stock Settings", "auto_indent")): return _reorder_item() @@ -212,7 +212,7 @@ def create_material_request(material_requests): if mr_list: if getattr(frappe.local, "reorder_email_notify", None) is None: frappe.local.reorder_email_notify = cint( - frappe.db.get_value("Stock Settings", None, "reorder_email_notify") + frappe.db.get_single_value("Stock Settings", "reorder_email_notify") ) if frappe.local.reorder_email_notify: diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py index a4fe2ee52f..ba03ff2ad7 100644 --- a/erpnext/stock/stock_balance.py +++ b/erpnext/stock/stock_balance.py @@ -15,8 +15,8 @@ def repost(only_actual=False, allow_negative_stock=False, allow_zero_rate=False, frappe.db.auto_commit_on_many_writes = 1 if allow_negative_stock: - existing_allow_negative_stock = frappe.db.get_value( - "Stock Settings", None, "allow_negative_stock" + existing_allow_negative_stock = frappe.db.get_single_value( + "Stock Settings", "allow_negative_stock" ) frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index 4b0e2845c4..f29e7ea6a1 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -338,7 +338,7 @@ def get_valuation_method(item_code): val_method = frappe.db.get_value("Item", item_code, "valuation_method", cache=True) if not val_method: val_method = ( - frappe.db.get_value("Stock Settings", None, "valuation_method", cache=True) or "FIFO" + frappe.db.get_single_value("Stock Settings", "valuation_method", cache=True) or "FIFO" ) return val_method diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py index c03fb3ea1f..dc1529b26f 100644 --- a/erpnext/support/doctype/issue/issue.py +++ b/erpnext/support/doctype/issue/issue.py @@ -230,7 +230,7 @@ def set_status(name, status): def auto_close_tickets(): """Auto-close replied support tickets after 7 days""" auto_close_after_days = ( - frappe.db.get_value("Support Settings", "Support Settings", "close_issue_after_days") or 7 + frappe.db.get_single_value("Support Settings", "close_issue_after_days") or 7 ) table = frappe.qb.DocType("Issue") diff --git a/erpnext/utilities/doctype/video/video.py b/erpnext/utilities/doctype/video/video.py index 1a9fe19732..7a04329cb9 100644 --- a/erpnext/utilities/doctype/video/video.py +++ b/erpnext/utilities/doctype/video/video.py @@ -78,8 +78,8 @@ def get_frequency(value): def update_youtube_data(): # Called every 30 minutes via hooks - enable_youtube_tracking, frequency = frappe.db.get_value( - "Video Settings", "Video Settings", ["enable_youtube_tracking", "frequency"] + enable_youtube_tracking, frequency = frappe.db.get_single_value( + "Video Settings", ["enable_youtube_tracking", "frequency"] ) if not cint(enable_youtube_tracking): From b897225136cdbbb0a8369343a589dabb3a556b0a Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 9 Jan 2024 22:04:24 +0530 Subject: [PATCH 55/55] fix: Remove reference to non-existing doctype --- erpnext/crm/doctype/appointment/appointment.py | 2 +- erpnext/startup/boot.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/erpnext/crm/doctype/appointment/appointment.py b/erpnext/crm/doctype/appointment/appointment.py index a735510d7d..541f77b1ba 100644 --- a/erpnext/crm/doctype/appointment/appointment.py +++ b/erpnext/crm/doctype/appointment/appointment.py @@ -76,7 +76,7 @@ class Appointment(Document): self.create_calendar_event() else: # Set status to unverified - self.status = "Unverified" + self.db_set("status", "Unverified") # Send email to confirm self.send_confirmation_email() diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index 4cd0ef4eef..d2be1a0242 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -9,8 +9,6 @@ from frappe.utils import cint def boot_session(bootinfo): """boot session - send website info if guest""" - bootinfo.custom_css = frappe.db.get_single_value("Style Settings", "custom_css") or "" - if frappe.session["user"] != "Guest": update_page_info(bootinfo)