Merge branch 'develop' into debit-credit-opening-invoice-tool

This commit is contained in:
Marica 2020-10-13 16:54:39 +05:30 committed by GitHub
commit 6f819d797b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 144 additions and 150 deletions

View File

@ -195,9 +195,7 @@ def create_sales_invoice_record(qty=1):
def create_records(): def create_records():
# create a new loyalty Account # create a new loyalty Account
if frappe.db.exists("Account", "Loyalty - _TC"): if not frappe.db.exists("Account", "Loyalty - _TC"):
return
frappe.get_doc({ frappe.get_doc({
"doctype": "Account", "doctype": "Account",
"account_name": "Loyalty", "account_name": "Loyalty",
@ -208,6 +206,7 @@ def create_records():
}).insert() }).insert()
# create a new loyalty program Single tier # create a new loyalty program Single tier
if not frappe.db.exists("Loyalty Program","Test Single Loyalty"):
frappe.get_doc({ frappe.get_doc({
"doctype": "Loyalty Program", "doctype": "Loyalty Program",
"loyalty_program_name": "Test Single Loyalty", "loyalty_program_name": "Test Single Loyalty",
@ -227,6 +226,7 @@ def create_records():
}).insert() }).insert()
# create a new customer # create a new customer
if not frappe.db.exists("Customer","Test Loyalty Customer"):
frappe.get_doc({ frappe.get_doc({
"customer_group": "_Test Customer Group", "customer_group": "_Test Customer Group",
"customer_name": "Test Loyalty Customer", "customer_name": "Test Loyalty Customer",
@ -236,6 +236,7 @@ def create_records():
}).insert() }).insert()
# create a new loyalty program Multiple tier # create a new loyalty program Multiple tier
if not frappe.db.exists("Loyalty Program","Test Multiple Loyalty"):
frappe.get_doc({ frappe.get_doc({
"doctype": "Loyalty Program", "doctype": "Loyalty Program",
"loyalty_program_name": "Test Multiple Loyalty", "loyalty_program_name": "Test Multiple Loyalty",
@ -262,7 +263,8 @@ def create_records():
}).insert() }).insert()
# create an item # create an item
item = frappe.get_doc({ if not frappe.db.exists("Item", "Loyal Item"):
frappe.get_doc({
"doctype": "Item", "doctype": "Item",
"item_code": "Loyal Item", "item_code": "Loyal Item",
"item_name": "Loyal Item", "item_name": "Loyal Item",
@ -274,9 +276,10 @@ def create_records():
}).insert() }).insert()
# create item price # create item price
if not frappe.db.exists("Item Price", {"price_list": "Standard Selling", "item_code": "Loyal Item"}):
frappe.get_doc({ frappe.get_doc({
"doctype": "Item Price", "doctype": "Item Price",
"price_list": "Standard Selling", "price_list": "Standard Selling",
"item_code": item.item_code, "item_code": "Loyal Item",
"price_list_rate": 10000 "price_list_rate": 10000
}).insert() }).insert()

View File

@ -45,7 +45,7 @@ class TestPOSClosingEntry(unittest.TestCase):
frappe.set_user("Administrator") frappe.set_user("Administrator")
frappe.db.sql("delete from `tabPOS Profile`") frappe.db.sql("delete from `tabPOS Profile`")
def init_user_and_profile(): def init_user_and_profile(**args):
user = 'test@example.com' user = 'test@example.com'
test_user = frappe.get_doc('User', user) test_user = frappe.get_doc('User', user)
@ -53,7 +53,7 @@ def init_user_and_profile():
test_user.add_roles(*roles) test_user.add_roles(*roles)
frappe.set_user(user) frappe.set_user(user)
pos_profile = make_pos_profile() pos_profile = make_pos_profile(**args)
pos_profile.append('applicable_for_users', { pos_profile.append('applicable_for_users', {
'default': 1, 'default': 1,
'user': user 'user': user

View File

@ -139,7 +139,8 @@ class POSInvoice(SalesInvoice):
frappe.throw(_("At least one mode of payment is required for POS invoice.")) frappe.throw(_("At least one mode of payment is required for POS invoice."))
def validate_change_account(self): def validate_change_account(self):
if frappe.db.get_value("Account", self.account_for_change_amount, "company") != self.company: if self.change_amount and self.account_for_change_amount and \
frappe.db.get_value("Account", self.account_for_change_amount, "company") != self.company:
frappe.throw(_("The selected change account {} doesn't belongs to Company {}.").format(self.account_for_change_amount, self.company)) frappe.throw(_("The selected change account {} doesn't belongs to Company {}.").format(self.account_for_change_amount, self.company))
def validate_change_amount(self): def validate_change_amount(self):

View File

@ -8,6 +8,7 @@ import unittest, copy, time
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
from erpnext.accounts.doctype.pos_invoice.pos_invoice import make_sales_return from erpnext.accounts.doctype.pos_invoice.pos_invoice import make_sales_return
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
class TestPOSInvoice(unittest.TestCase): class TestPOSInvoice(unittest.TestCase):
def test_timestamp_change(self): def test_timestamp_change(self):
@ -222,29 +223,29 @@ class TestPOSInvoice(unittest.TestCase):
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
se = make_serialized_item(company='_Test Company with perpetual inventory', se = make_serialized_item(company='_Test Company',
target_warehouse="Stores - TCP1", cost_center='Main - TCP1', expense_account='Cost of Goods Sold - TCP1') target_warehouse="Stores - _TC", cost_center='Main - _TC', expense_account='Cost of Goods Sold - _TC')
serial_nos = get_serial_nos(se.get("items")[0].serial_no) serial_nos = get_serial_nos(se.get("items")[0].serial_no)
pos = create_pos_invoice(company='_Test Company with perpetual inventory', debit_to='Debtors - TCP1', pos = create_pos_invoice(company='_Test Company', debit_to='Debtors - _TC',
account_for_change_amount='Cash - TCP1', warehouse='Stores - TCP1', income_account='Sales - TCP1', account_for_change_amount='Cash - _TC', warehouse='Stores - _TC', income_account='Sales - _TC',
expense_account='Cost of Goods Sold - TCP1', cost_center='Main - TCP1', expense_account='Cost of Goods Sold - _TC', cost_center='Main - _TC',
item=se.get("items")[0].item_code, rate=1000, do_not_save=1) item=se.get("items")[0].item_code, rate=1000, do_not_save=1)
pos.get("items")[0].serial_no = serial_nos[0] pos.get("items")[0].serial_no = serial_nos[0]
pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - TCP1', 'amount': 1000}) pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 1000})
pos.insert() pos.insert()
pos.submit() pos.submit()
pos2 = create_pos_invoice(company='_Test Company with perpetual inventory', debit_to='Debtors - TCP1', pos2 = create_pos_invoice(company='_Test Company', debit_to='Debtors - _TC',
account_for_change_amount='Cash - TCP1', warehouse='Stores - TCP1', income_account='Sales - TCP1', account_for_change_amount='Cash - _TC', warehouse='Stores - _TC', income_account='Sales - _TC',
expense_account='Cost of Goods Sold - TCP1', cost_center='Main - TCP1', expense_account='Cost of Goods Sold - _TC', cost_center='Main - _TC',
item=se.get("items")[0].item_code, rate=1000, do_not_save=1) item=se.get("items")[0].item_code, rate=1000, do_not_save=1)
pos2.get("items")[0].serial_no = serial_nos[0] pos2.get("items")[0].serial_no = serial_nos[0]
pos2.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - TCP1', 'amount': 1000}) pos2.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 1000})
self.assertRaises(frappe.ValidationError, pos2.insert) self.assertRaises(frappe.ValidationError, pos2.insert)
@ -295,7 +296,7 @@ class TestPOSInvoice(unittest.TestCase):
test_user, pos_profile = init_user_and_profile() test_user, pos_profile = init_user_and_profile()
pos_inv = create_pos_invoice(rate=300, additional_discount_percentage=10, do_not_submit=1) pos_inv = create_pos_invoice(rate=300, additional_discount_percentage=10, do_not_submit=1)
pos_inv.append('payments', { pos_inv.append('payments', {
'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 300 'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 270
}) })
pos_inv.submit() pos_inv.submit()
@ -309,7 +310,7 @@ class TestPOSInvoice(unittest.TestCase):
pos_inv.load_from_db() pos_inv.load_from_db()
rounded_total = frappe.db.get_value("Sales Invoice", pos_inv.consolidated_invoice, "rounded_total") rounded_total = frappe.db.get_value("Sales Invoice", pos_inv.consolidated_invoice, "rounded_total")
self.assertEqual(rounded_total, 3500) self.assertEqual(rounded_total, 3470)
frappe.set_user("Administrator") frappe.set_user("Administrator")
def test_merging_into_sales_invoice_with_discount_and_inclusive_tax(self): def test_merging_into_sales_invoice_with_discount_and_inclusive_tax(self):
@ -361,7 +362,7 @@ class TestPOSInvoice(unittest.TestCase):
if not frappe.db.get_single_value("Selling Settings", "validate_selling_price"): if not frappe.db.get_single_value("Selling Settings", "validate_selling_price"):
frappe.db.set_value("Selling Settings", "Selling Settings", "validate_selling_price", 1) frappe.db.set_value("Selling Settings", "Selling Settings", "validate_selling_price", 1)
make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=1, basic_rate=300) make_purchase_receipt(item_code="_Test Item", warehouse="_Test Warehouse - _TC", qty=1, rate=300)
frappe.db.sql("delete from `tabPOS Invoice`") frappe.db.sql("delete from `tabPOS Invoice`")
test_user, pos_profile = init_user_and_profile() test_user, pos_profile = init_user_and_profile()
pos_inv = create_pos_invoice(rate=300, do_not_submit=1) pos_inv = create_pos_invoice(rate=300, do_not_submit=1)
@ -413,8 +414,6 @@ def create_pos_invoice(**args):
pos_inv.is_pos = 1 pos_inv.is_pos = 1
pos_inv.pos_profile = args.pos_profile or pos_profile.name pos_inv.pos_profile = args.pos_profile or pos_profile.name
pos_inv.set_missing_values()
if args.posting_date: if args.posting_date:
pos_inv.set_posting_time = 1 pos_inv.set_posting_time = 1
pos_inv.posting_date = args.posting_date or frappe.utils.nowdate() pos_inv.posting_date = args.posting_date or frappe.utils.nowdate()
@ -428,6 +427,8 @@ def create_pos_invoice(**args):
pos_inv.conversion_rate = args.conversion_rate or 1 pos_inv.conversion_rate = args.conversion_rate or 1
pos_inv.account_for_change_amount = args.account_for_change_amount or "Cash - _TC" pos_inv.account_for_change_amount = args.account_for_change_amount or "Cash - _TC"
pos_inv.set_missing_values()
pos_inv.append("items", { pos_inv.append("items", {
"item_code": args.item or args.item_code or "_Test Item", "item_code": args.item or args.item_code or "_Test Item",
"warehouse": args.warehouse or "_Test Warehouse - _TC", "warehouse": args.warehouse or "_Test Warehouse - _TC",

View File

@ -651,12 +651,12 @@ class TestPurchaseOrder(unittest.TestCase):
make_subcontracted_item(item_code) make_subcontracted_item(item_code)
po = create_purchase_order(item_code=item_code, qty=1, po = create_purchase_order(item_code=item_code, qty=1,
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC") is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", include_exploded_items=1)
name = frappe.db.get_value('BOM', {'item': item_code}, 'name') name = frappe.db.get_value('BOM', {'item': item_code}, 'name')
bom = frappe.get_doc('BOM', name) bom = frappe.get_doc('BOM', name)
exploded_items = sorted([d.item_code for d in bom.exploded_items]) exploded_items = sorted([d.item_code for d in bom.exploded_items if not d.get('sourced_by_supplier')])
supplied_items = sorted([d.rm_item_code for d in po.supplied_items]) supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
self.assertEquals(exploded_items, supplied_items) self.assertEquals(exploded_items, supplied_items)
@ -664,7 +664,7 @@ class TestPurchaseOrder(unittest.TestCase):
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", include_exploded_items=0) is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", include_exploded_items=0)
supplied_items1 = sorted([d.rm_item_code for d in po1.supplied_items]) supplied_items1 = sorted([d.rm_item_code for d in po1.supplied_items])
bom_items = sorted([d.item_code for d in bom.items]) bom_items = sorted([d.item_code for d in bom.items if not d.get('sourced_by_supplier')])
self.assertEquals(supplied_items1, bom_items) self.assertEquals(supplied_items1, bom_items)

View File

@ -9,7 +9,7 @@ import frappe
from frappe.utils import nowdate from frappe.utils import nowdate
from erpnext.stock.doctype.item.test_item import make_item from erpnext.stock.doctype.item.test_item import make_item
from erpnext.templates.pages.rfq import check_supplier_has_docname_access from erpnext.templates.pages.rfq import check_supplier_has_docname_access
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import make_supplier_quotation from erpnext.buying.doctype.request_for_quotation.request_for_quotation import make_supplier_quotation_from_rfq
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import create_supplier_quotation from erpnext.buying.doctype.request_for_quotation.request_for_quotation import create_supplier_quotation
from erpnext.crm.doctype.opportunity.test_opportunity import make_opportunity from erpnext.crm.doctype.opportunity.test_opportunity import make_opportunity
from erpnext.crm.doctype.opportunity.opportunity import make_request_for_quotation as make_rfq from erpnext.crm.doctype.opportunity.opportunity import make_request_for_quotation as make_rfq
@ -22,7 +22,7 @@ class TestRequestforQuotation(unittest.TestCase):
self.assertEqual(rfq.get('suppliers')[1].quote_status, 'Pending') self.assertEqual(rfq.get('suppliers')[1].quote_status, 'Pending')
# Submit the first supplier quotation # Submit the first supplier quotation
sq = make_supplier_quotation(rfq.name, rfq.get('suppliers')[0].supplier) sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=rfq.get('suppliers')[0].supplier)
sq.submit() sq.submit()
# No Quote first supplier quotation # No Quote first supplier quotation
@ -37,10 +37,10 @@ class TestRequestforQuotation(unittest.TestCase):
def test_make_supplier_quotation(self): def test_make_supplier_quotation(self):
rfq = make_request_for_quotation() rfq = make_request_for_quotation()
sq = make_supplier_quotation(rfq.name, rfq.get('suppliers')[0].supplier) sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=rfq.get('suppliers')[0].supplier)
sq.submit() sq.submit()
sq1 = make_supplier_quotation(rfq.name, rfq.get('suppliers')[1].supplier) sq1 = make_supplier_quotation_from_rfq(rfq.name, for_supplier=rfq.get('suppliers')[1].supplier)
sq1.submit() sq1.submit()
self.assertEqual(sq.supplier, rfq.get('suppliers')[0].supplier) self.assertEqual(sq.supplier, rfq.get('suppliers')[0].supplier)
@ -62,7 +62,7 @@ class TestRequestforQuotation(unittest.TestCase):
rfq = make_request_for_quotation(supplier_data=supplier_wt_appos) rfq = make_request_for_quotation(supplier_data=supplier_wt_appos)
sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier")) sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=supplier_wt_appos[0].get("supplier"))
sq.submit() sq.submit()
frappe.form_dict = frappe.local("form_dict") frappe.form_dict = frappe.local("form_dict")

View File

@ -11,7 +11,7 @@ from erpnext.accounts.party import get_party_account_currency
from erpnext.exceptions import InvalidCurrency from erpnext.exceptions import InvalidCurrency
from erpnext.stock.doctype.material_request.material_request import make_request_for_quotation from erpnext.stock.doctype.material_request.material_request import make_request_for_quotation
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import \ from erpnext.buying.doctype.request_for_quotation.request_for_quotation import \
make_supplier_quotation as make_quotation_from_rfq make_supplier_quotation_from_rfq
def work(): def work():
frappe.set_user(frappe.db.get_global('demo_purchase_user')) frappe.set_user(frappe.db.get_global('demo_purchase_user'))
@ -44,7 +44,7 @@ def work():
rfq = frappe.get_doc('Request for Quotation', rfq.name) rfq = frappe.get_doc('Request for Quotation', rfq.name)
for supplier in rfq.suppliers: for supplier in rfq.suppliers:
supplier_quotation = make_quotation_from_rfq(rfq.name, supplier.supplier) supplier_quotation = make_supplier_quotation_from_rfq(rfq.name, for_supplier=supplier.supplier)
supplier_quotation.save() supplier_quotation.save()
supplier_quotation.submit() supplier_quotation.submit()

View File

@ -1,3 +1,4 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt # License: GNU General Public License v3. See license.txt
@ -32,7 +33,7 @@ class HolidayList(Document):
def validate_days(self): def validate_days(self):
if self.from_date > self.to_date: if getdate(self.from_date) > getdate(self.to_date):
throw(_("To Date cannot be before From Date")) throw(_("To Date cannot be before From Date"))
for day in self.get("holidays"): for day in self.get("holidays"):

View File

@ -207,7 +207,6 @@ class TestBOM(unittest.TestCase):
supplied_items = sorted([d.rm_item_code for d in po.supplied_items]) supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
self.assertEquals(bom_items, supplied_items) self.assertEquals(bom_items, supplied_items)
def get_default_bom(item_code="_Test FG Item 2"): def get_default_bom(item_code="_Test FG Item 2"):
return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1}) return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1})

View File

@ -347,8 +347,7 @@ class TestSalarySlip(unittest.TestCase):
# create additional salary of 150000 # create additional salary of 150000
frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee)) frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
data["additional-1"] = create_additional_salary(employee, payroll_period, 50000) data["additional-1"] = create_additional_salary(employee, payroll_period, 150000)
data["additional-2"] = create_additional_salary(employee, payroll_period, 100000)
data["deducted_dates"] = create_salary_slips_for_payroll_period(employee, data["deducted_dates"] = create_salary_slips_for_payroll_period(employee,
salary_structure.name, payroll_period) salary_structure.name, payroll_period)

View File

@ -577,8 +577,9 @@ class Item(WebsiteGenerator):
# if barcode is getting updated , the row name has to reset. # if barcode is getting updated , the row name has to reset.
# Delete previous old row doc and re-enter row as if new to reset name in db. # Delete previous old row doc and re-enter row as if new to reset name in db.
item_barcode.set("__islocal", True) item_barcode.set("__islocal", True)
item_barcode_entry_name = item_barcode.name
item_barcode.name = None item_barcode.name = None
frappe.delete_doc("Item Barcode", item_barcode.name) frappe.delete_doc("Item Barcode", item_barcode_entry_name)
def validate_warehouse_for_reorder(self): def validate_warehouse_for_reorder(self):
'''Validate Reorder level table for duplicate and conditional mandatory''' '''Validate Reorder level table for duplicate and conditional mandatory'''

View File

@ -471,7 +471,7 @@ class TestItem(unittest.TestCase):
item_doc = frappe.get_doc('Item', item_code) item_doc = frappe.get_doc('Item', item_code)
new_barcode = item_doc.append('barcodes') new_barcode = item_doc.append('barcodes')
new_barcode.update(barcode_properties_list[0]) new_barcode.update(barcode_properties_list[0])
self.assertRaises(frappe.DuplicateEntryError, item_doc.save) self.assertRaises(frappe.UniqueValidationError, item_doc.save)
# Add invalid barcode - should cause InvalidBarcode # Add invalid barcode - should cause InvalidBarcode
item_doc = frappe.get_doc('Item', item_code) item_doc = frappe.get_doc('Item', item_code)

View File

@ -180,18 +180,15 @@ class TestPurchaseReceipt(unittest.TestCase):
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC") is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC")
#stock raw materials in a warehouse before transfer #stock raw materials in a warehouse before transfer
make_stock_entry(target="_Test Warehouse - _TC",
item_code="_Test Item Home Desktop 100", qty=1, basic_rate=100)
make_stock_entry(target="_Test Warehouse - _TC", make_stock_entry(target="_Test Warehouse - _TC",
item_code = "Test Extra Item 1", qty=1, basic_rate=100) item_code = "Test Extra Item 1", qty=1, basic_rate=100)
make_stock_entry(target="_Test Warehouse - _TC", make_stock_entry(target="_Test Warehouse - _TC",
item_code = "_Test Item", qty=1, basic_rate=100) item_code = "_Test FG Item", qty=1, basic_rate=100)
rm_items = [ rm_items = [
{ {
"item_code": item_code, "item_code": item_code,
"rm_item_code": po.supplied_items[0].rm_item_code, "rm_item_code": po.supplied_items[0].rm_item_code,
"item_name": "_Test Item", "item_name": "_Test FG Item",
"qty": po.supplied_items[0].required_qty, "qty": po.supplied_items[0].required_qty,
"warehouse": "_Test Warehouse - _TC", "warehouse": "_Test Warehouse - _TC",
"stock_uom": "Nos" "stock_uom": "Nos"
@ -203,14 +200,6 @@ class TestPurchaseReceipt(unittest.TestCase):
"qty": po.supplied_items[1].required_qty, "qty": po.supplied_items[1].required_qty,
"warehouse": "_Test Warehouse - _TC", "warehouse": "_Test Warehouse - _TC",
"stock_uom": "Nos" "stock_uom": "Nos"
},
{
"item_code": item_code,
"rm_item_code": po.supplied_items[2].rm_item_code,
"item_name": "_Test Item Home Desktop 100",
"qty": po.supplied_items[2].required_qty,
"warehouse": "_Test Warehouse - _TC",
"stock_uom": "Nos"
} }
] ]
rm_item_string = json.dumps(rm_items) rm_item_string = json.dumps(rm_items)

View File

@ -316,12 +316,12 @@ Authorized Signatory,المخول بالتوقيع,
Auto Material Requests Generated,إنشاء طلب مواد تلقائي, Auto Material Requests Generated,إنشاء طلب مواد تلقائي,
Auto Repeat,تكرار تلقائي, Auto Repeat,تكرار تلقائي,
Auto repeat document updated,تكرار تلقائي للمستندات المحدثة, Auto repeat document updated,تكرار تلقائي للمستندات المحدثة,
Automotive,سيارات, Automotive,سيارات,متحرك بطاقة ذاتية
Available,متاح, Available,متاح,
Available Leaves,المغادارت المتوفرة, Available Leaves,المغادارت والاجازات المتاحة,
Available Qty,الكمية المتاحة, Available Qty,الكمية المتاحة,
Available Selling,المبيعات المتاحة, Available Selling,المبيعات المتاحة,
Available for use date is required,مطلوب متاح لتاريخ الاستخدام, Available for use date is required,مطلوب تاريخ متاح للاستخدام,
Available slots,الفتحات المتاحة, Available slots,الفتحات المتاحة,
Available {0},متاح {0}, Available {0},متاح {0},
Available-for-use Date should be after purchase date,يجب أن يكون التاريخ متاحًا بعد تاريخ الشراء, Available-for-use Date should be after purchase date,يجب أن يكون التاريخ متاحًا بعد تاريخ الشراء,
@ -331,16 +331,16 @@ Avg Daily Outgoing,متوسط الصادرات اليومية,
Avg. Buying Price List Rate,متوسط قائمة أسعار الشراء, Avg. Buying Price List Rate,متوسط قائمة أسعار الشراء,
Avg. Selling Price List Rate,متوسط قائمة أسعار البيع, Avg. Selling Price List Rate,متوسط قائمة أسعار البيع,
Avg. Selling Rate,متوسط معدل البيع, Avg. Selling Rate,متوسط معدل البيع,
BOM,فاتورة المواد, BOM,قائمة مكونات المواد,
BOM Browser,BOM متصفح, BOM Browser,قائمة مكونات المواد متصفح,
BOM No,رقم قائمة المواد, BOM No,رقم قائمة مكونات المواد,
BOM Rate,سعر قائمة المواد, BOM Rate,سعر او معدل قائمة مكونات المواد,
BOM Stock Report,تقرير مخزون فاتورة المواد, BOM Stock Report,تقرير مخزون قائمة مكونات المواد,
BOM and Manufacturing Quantity are required,مطلوب، قائمة مكونات المواد و كمية التصنيع, BOM and Manufacturing Quantity are required,مطلوب، قائمة مكونات المواد و كمية التصنيع,
BOM does not contain any stock item,فاتورة الموارد لا تحتوي على أي صنف مخزون, BOM does not contain any stock item,قائمة مكونات المواد لا تحتوي على أي صنف مخزون,
BOM {0} does not belong to Item {1},قائمة المواد {0} لا تنتمي إلى الصنف {1}, BOM {0} does not belong to Item {1},قائمة مكونات المواد {0} لا تنتمي إلى الصنف {1},
BOM {0} must be active,فاتورة المواد {0} يجب أن تكون نشطة\n<br>\nBOM {0} must be active, BOM {0} must be active,قائمة مكونات المواد {0} يجب أن تكون نشطة\n<br>\nBOM {0} must be active,
BOM {0} must be submitted,فاتورة المواد {0} يجب أن تكون مسجلة\n<br>\nBOM {0} must be submitted, BOM {0} must be submitted,قائمة مكونات المواد {0} يجب أن تكون مسجلة\n<br>\nBOM {0} must be submitted,
Balance,الموازنة, Balance,الموازنة,
Balance (Dr - Cr),الرصيد (مدين - دائن), Balance (Dr - Cr),الرصيد (مدين - دائن),
Balance ({0}),الرصيد ({0}), Balance ({0}),الرصيد ({0}),
@ -389,23 +389,23 @@ Bill Date,تاريخ الفاتورة,
Bill No,رقم الفاتورة, Bill No,رقم الفاتورة,
Bill of Materials,فاتورة المواد, Bill of Materials,فاتورة المواد,
Bill of Materials (BOM),قوائم المواد, Bill of Materials (BOM),قوائم المواد,
Billable Hours,ساعات للفوترة, Billable Hours,ساعات قابلة للفوترة,
Billed,توصف, Billed,تمت الفوترة,
Billed Amount,القيمة المقدم فاتورة بها, Billed Amount,القيمة المقدم فاتورة بها,
Billing,الفواتير, Billing,الفواتير,
Billing Address,عنوان تقديم الفواتير, Billing Address,العنوان الذي ترسل به الفواتير,
Billing Address is same as Shipping Address,عنوان الفواتير هو نفس عنوان الشحن, Billing Address is same as Shipping Address,عنوان الفواتير هو نفس عنوان الشحن,
Billing Amount,قيمة الفواتير, Billing Amount,قيمة الفواتير,
Billing Status,الحالة الفواتير, Billing Status,حالة الفواتير,
Billing currency must be equal to either default company's currency or party account currency,يجب أن تكون عملة الفوترة مساوية لعملة الشركة الافتراضية أو عملة حساب الطرف, Billing currency must be equal to either default company's currency or party account currency,يجب أن تكون عملة الفوترة مساوية لعملة الشركة الافتراضية أو عملة حساب الطرف,
Bills raised by Suppliers.,فواتير حولت من قبل الموردين., Bills raised by Suppliers.,فواتير حولت من قبل الموردين.,
Bills raised to Customers.,فواتير حولت للزبائن., Bills raised to Customers.,فواتير حولت للزبائن.,
Biotechnology,التكنولوجيا الحيوية, Biotechnology,التكنولوجيا الحيوية,
Birthday Reminder,تذكير عيد ميلاد, Birthday Reminder,تذكير عيد ميلاد,
Black,أسود, Black,أسود,
Blanket Orders from Costumers.,أوامر بطانية من العملاء., Blanket Orders from Costumers.,أوامر شراء شاملة من العملاء.,
Block Invoice,حظر الفاتورة, Block Invoice,حظر الفاتورة,
Boms,قوائم المواد, Boms,قوائم مكونات المواد,
Bonus Payment Date cannot be a past date,لا يمكن أن يكون تاريخ الدفع المكافأ تاريخًا سابقًا, Bonus Payment Date cannot be a past date,لا يمكن أن يكون تاريخ الدفع المكافأ تاريخًا سابقًا,
Both Trial Period Start Date and Trial Period End Date must be set,يجب تعيين كل من تاريخ بدء الفترة التجريبية وتاريخ انتهاء الفترة التجريبية, Both Trial Period Start Date and Trial Period End Date must be set,يجب تعيين كل من تاريخ بدء الفترة التجريبية وتاريخ انتهاء الفترة التجريبية,
Both Warehouse must belong to same Company,يجب أن ينتمي المستودع إلى نفس الشركة\n<br>\nBoth Warehouse must belong to same Company, Both Warehouse must belong to same Company,يجب أن ينتمي المستودع إلى نفس الشركة\n<br>\nBoth Warehouse must belong to same Company,
@ -504,9 +504,9 @@ Cash In Hand,النقدية الحاضرة,
Cash or Bank Account is mandatory for making payment entry,الحساب النقدي أو البنكي مطلوب لعمل مدخل بيع <br>Cash or Bank Account is mandatory for making payment entry, Cash or Bank Account is mandatory for making payment entry,الحساب النقدي أو البنكي مطلوب لعمل مدخل بيع <br>Cash or Bank Account is mandatory for making payment entry,
Cashier Closing,إغلاق أمين الصندوق, Cashier Closing,إغلاق أمين الصندوق,
Casual Leave,أجازة عادية, Casual Leave,أجازة عادية,
Category,فئة, Category,فئة,صنف
Category Name,اسم التصنيف, Category Name,اسم التصنيف,
Caution,الحذر, Caution,الحذر,تحذير
Central Tax,الضريبة المركزية, Central Tax,الضريبة المركزية,
Certification,شهادة, Certification,شهادة,
Cess,سيس, Cess,سيس,
@ -627,7 +627,7 @@ Cost Center with existing transactions can not be converted to ledger,مركز
Cost Centers,مراكز التكلفة, Cost Centers,مراكز التكلفة,
Cost Updated,تم تحديث التكلفة\n<br>\nCost Updated, Cost Updated,تم تحديث التكلفة\n<br>\nCost Updated,
Cost as on,التكلفة كما في, Cost as on,التكلفة كما في,
Cost of Delivered Items,تكلفة البنود المسلمة, Cost of Delivered Items,تكلفة السلع والمواد المسلمة,
Cost of Goods Sold,تكلفة البضاعة المباعة, Cost of Goods Sold,تكلفة البضاعة المباعة,
Cost of Issued Items,تكلفة المواد المصروفة, Cost of Issued Items,تكلفة المواد المصروفة,
Cost of New Purchase,تكلفة الشراء الجديد, Cost of New Purchase,تكلفة الشراء الجديد,
@ -1300,7 +1300,7 @@ Insurance Start date should be less than Insurance End date,يجب أن يكون
Integrated Tax,ضريبة متكاملة, Integrated Tax,ضريبة متكاملة,
Inter-State Supplies,اللوازم بين الدول, Inter-State Supplies,اللوازم بين الدول,
Interest Amount,مبلغ الفائدة, Interest Amount,مبلغ الفائدة,
Interests,الإهتمامات, Interests,الإهتمامات او الفوائد,
Intern,المتدرب, Intern,المتدرب,
Internet Publishing,نشر على شبكة الإنترنت, Internet Publishing,نشر على شبكة الإنترنت,
Intra-State Supplies,اللوازم داخل الدولة, Intra-State Supplies,اللوازم داخل الدولة,
@ -1421,13 +1421,13 @@ Lab Test UOM,اختبار مختبر أوم,
Lab Tests and Vital Signs,اختبارات المختبر وعلامات حيوية, Lab Tests and Vital Signs,اختبارات المختبر وعلامات حيوية,
Lab result datetime cannot be before testing datetime,لا يمكن أن يكون تاريخ نتيجة المختبر سابقا لتاريخ الفحص, Lab result datetime cannot be before testing datetime,لا يمكن أن يكون تاريخ نتيجة المختبر سابقا لتاريخ الفحص,
Lab testing datetime cannot be before collection datetime,لا يمكن أن يكون وقت اختبار المختبر قبل تاريخ جمع البيانات, Lab testing datetime cannot be before collection datetime,لا يمكن أن يكون وقت اختبار المختبر قبل تاريخ جمع البيانات,
Label,ملصق, Label,ملصق,'طابع
Laboratory,مختبر, Laboratory,مختبر,
Language Name,اسم اللغة, Language Name,اسم اللغة,
Large,كبير, Large,كبير,
Last Communication,آخر الاتصالات, Last Communication,آخر الاتصالات,
Last Communication Date,تاريخ الاتصال الأخير, Last Communication Date,تاريخ الاتصال الأخير,
Last Name,اسم العائلة, Last Name,اسم العائلة او اللقب,
Last Order Amount,قيمة آخر طلب, Last Order Amount,قيمة آخر طلب,
Last Order Date,تاريخ أخر أمر بيع, Last Order Date,تاريخ أخر أمر بيع,
Last Purchase Price,سعر الشراء الأخير, Last Purchase Price,سعر الشراء الأخير,

Can't render this file because it is too large.