Merge branch 'develop' into refactor-addiional-salary
This commit is contained in:
commit
312341555f
@ -2,9 +2,10 @@ from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.utils import date_diff, add_months, today, getdate, add_days, flt, get_last_day
|
||||
from frappe.utils import date_diff, add_months, today, getdate, add_days, flt, get_last_day, cint, get_link_to_form
|
||||
from erpnext.accounts.utils import get_account_currency
|
||||
from frappe.email import sendmail_to_system_managers
|
||||
from frappe.utils.background_jobs import enqueue
|
||||
|
||||
def validate_service_stop_date(doc):
|
||||
''' Validates service_stop_date for Purchase Invoice and Sales Invoice '''
|
||||
@ -32,8 +33,20 @@ def validate_service_stop_date(doc):
|
||||
if old_stop_dates and old_stop_dates.get(item.name) and item.service_stop_date!=old_stop_dates.get(item.name):
|
||||
frappe.throw(_("Cannot change Service Stop Date for item in row {0}").format(item.idx))
|
||||
|
||||
def convert_deferred_expense_to_expense(start_date=None, end_date=None):
|
||||
def build_conditions(process_type, account, company):
|
||||
conditions=''
|
||||
deferred_account = "item.deferred_revenue_account" if process_type=="Income" else "item.deferred_expense_account"
|
||||
|
||||
if account:
|
||||
conditions += "AND %s='%s'"%(deferred_account, account)
|
||||
elif company:
|
||||
conditions += "AND p.company='%s'"%(company)
|
||||
|
||||
return conditions
|
||||
|
||||
def convert_deferred_expense_to_expense(deferred_process, start_date=None, end_date=None, conditions=''):
|
||||
# book the expense/income on the last day, but it will be trigger on the 1st of month at 12:00 AM
|
||||
|
||||
if not start_date:
|
||||
start_date = add_months(today(), -1)
|
||||
if not end_date:
|
||||
@ -41,18 +54,25 @@ def convert_deferred_expense_to_expense(start_date=None, end_date=None):
|
||||
|
||||
# check for the purchase invoice for which GL entries has to be done
|
||||
invoices = frappe.db.sql_list('''
|
||||
select distinct parent from `tabPurchase Invoice Item`
|
||||
where service_start_date<=%s and service_end_date>=%s
|
||||
and enable_deferred_expense = 1 and docstatus = 1 and ifnull(amount, 0) > 0
|
||||
''', (end_date, start_date))
|
||||
select distinct item.parent
|
||||
from `tabPurchase Invoice Item` item, `tabPurchase Invoice` p
|
||||
where item.service_start_date<=%s and item.service_end_date>=%s
|
||||
and item.enable_deferred_expense = 1 and item.parent=p.name
|
||||
and item.docstatus = 1 and ifnull(item.amount, 0) > 0
|
||||
{0}
|
||||
'''.format(conditions), (end_date, start_date)) #nosec
|
||||
|
||||
# For each invoice, book deferred expense
|
||||
for invoice in invoices:
|
||||
doc = frappe.get_doc("Purchase Invoice", invoice)
|
||||
book_deferred_income_or_expense(doc, end_date)
|
||||
book_deferred_income_or_expense(doc, deferred_process, end_date)
|
||||
|
||||
def convert_deferred_revenue_to_income(start_date=None, end_date=None):
|
||||
if frappe.flags.deferred_accounting_error:
|
||||
send_mail(deferred_process)
|
||||
|
||||
def convert_deferred_revenue_to_income(deferred_process, start_date=None, end_date=None, conditions=''):
|
||||
# book the expense/income on the last day, but it will be trigger on the 1st of month at 12:00 AM
|
||||
|
||||
if not start_date:
|
||||
start_date = add_months(today(), -1)
|
||||
if not end_date:
|
||||
@ -60,14 +80,20 @@ def convert_deferred_revenue_to_income(start_date=None, end_date=None):
|
||||
|
||||
# check for the sales invoice for which GL entries has to be done
|
||||
invoices = frappe.db.sql_list('''
|
||||
select distinct parent from `tabSales Invoice Item`
|
||||
where service_start_date<=%s and service_end_date>=%s
|
||||
and enable_deferred_revenue = 1 and docstatus = 1 and ifnull(amount, 0) > 0
|
||||
''', (end_date, start_date))
|
||||
select distinct item.parent
|
||||
from `tabSales Invoice Item` item, `tabSales Invoice` p
|
||||
where item.service_start_date<=%s and item.service_end_date>=%s
|
||||
and item.enable_deferred_revenue = 1 and item.parent=p.name
|
||||
and item.docstatus = 1 and ifnull(item.amount, 0) > 0
|
||||
{0}
|
||||
'''.format(conditions), (end_date, start_date)) #nosec
|
||||
|
||||
for invoice in invoices:
|
||||
doc = frappe.get_doc("Sales Invoice", invoice)
|
||||
book_deferred_income_or_expense(doc, end_date)
|
||||
book_deferred_income_or_expense(doc, deferred_process, end_date)
|
||||
|
||||
if frappe.flags.deferred_accounting_error:
|
||||
send_mail(deferred_process)
|
||||
|
||||
def get_booking_dates(doc, item, posting_date=None):
|
||||
if not posting_date:
|
||||
@ -136,7 +162,7 @@ def calculate_amount(doc, item, last_gl_entry, total_days, total_booking_days, a
|
||||
|
||||
return amount, base_amount
|
||||
|
||||
def book_deferred_income_or_expense(doc, posting_date=None):
|
||||
def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
|
||||
enable_check = "enable_deferred_revenue" \
|
||||
if doc.doctype=="Sales Invoice" else "enable_deferred_expense"
|
||||
|
||||
@ -159,7 +185,11 @@ def book_deferred_income_or_expense(doc, posting_date=None):
|
||||
total_days, total_booking_days, account_currency)
|
||||
|
||||
make_gl_entries(doc, credit_account, debit_account, against,
|
||||
amount, base_amount, end_date, project, account_currency, item.cost_center, item.name)
|
||||
amount, base_amount, end_date, project, account_currency, item.cost_center, item.name, deferred_process)
|
||||
|
||||
# Returned in case of any errors because it tries to submit the same record again and again in case of errors
|
||||
if frappe.flags.deferred_accounting_error:
|
||||
return
|
||||
|
||||
if getdate(end_date) < getdate(posting_date) and not last_gl_entry:
|
||||
_book_deferred_revenue_or_expense(item)
|
||||
@ -169,8 +199,30 @@ def book_deferred_income_or_expense(doc, posting_date=None):
|
||||
if item.get(enable_check):
|
||||
_book_deferred_revenue_or_expense(item)
|
||||
|
||||
def process_deferred_accounting(posting_date=today()):
|
||||
''' Converts deferred income/expense into income/expense
|
||||
Executed via background jobs on every month end '''
|
||||
|
||||
if not cint(frappe.db.get_singles_value('Accounts Settings', 'automatically_process_deferred_accounting_entry')):
|
||||
return
|
||||
|
||||
start_date = add_months(today(), -1)
|
||||
end_date = add_days(today(), -1)
|
||||
|
||||
for record_type in ('Income', 'Expense'):
|
||||
doc = frappe.get_doc(dict(
|
||||
doctype='Process Deferred Accounting',
|
||||
posting_date=posting_date,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
type=record_type
|
||||
))
|
||||
|
||||
doc.insert()
|
||||
doc.submit()
|
||||
|
||||
def make_gl_entries(doc, credit_account, debit_account, against,
|
||||
amount, base_amount, posting_date, project, account_currency, cost_center, voucher_detail_no):
|
||||
amount, base_amount, posting_date, project, account_currency, cost_center, voucher_detail_no, deferred_process=None):
|
||||
# GL Entry for crediting the amount in the deferred expense
|
||||
from erpnext.accounts.general_ledger import make_gl_entries
|
||||
|
||||
@ -186,7 +238,9 @@ def make_gl_entries(doc, credit_account, debit_account, against,
|
||||
"cost_center": cost_center,
|
||||
"voucher_detail_no": voucher_detail_no,
|
||||
'posting_date': posting_date,
|
||||
'project': project
|
||||
'project': project,
|
||||
'against_voucher_type': 'Process Deferred Accounting',
|
||||
'against_voucher': deferred_process
|
||||
}, account_currency)
|
||||
)
|
||||
# GL Entry to debit the amount from the expense
|
||||
@ -199,7 +253,9 @@ def make_gl_entries(doc, credit_account, debit_account, against,
|
||||
"cost_center": cost_center,
|
||||
"voucher_detail_no": voucher_detail_no,
|
||||
'posting_date': posting_date,
|
||||
'project': project
|
||||
'project': project,
|
||||
'against_voucher_type': 'Process Deferred Accounting',
|
||||
'against_voucher': deferred_process
|
||||
}, account_currency)
|
||||
)
|
||||
|
||||
@ -209,7 +265,16 @@ def make_gl_entries(doc, credit_account, debit_account, against,
|
||||
frappe.db.commit()
|
||||
except:
|
||||
frappe.db.rollback()
|
||||
title = _("Error while processing deferred accounting for {0}").format(doc.name)
|
||||
traceback = frappe.get_traceback()
|
||||
frappe.log_error(message=traceback , title=title)
|
||||
sendmail_to_system_managers(title, traceback)
|
||||
frappe.log_error(message=traceback)
|
||||
|
||||
frappe.flags.deferred_accounting_error = True
|
||||
|
||||
def send_mail(deferred_process):
|
||||
title = _("Error while processing deferred accounting for {0}".format(deferred_process))
|
||||
content = _("""
|
||||
Deferred accounting failed for some invoices:
|
||||
Please check Process Deferred Accounting {0}
|
||||
and submit manually after resolving errors
|
||||
""").format(get_link_to_form('Process Deferred Accounting', deferred_process))
|
||||
sendmail_to_system_managers(title, content)
|
||||
|
@ -206,12 +206,13 @@ def get_dimension_filters():
|
||||
WHERE disabled = 0
|
||||
""", as_dict=1)
|
||||
|
||||
default_dimensions = frappe.db.sql("""SELECT parent, company, default_dimension
|
||||
FROM `tabAccounting Dimension Detail`""", as_dict=1)
|
||||
default_dimensions = frappe.db.sql("""SELECT p.fieldname, c.company, c.default_dimension
|
||||
FROM `tabAccounting Dimension Detail` c, `tabAccounting Dimension` p
|
||||
WHERE c.parent = p.name""", as_dict=1)
|
||||
|
||||
default_dimensions_map = {}
|
||||
for dimension in default_dimensions:
|
||||
default_dimensions_map.setdefault(dimension['company'], {})
|
||||
default_dimensions_map[dimension['company']][dimension['parent']] = dimension['default_dimension']
|
||||
default_dimensions_map.setdefault(dimension.company, {})
|
||||
default_dimensions_map[dimension.company][dimension.fieldname] = dimension.default_dimension
|
||||
|
||||
return dimension_filters, default_dimensions_map
|
||||
|
@ -1,210 +1,226 @@
|
||||
{
|
||||
"creation": "2013-06-24 15:49:57",
|
||||
"description": "Settings for Accounts",
|
||||
"doctype": "DocType",
|
||||
"document_type": "Other",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"auto_accounting_for_stock",
|
||||
"acc_frozen_upto",
|
||||
"frozen_accounts_modifier",
|
||||
"determine_address_tax_category_from",
|
||||
"over_billing_allowance",
|
||||
"column_break_4",
|
||||
"credit_controller",
|
||||
"check_supplier_invoice_uniqueness",
|
||||
"make_payment_via_journal_entry",
|
||||
"unlink_payment_on_cancellation_of_invoice",
|
||||
"unlink_advance_payment_on_cancelation_of_order",
|
||||
"book_asset_depreciation_entry_automatically",
|
||||
"allow_cost_center_in_entry_of_bs_account",
|
||||
"add_taxes_from_item_tax_template",
|
||||
"automatically_fetch_payment_terms",
|
||||
"print_settings",
|
||||
"show_inclusive_tax_in_print",
|
||||
"column_break_12",
|
||||
"show_payment_schedule_in_print",
|
||||
"currency_exchange_section",
|
||||
"allow_stale",
|
||||
"stale_days",
|
||||
"report_settings_sb",
|
||||
"use_custom_cash_flow"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"default": "1",
|
||||
"description": "If enabled, the system will post accounting entries for inventory automatically.",
|
||||
"fieldname": "auto_accounting_for_stock",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Make Accounting Entry For Every Stock Movement"
|
||||
},
|
||||
{
|
||||
"description": "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.",
|
||||
"fieldname": "acc_frozen_upto",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Accounts Frozen Upto"
|
||||
},
|
||||
{
|
||||
"description": "Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts",
|
||||
"fieldname": "frozen_accounts_modifier",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Role Allowed to Set Frozen Accounts & Edit Frozen Entries",
|
||||
"options": "Role"
|
||||
},
|
||||
{
|
||||
"default": "Billing Address",
|
||||
"description": "Address used to determine Tax Category in transactions.",
|
||||
"fieldname": "determine_address_tax_category_from",
|
||||
"fieldtype": "Select",
|
||||
"label": "Determine Address Tax Category From",
|
||||
"options": "Billing Address\nShipping Address"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_4",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"description": "Role that is allowed to submit transactions that exceed credit limits set.",
|
||||
"fieldname": "credit_controller",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Credit Controller",
|
||||
"options": "Role"
|
||||
},
|
||||
{
|
||||
"fieldname": "check_supplier_invoice_uniqueness",
|
||||
"fieldtype": "Check",
|
||||
"label": "Check Supplier Invoice Number Uniqueness"
|
||||
},
|
||||
{
|
||||
"fieldname": "make_payment_via_journal_entry",
|
||||
"fieldtype": "Check",
|
||||
"label": "Make Payment via Journal Entry"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "unlink_payment_on_cancellation_of_invoice",
|
||||
"fieldtype": "Check",
|
||||
"label": "Unlink Payment on Cancellation of Invoice"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "unlink_advance_payment_on_cancelation_of_order",
|
||||
"fieldtype": "Check",
|
||||
"label": "Unlink Advance Payment on Cancelation of Order"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "book_asset_depreciation_entry_automatically",
|
||||
"fieldtype": "Check",
|
||||
"label": "Book Asset Depreciation Entry Automatically"
|
||||
},
|
||||
{
|
||||
"fieldname": "allow_cost_center_in_entry_of_bs_account",
|
||||
"fieldtype": "Check",
|
||||
"label": "Allow Cost Center In Entry of Balance Sheet Account"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "add_taxes_from_item_tax_template",
|
||||
"fieldtype": "Check",
|
||||
"label": "Automatically Add Taxes and Charges from Item Tax Template"
|
||||
},
|
||||
{
|
||||
"fieldname": "print_settings",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Print Settings"
|
||||
},
|
||||
{
|
||||
"fieldname": "show_inclusive_tax_in_print",
|
||||
"fieldtype": "Check",
|
||||
"label": "Show Inclusive Tax In Print"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_12",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "show_payment_schedule_in_print",
|
||||
"fieldtype": "Check",
|
||||
"label": "Show Payment Schedule in Print"
|
||||
},
|
||||
{
|
||||
"fieldname": "currency_exchange_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Currency Exchange Settings"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "allow_stale",
|
||||
"fieldtype": "Check",
|
||||
"in_list_view": 1,
|
||||
"label": "Allow Stale Exchange Rates"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"depends_on": "eval:doc.allow_stale==0",
|
||||
"fieldname": "stale_days",
|
||||
"fieldtype": "Int",
|
||||
"label": "Stale Days"
|
||||
},
|
||||
{
|
||||
"fieldname": "report_settings_sb",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Report Settings"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "Only select if you have setup Cash Flow Mapper documents",
|
||||
"fieldname": "use_custom_cash_flow",
|
||||
"fieldtype": "Check",
|
||||
"label": "Use Custom Cash Flow Format"
|
||||
},
|
||||
{
|
||||
"fieldname": "automatically_fetch_payment_terms",
|
||||
"fieldtype": "Check",
|
||||
"label": "Automatically Fetch Payment Terms"
|
||||
},
|
||||
{
|
||||
"description": "Percentage you are allowed to bill more against the amount ordered. For example: If the order value is $100 for an item and tolerance is set as 10% then you are allowed to bill for $110.",
|
||||
"fieldname": "over_billing_allowance",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Over Billing Allowance (%)"
|
||||
}
|
||||
],
|
||||
"icon": "icon-cog",
|
||||
"idx": 1,
|
||||
"issingle": 1,
|
||||
"modified": "2019-07-04 18:20:55.789946",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Accounts Settings",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"email": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"role": "Accounts Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"read": 1,
|
||||
"role": "Sales User"
|
||||
},
|
||||
{
|
||||
"read": 1,
|
||||
"role": "Purchase User"
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 1
|
||||
"actions": [],
|
||||
"creation": "2013-06-24 15:49:57",
|
||||
"description": "Settings for Accounts",
|
||||
"doctype": "DocType",
|
||||
"document_type": "Other",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"auto_accounting_for_stock",
|
||||
"acc_frozen_upto",
|
||||
"frozen_accounts_modifier",
|
||||
"determine_address_tax_category_from",
|
||||
"over_billing_allowance",
|
||||
"column_break_4",
|
||||
"credit_controller",
|
||||
"check_supplier_invoice_uniqueness",
|
||||
"make_payment_via_journal_entry",
|
||||
"unlink_payment_on_cancellation_of_invoice",
|
||||
"unlink_advance_payment_on_cancelation_of_order",
|
||||
"book_asset_depreciation_entry_automatically",
|
||||
"allow_cost_center_in_entry_of_bs_account",
|
||||
"add_taxes_from_item_tax_template",
|
||||
"automatically_fetch_payment_terms",
|
||||
"automatically_process_deferred_accounting_entry",
|
||||
"print_settings",
|
||||
"show_inclusive_tax_in_print",
|
||||
"column_break_12",
|
||||
"show_payment_schedule_in_print",
|
||||
"currency_exchange_section",
|
||||
"allow_stale",
|
||||
"stale_days",
|
||||
"report_settings_sb",
|
||||
"use_custom_cash_flow"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"default": "1",
|
||||
"description": "If enabled, the system will post accounting entries for inventory automatically.",
|
||||
"fieldname": "auto_accounting_for_stock",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 1,
|
||||
"in_list_view": 1,
|
||||
"label": "Make Accounting Entry For Every Stock Movement"
|
||||
},
|
||||
{
|
||||
"description": "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.",
|
||||
"fieldname": "acc_frozen_upto",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Accounts Frozen Upto"
|
||||
},
|
||||
{
|
||||
"description": "Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts",
|
||||
"fieldname": "frozen_accounts_modifier",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Role Allowed to Set Frozen Accounts & Edit Frozen Entries",
|
||||
"options": "Role"
|
||||
},
|
||||
{
|
||||
"default": "Billing Address",
|
||||
"description": "Address used to determine Tax Category in transactions.",
|
||||
"fieldname": "determine_address_tax_category_from",
|
||||
"fieldtype": "Select",
|
||||
"label": "Determine Address Tax Category From",
|
||||
"options": "Billing Address\nShipping Address"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_4",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"description": "Role that is allowed to submit transactions that exceed credit limits set.",
|
||||
"fieldname": "credit_controller",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Credit Controller",
|
||||
"options": "Role"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "check_supplier_invoice_uniqueness",
|
||||
"fieldtype": "Check",
|
||||
"label": "Check Supplier Invoice Number Uniqueness"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "make_payment_via_journal_entry",
|
||||
"fieldtype": "Check",
|
||||
"label": "Make Payment via Journal Entry"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "unlink_payment_on_cancellation_of_invoice",
|
||||
"fieldtype": "Check",
|
||||
"label": "Unlink Payment on Cancellation of Invoice"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "unlink_advance_payment_on_cancelation_of_order",
|
||||
"fieldtype": "Check",
|
||||
"label": "Unlink Advance Payment on Cancelation of Order"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "book_asset_depreciation_entry_automatically",
|
||||
"fieldtype": "Check",
|
||||
"label": "Book Asset Depreciation Entry Automatically"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "allow_cost_center_in_entry_of_bs_account",
|
||||
"fieldtype": "Check",
|
||||
"label": "Allow Cost Center In Entry of Balance Sheet Account"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "add_taxes_from_item_tax_template",
|
||||
"fieldtype": "Check",
|
||||
"label": "Automatically Add Taxes and Charges from Item Tax Template"
|
||||
},
|
||||
{
|
||||
"fieldname": "print_settings",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Print Settings"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "show_inclusive_tax_in_print",
|
||||
"fieldtype": "Check",
|
||||
"label": "Show Inclusive Tax In Print"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_12",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "show_payment_schedule_in_print",
|
||||
"fieldtype": "Check",
|
||||
"label": "Show Payment Schedule in Print"
|
||||
},
|
||||
{
|
||||
"fieldname": "currency_exchange_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Currency Exchange Settings"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "allow_stale",
|
||||
"fieldtype": "Check",
|
||||
"in_list_view": 1,
|
||||
"label": "Allow Stale Exchange Rates"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"depends_on": "eval:doc.allow_stale==0",
|
||||
"fieldname": "stale_days",
|
||||
"fieldtype": "Int",
|
||||
"label": "Stale Days"
|
||||
},
|
||||
{
|
||||
"fieldname": "report_settings_sb",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Report Settings"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "Only select if you have setup Cash Flow Mapper documents",
|
||||
"fieldname": "use_custom_cash_flow",
|
||||
"fieldtype": "Check",
|
||||
"label": "Use Custom Cash Flow Format"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "automatically_fetch_payment_terms",
|
||||
"fieldtype": "Check",
|
||||
"label": "Automatically Fetch Payment Terms"
|
||||
},
|
||||
{
|
||||
"description": "Percentage you are allowed to bill more against the amount ordered. For example: If the order value is $100 for an item and tolerance is set as 10% then you are allowed to bill for $110.",
|
||||
"fieldname": "over_billing_allowance",
|
||||
"fieldtype": "Currency",
|
||||
"label": "Over Billing Allowance (%)"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "automatically_process_deferred_accounting_entry",
|
||||
"fieldtype": "Check",
|
||||
"label": "Automatically Process Deferred Accounting Entry"
|
||||
}
|
||||
],
|
||||
"icon": "icon-cog",
|
||||
"idx": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2019-12-19 16:58:17.395595",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Accounts Settings",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"email": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"role": "Accounts Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"read": 1,
|
||||
"role": "Sales User"
|
||||
},
|
||||
{
|
||||
"read": 1,
|
||||
"role": "Purchase User"
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 1
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"actions": [],
|
||||
"autoname": "ACC-GLE-.YYYY.-.#####",
|
||||
"creation": "2013-01-10 16:34:06",
|
||||
"doctype": "DocType",
|
||||
|
@ -560,20 +560,20 @@ class JournalEntry(AccountsController):
|
||||
|
||||
if self.write_off_based_on == 'Accounts Receivable':
|
||||
jd1.party_type = "Customer"
|
||||
jd1.credit = flt(d.outstanding_amount, self.precision("credit", "accounts"))
|
||||
jd1.credit_in_account_currency = flt(d.outstanding_amount, self.precision("credit", "accounts"))
|
||||
jd1.reference_type = "Sales Invoice"
|
||||
jd1.reference_name = cstr(d.name)
|
||||
elif self.write_off_based_on == 'Accounts Payable':
|
||||
jd1.party_type = "Supplier"
|
||||
jd1.debit = flt(d.outstanding_amount, self.precision("debit", "accounts"))
|
||||
jd1.debit_in_account_currency = flt(d.outstanding_amount, self.precision("debit", "accounts"))
|
||||
jd1.reference_type = "Purchase Invoice"
|
||||
jd1.reference_name = cstr(d.name)
|
||||
|
||||
jd2 = self.append('accounts', {})
|
||||
if self.write_off_based_on == 'Accounts Receivable':
|
||||
jd2.debit = total
|
||||
jd2.debit_in_account_currency = total
|
||||
elif self.write_off_based_on == 'Accounts Payable':
|
||||
jd2.credit = total
|
||||
jd2.credit_in_account_currency = total
|
||||
|
||||
self.validate_total_debit_and_credit()
|
||||
|
||||
|
@ -7,6 +7,8 @@ from frappe.utils import flt
|
||||
from frappe import _
|
||||
from erpnext.accounts.utils import get_account_currency
|
||||
from erpnext.controllers.accounts_controller import AccountsController
|
||||
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (get_accounting_dimensions,
|
||||
get_dimension_filters)
|
||||
|
||||
class PeriodClosingVoucher(AccountsController):
|
||||
def validate(self):
|
||||
@ -19,7 +21,7 @@ class PeriodClosingVoucher(AccountsController):
|
||||
def on_cancel(self):
|
||||
self.ignore_linked_doctypes = ('GL Entry', 'Stock Ledger Entry')
|
||||
from erpnext.accounts.general_ledger import make_reverse_gl_entries
|
||||
make_reverse_gl_entries(voucher_type="Period Closing Voucher", voucher_no=self.name, cancel=True)
|
||||
make_reverse_gl_entries(voucher_type="Period Closing Voucher", voucher_no=self.name)
|
||||
|
||||
def validate_account_head(self):
|
||||
closing_account_type = frappe.db.get_value("Account", self.closing_account_head, "root_type")
|
||||
@ -50,7 +52,15 @@ class PeriodClosingVoucher(AccountsController):
|
||||
def make_gl_entries(self):
|
||||
gl_entries = []
|
||||
net_pl_balance = 0
|
||||
pl_accounts = self.get_pl_balances()
|
||||
dimension_fields = ['t1.cost_center']
|
||||
|
||||
accounting_dimensions = get_accounting_dimensions()
|
||||
for dimension in accounting_dimensions:
|
||||
dimension_fields.append('t1.{0}'.format(dimension))
|
||||
|
||||
dimension_filters, default_dimensions = get_dimension_filters()
|
||||
|
||||
pl_accounts = self.get_pl_balances(dimension_fields)
|
||||
|
||||
for acc in pl_accounts:
|
||||
if flt(acc.balance_in_company_currency):
|
||||
@ -66,34 +76,41 @@ class PeriodClosingVoucher(AccountsController):
|
||||
if flt(acc.balance_in_account_currency) > 0 else 0,
|
||||
"credit": abs(flt(acc.balance_in_company_currency)) \
|
||||
if flt(acc.balance_in_company_currency) > 0 else 0
|
||||
}))
|
||||
}, item=acc))
|
||||
|
||||
net_pl_balance += flt(acc.balance_in_company_currency)
|
||||
|
||||
if net_pl_balance:
|
||||
cost_center = frappe.db.get_value("Company", self.company, "cost_center")
|
||||
gl_entries.append(self.get_gl_dict({
|
||||
gl_entry = self.get_gl_dict({
|
||||
"account": self.closing_account_head,
|
||||
"debit_in_account_currency": abs(net_pl_balance) if net_pl_balance > 0 else 0,
|
||||
"debit": abs(net_pl_balance) if net_pl_balance > 0 else 0,
|
||||
"credit_in_account_currency": abs(net_pl_balance) if net_pl_balance < 0 else 0,
|
||||
"credit": abs(net_pl_balance) if net_pl_balance < 0 else 0,
|
||||
"cost_center": cost_center
|
||||
}))
|
||||
})
|
||||
|
||||
for dimension in accounting_dimensions:
|
||||
gl_entry.update({
|
||||
dimension: default_dimensions.get(self.company, {}).get(dimension)
|
||||
})
|
||||
|
||||
gl_entries.append(gl_entry)
|
||||
|
||||
from erpnext.accounts.general_ledger import make_gl_entries
|
||||
make_gl_entries(gl_entries)
|
||||
|
||||
def get_pl_balances(self):
|
||||
def get_pl_balances(self, dimension_fields):
|
||||
"""Get balance for pl accounts"""
|
||||
return frappe.db.sql("""
|
||||
select
|
||||
t1.account, t1.cost_center, t2.account_currency,
|
||||
t1.account, t2.account_currency, {dimension_fields},
|
||||
sum(t1.debit_in_account_currency) - sum(t1.credit_in_account_currency) as balance_in_account_currency,
|
||||
sum(t1.debit) - sum(t1.credit) as balance_in_company_currency
|
||||
from `tabGL Entry` t1, `tabAccount` t2
|
||||
where t1.account = t2.name and t2.report_type = 'Profit and Loss'
|
||||
and t2.docstatus < 2 and t2.company = %s
|
||||
and t1.posting_date between %s and %s
|
||||
group by t1.account, t1.cost_center
|
||||
""", (self.company, self.get("year_start_date"), self.posting_date), as_dict=1)
|
||||
group by t1.account, {dimension_fields}
|
||||
""".format(dimension_fields = ', '.join(dimension_fields)), (self.company, self.get("year_start_date"), self.posting_date), as_dict=1)
|
||||
|
@ -0,0 +1,39 @@
|
||||
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Process Deferred Accounting', {
|
||||
setup: function(frm) {
|
||||
frm.set_query("document_type", function() {
|
||||
return {
|
||||
filters: {
|
||||
'name': ['in', ['Sales Invoice', 'Purchase Invoice']]
|
||||
}
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
validate: function() {
|
||||
return new Promise((resolve) => {
|
||||
return frappe.db.get_single_value('Accounts Settings', 'automatically_process_deferred_accounting_entry')
|
||||
.then(value => {
|
||||
if(value) {
|
||||
frappe.throw(__('Manual entry cannot be created! Disable automatic entry for deferred accounting in accounts settings and try again'));
|
||||
}
|
||||
resolve(value);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
end_date: function(frm) {
|
||||
if (frm.doc.end_date && frm.doc.end_date < frm.doc.start_date) {
|
||||
frappe.throw(__("End date cannot be before start date"));
|
||||
}
|
||||
},
|
||||
|
||||
onload: function(frm) {
|
||||
if (frm.doc.posting_date && frm.doc.docstatus === 0) {
|
||||
frm.set_value('start_date', frappe.datetime.add_months(frm.doc.posting_date, -1));
|
||||
frm.set_value('end_date', frm.doc.posting_date);
|
||||
}
|
||||
}
|
||||
});
|
@ -0,0 +1,128 @@
|
||||
{
|
||||
"actions": [],
|
||||
"autoname": "ACC-PDA-.#####",
|
||||
"creation": "2019-11-04 18:01:23.454775",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"company",
|
||||
"type",
|
||||
"account",
|
||||
"column_break_3",
|
||||
"posting_date",
|
||||
"start_date",
|
||||
"end_date",
|
||||
"amended_from"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "type",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Type",
|
||||
"options": "\nIncome\nExpense",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "amended_from",
|
||||
"fieldtype": "Link",
|
||||
"label": "Amended From",
|
||||
"no_copy": 1,
|
||||
"options": "Process Deferred Accounting",
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "start_date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Service Start Date",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "end_date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Service End Date",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_3",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"default": "Today",
|
||||
"fieldname": "posting_date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Posting Date",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "account",
|
||||
"fieldtype": "Link",
|
||||
"label": "Account",
|
||||
"options": "Account"
|
||||
},
|
||||
{
|
||||
"fieldname": "company",
|
||||
"fieldtype": "Link",
|
||||
"label": "Company",
|
||||
"options": "Company",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2020-02-06 18:18:09.852844",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Process Deferred Accounting",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"cancel": 1,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"submit": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"cancel": 1,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts Manager",
|
||||
"share": 1,
|
||||
"submit": 1,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Accounts User",
|
||||
"share": 1,
|
||||
"submit": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC"
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
import erpnext
|
||||
from frappe import _
|
||||
from frappe.model.document import Document
|
||||
from erpnext.accounts.general_ledger import make_reverse_gl_entries
|
||||
from erpnext.accounts.deferred_revenue import convert_deferred_expense_to_expense, \
|
||||
convert_deferred_revenue_to_income, build_conditions
|
||||
|
||||
class ProcessDeferredAccounting(Document):
|
||||
def validate(self):
|
||||
if self.end_date < self.start_date:
|
||||
frappe.throw(_("End date cannot be before start date"))
|
||||
|
||||
def on_submit(self):
|
||||
conditions = build_conditions(self.type, self.account, self.company)
|
||||
if self.type == 'Income':
|
||||
convert_deferred_revenue_to_income(self.name, self.start_date, self.end_date, conditions)
|
||||
else:
|
||||
convert_deferred_expense_to_expense(self.name, self.start_date, self.end_date, conditions)
|
||||
|
||||
def on_cancel(self):
|
||||
self.ignore_linked_doctypes = ['GL Entry']
|
||||
gl_entries = frappe.get_all('GL Entry', fields = ['*'],
|
||||
filters={
|
||||
'against_voucher_type': self.doctype,
|
||||
'against_voucher': self.name
|
||||
})
|
||||
|
||||
make_reverse_gl_entries(gl_entries=gl_entries)
|
@ -0,0 +1,48 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
import unittest
|
||||
from erpnext.accounts.doctype.account.test_account import create_account
|
||||
from erpnext.stock.doctype.item.test_item import create_item
|
||||
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice, check_gl_entries
|
||||
|
||||
class TestProcessDeferredAccounting(unittest.TestCase):
|
||||
def test_creation_of_ledger_entry_on_submit(self):
|
||||
''' test creation of gl entries on submission of document '''
|
||||
deferred_account = create_account(account_name="Deferred Revenue",
|
||||
parent_account="Current Liabilities - _TC", company="_Test Company")
|
||||
|
||||
item = create_item("_Test Item for Deferred Accounting")
|
||||
item.enable_deferred_revenue = 1
|
||||
item.deferred_revenue_account = deferred_account
|
||||
item.no_of_months = 12
|
||||
item.save()
|
||||
|
||||
si = create_sales_invoice(item=item.name, posting_date="2019-01-10", do_not_submit=True)
|
||||
si.items[0].enable_deferred_revenue = 1
|
||||
si.items[0].service_start_date = "2019-01-10"
|
||||
si.items[0].service_end_date = "2019-03-15"
|
||||
si.items[0].deferred_revenue_account = deferred_account
|
||||
si.save()
|
||||
si.submit()
|
||||
|
||||
process_deferred_accounting = doc = frappe.get_doc(dict(
|
||||
doctype='Process Deferred Accounting',
|
||||
posting_date="2019-01-01",
|
||||
start_date="2019-01-01",
|
||||
end_date="2019-01-31",
|
||||
type="Income"
|
||||
))
|
||||
|
||||
process_deferred_accounting.insert()
|
||||
process_deferred_accounting.submit()
|
||||
|
||||
expected_gle = [
|
||||
[deferred_account, 33.85, 0.0, "2019-01-31"],
|
||||
["Sales - _TC", 0.0, 33.85, "2019-01-31"]
|
||||
]
|
||||
|
||||
check_gl_entries(self, si.name, expected_gle, "2019-01-10")
|
@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
import unittest, copy, time
|
||||
from frappe.utils import nowdate, flt, getdate, cint, add_days
|
||||
from frappe.utils import nowdate, flt, getdate, cint, add_days, add_months
|
||||
from frappe.model.dynamic_links import get_dynamic_link_map
|
||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry, get_qty_after_transaction
|
||||
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import unlink_payment_on_cancel_of_invoice
|
||||
@ -1721,37 +1721,76 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
si.submit()
|
||||
|
||||
from erpnext.accounts.deferred_revenue import convert_deferred_revenue_to_income
|
||||
convert_deferred_revenue_to_income(start_date="2019-01-01", end_date="2019-01-31")
|
||||
|
||||
pda1 = frappe.get_doc(dict(
|
||||
doctype='Process Deferred Accounting',
|
||||
posting_date=nowdate(),
|
||||
start_date="2019-01-01",
|
||||
end_date="2019-03-31",
|
||||
type="Income",
|
||||
company="_Test Company"
|
||||
))
|
||||
|
||||
pda1.insert()
|
||||
pda1.submit()
|
||||
|
||||
expected_gle = [
|
||||
[deferred_account, 33.85, 0.0, "2019-01-31"],
|
||||
["Sales - _TC", 0.0, 33.85, "2019-01-31"]
|
||||
]
|
||||
|
||||
self.check_gl_entries(si.name, expected_gle, "2019-01-10")
|
||||
|
||||
convert_deferred_revenue_to_income(start_date="2019-01-01", end_date="2019-03-31")
|
||||
|
||||
expected_gle = [
|
||||
["Sales - _TC", 0.0, 33.85, "2019-01-31"],
|
||||
[deferred_account, 43.08, 0.0, "2019-02-28"],
|
||||
["Sales - _TC", 0.0, 43.08, "2019-02-28"],
|
||||
[deferred_account, 23.07, 0.0, "2019-03-15"],
|
||||
["Sales - _TC", 0.0, 23.07, "2019-03-15"]
|
||||
]
|
||||
|
||||
self.check_gl_entries(si.name, expected_gle, "2019-01-31")
|
||||
check_gl_entries(self, si.name, expected_gle, "2019-01-30")
|
||||
|
||||
def check_gl_entries(self, voucher_no, expected_gle, posting_date):
|
||||
gl_entries = frappe.db.sql("""select account, debit, credit, posting_date
|
||||
from `tabGL Entry`
|
||||
where voucher_type='Sales Invoice' and voucher_no=%s and posting_date > %s
|
||||
order by posting_date asc, account asc""", (voucher_no, posting_date), as_dict=1)
|
||||
def test_deferred_error_email(self):
|
||||
deferred_account = create_account(account_name="Deferred Revenue",
|
||||
parent_account="Current Liabilities - _TC", company="_Test Company")
|
||||
|
||||
for i, gle in enumerate(gl_entries):
|
||||
self.assertEqual(expected_gle[i][0], gle.account)
|
||||
self.assertEqual(expected_gle[i][1], gle.debit)
|
||||
self.assertEqual(expected_gle[i][2], gle.credit)
|
||||
self.assertEqual(getdate(expected_gle[i][3]), gle.posting_date)
|
||||
item = create_item("_Test Item for Deferred Accounting")
|
||||
item.enable_deferred_revenue = 1
|
||||
item.deferred_revenue_account = deferred_account
|
||||
item.no_of_months = 12
|
||||
item.save()
|
||||
|
||||
si = create_sales_invoice(item=item.name, posting_date="2019-01-10", do_not_submit=True)
|
||||
si.items[0].enable_deferred_revenue = 1
|
||||
si.items[0].service_start_date = "2019-01-10"
|
||||
si.items[0].service_end_date = "2019-03-15"
|
||||
si.items[0].deferred_revenue_account = deferred_account
|
||||
si.save()
|
||||
si.submit()
|
||||
|
||||
from erpnext.accounts.deferred_revenue import convert_deferred_revenue_to_income
|
||||
|
||||
acc_settings = frappe.get_doc('Accounts Settings', 'Accounts Settings')
|
||||
acc_settings.acc_frozen_upto = '2019-01-31'
|
||||
acc_settings.save()
|
||||
|
||||
pda = frappe.get_doc(dict(
|
||||
doctype='Process Deferred Accounting',
|
||||
posting_date=nowdate(),
|
||||
start_date="2019-01-01",
|
||||
end_date="2019-03-31",
|
||||
type="Income",
|
||||
company="_Test Company"
|
||||
))
|
||||
|
||||
pda.insert()
|
||||
pda.submit()
|
||||
|
||||
email = frappe.db.sql(""" select name from `tabEmail Queue`
|
||||
where message like %(txt)s """, {
|
||||
'txt': "%%%s%%" % "Error while processing deferred accounting for {0}".format(pda.name)
|
||||
})
|
||||
|
||||
self.assertTrue(email)
|
||||
|
||||
acc_settings.load_from_db()
|
||||
acc_settings.acc_frozen_upto = None
|
||||
acc_settings.save()
|
||||
|
||||
def test_inter_company_transaction(self):
|
||||
|
||||
@ -1912,6 +1951,18 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
self.assertEqual(data['billLists'][0]['vehicleNo'], 'KA12KA1234')
|
||||
self.assertEqual(data['billLists'][0]['itemList'][0]['taxableAmount'], 60000)
|
||||
|
||||
def check_gl_entries(doc, voucher_no, expected_gle, posting_date):
|
||||
gl_entries = frappe.db.sql("""select account, debit, credit, posting_date
|
||||
from `tabGL Entry`
|
||||
where voucher_type='Sales Invoice' and voucher_no=%s and posting_date > %s
|
||||
order by posting_date asc, account asc""", (voucher_no, posting_date), as_dict=1)
|
||||
|
||||
for i, gle in enumerate(gl_entries):
|
||||
doc.assertEqual(expected_gle[i][0], gle.account)
|
||||
doc.assertEqual(expected_gle[i][1], gle.debit)
|
||||
doc.assertEqual(expected_gle[i][2], gle.credit)
|
||||
doc.assertEqual(getdate(expected_gle[i][3]), gle.posting_date)
|
||||
|
||||
def test_item_tax_validity(self):
|
||||
item = frappe.get_doc("Item", "_Test Item 2")
|
||||
|
||||
|
@ -168,18 +168,20 @@ class ShareTransfer(Document):
|
||||
return 'Outside'
|
||||
|
||||
def folio_no_validation(self):
|
||||
shareholders = ['from_shareholder', 'to_shareholder']
|
||||
shareholders = [shareholder for shareholder in shareholders if self.get(shareholder) is not '']
|
||||
for shareholder in shareholders:
|
||||
doc = self.get_shareholder_doc(self.get(shareholder))
|
||||
shareholder_fields = ['from_shareholder', 'to_shareholder']
|
||||
for shareholder_field in shareholder_fields:
|
||||
shareholder_name = self.get(shareholder_field)
|
||||
if not shareholder_name:
|
||||
continue
|
||||
doc = self.get_shareholder_doc(shareholder_name)
|
||||
if doc.company != self.company:
|
||||
frappe.throw(_('The shareholder does not belong to this company'))
|
||||
if not doc.folio_no:
|
||||
doc.folio_no = self.from_folio_no \
|
||||
if (shareholder == 'from_shareholder') else self.to_folio_no
|
||||
if (shareholder_field == 'from_shareholder') else self.to_folio_no
|
||||
doc.save()
|
||||
else:
|
||||
if doc.folio_no and doc.folio_no != (self.from_folio_no if (shareholder == 'from_shareholder') else self.to_folio_no):
|
||||
if doc.folio_no and doc.folio_no != (self.from_folio_no if (shareholder_field == 'from_shareholder') else self.to_folio_no):
|
||||
frappe.throw(_('The folio numbers are not matching'))
|
||||
|
||||
def autoname_folio(self, shareholder, is_company=False):
|
||||
|
@ -22,6 +22,7 @@ class Asset(AccountsController):
|
||||
self.validate_item()
|
||||
self.set_missing_values()
|
||||
self.prepare_depreciation_data()
|
||||
self.validate_gross_and_purchase_amount()
|
||||
if self.get("schedules"):
|
||||
self.validate_expected_value_after_useful_life()
|
||||
|
||||
@ -124,6 +125,12 @@ class Asset(AccountsController):
|
||||
|
||||
if self.available_for_use_date and getdate(self.available_for_use_date) < getdate(self.purchase_date):
|
||||
frappe.throw(_("Available-for-use Date should be after purchase date"))
|
||||
|
||||
def validate_gross_and_purchase_amount(self):
|
||||
if self.gross_purchase_amount and self.gross_purchase_amount != self.purchase_receipt_amount:
|
||||
frappe.throw(_("Gross Purchase Amount should be {} to purchase amount of one single Asset. {}\
|
||||
Please do not book expense of multiple assets against one single Asset.")
|
||||
.format(frappe.bold("equal"), "<br>"), title=_("Invalid Gross Purchase Amount"))
|
||||
|
||||
def cancel_auto_gen_movement(self):
|
||||
movements = frappe.db.sql(
|
||||
|
@ -79,7 +79,6 @@ class TestAsset(unittest.TestCase):
|
||||
doc.set_missing_values()
|
||||
self.assertEquals(doc.items[0].is_fixed_asset, 1)
|
||||
|
||||
|
||||
def test_schedule_for_straight_line_method(self):
|
||||
pr = make_purchase_receipt(item_code="Macbook Pro",
|
||||
qty=1, rate=100000.0, location="Test Location")
|
||||
@ -596,6 +595,7 @@ def create_asset(**args):
|
||||
"purchase_date": "2015-01-01",
|
||||
"calculate_depreciation": 0,
|
||||
"gross_purchase_amount": 100000,
|
||||
"purchase_receipt_amount": 100000,
|
||||
"expected_value_after_useful_life": 10000,
|
||||
"warehouse": args.warehouse or "_Test Warehouse - _TC",
|
||||
"available_for_use_date": "2020-06-06",
|
||||
|
@ -245,6 +245,10 @@ def get_data():
|
||||
"name": "Supplier Ledger Summary",
|
||||
"doctype": "Sales Invoice",
|
||||
"is_query_report": True,
|
||||
},
|
||||
{
|
||||
"type": "doctype",
|
||||
"name": "Process Deferred Accounting"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -101,7 +101,7 @@ class BuyingController(StockController):
|
||||
for d in tax_for_valuation:
|
||||
d.category = 'Total'
|
||||
msgprint(_('Tax Category has been changed to "Total" because all the Items are non-stock items'))
|
||||
|
||||
|
||||
def validate_asset_return(self):
|
||||
if self.doctype not in ['Purchase Receipt', 'Purchase Invoice'] or not self.is_return:
|
||||
return
|
||||
@ -691,10 +691,10 @@ class BuyingController(StockController):
|
||||
for qty in range(cint(d.qty)):
|
||||
asset = self.make_asset(d)
|
||||
created_assets.append(asset)
|
||||
|
||||
|
||||
if len(created_assets) > 5:
|
||||
# dont show asset form links if more than 5 assets are created
|
||||
messages.append(_('{} Asset{} created for {}').format(len(created_assets), is_plural, frappe.bold(d.item_code)))
|
||||
messages.append(_('{} Assets created for {}').format(len(created_assets), frappe.bold(d.item_code)))
|
||||
else:
|
||||
assets_link = list(map(lambda d: frappe.utils.get_link_to_form('Asset', d), created_assets))
|
||||
assets_link = frappe.bold(','.join(assets_link))
|
||||
|
@ -82,7 +82,7 @@ class Fees(AccountsController):
|
||||
|
||||
def on_cancel(self):
|
||||
self.ignore_linked_doctypes = ('GL Entry', 'Stock Ledger Entry')
|
||||
make_reverse_gl_entries(voucher_type=self.doctype, voucher_no=self.name, cancel=True)
|
||||
make_reverse_gl_entries(voucher_type=self.doctype, voucher_no=self.name)
|
||||
# frappe.db.set(self, 'status', 'Cancelled')
|
||||
|
||||
|
||||
|
@ -325,7 +325,11 @@ def update_status(appointment_id, status):
|
||||
def send_confirmation_msg(doc):
|
||||
if frappe.db.get_single_value('Healthcare Settings', 'send_appointment_confirmation'):
|
||||
message = frappe.db.get_single_value('Healthcare Settings', 'appointment_confirmation_msg')
|
||||
send_message(doc, message)
|
||||
try:
|
||||
send_message(doc, message)
|
||||
except Exception:
|
||||
frappe.log_error(frappe.get_traceback(), _('Appointment Confirmation Message Not Sent'))
|
||||
frappe.msgprint(_('Appointment Confirmation Message Not Sent'), indicator='orange')
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
|
@ -144,17 +144,9 @@ def publish_selected_items(items_to_publish):
|
||||
'hub_category': item.get('hub_category'),
|
||||
'image_list': item.get('image_list')
|
||||
}
|
||||
if frappe.db.exists('Hub Tracked Item', item_code):
|
||||
items_to_update.append(item)
|
||||
hub_tracked_item = frappe.get_doc('Hub Tracked Item', item_code)
|
||||
hub_tracked_item.update(hub_dict)
|
||||
hub_tracked_item.save()
|
||||
else:
|
||||
frappe.get_doc(hub_dict).insert(ignore_if_duplicate=True)
|
||||
frappe.get_doc(hub_dict).insert(ignore_if_duplicate=True)
|
||||
|
||||
items_to_publish = list(filter(lambda x: x not in items_to_update, items_to_publish))
|
||||
new_items = map_fields(items_to_publish)
|
||||
existing_items = map_fields(items_to_update)
|
||||
items = map_fields(items_to_publish)
|
||||
|
||||
try:
|
||||
item_sync_preprocess(len(items))
|
||||
@ -162,8 +154,7 @@ def publish_selected_items(items_to_publish):
|
||||
|
||||
# TODO: Publish Progress
|
||||
connection = get_hub_connection()
|
||||
connection.insert_many(new_items)
|
||||
connection.bulk_update(existing_items)
|
||||
connection.insert_many(items)
|
||||
|
||||
item_sync_postprocess()
|
||||
except Exception as e:
|
||||
@ -179,6 +170,7 @@ def unpublish_item(item_code, hub_item_name):
|
||||
|
||||
if response:
|
||||
frappe.db.set_value('Item', item_code, 'publish_in_hub', 0)
|
||||
frappe.delete_doc('Hub Tracked Item', item_code)
|
||||
else:
|
||||
frappe.throw(_('Unable to update remote activity'))
|
||||
|
||||
|
@ -122,12 +122,8 @@ frappe.ui.form.on("Work Order", {
|
||||
},
|
||||
|
||||
source_warehouse: function(frm) {
|
||||
if (frm.doc.source_warehouse) {
|
||||
frm.doc.required_items.forEach(d => {
|
||||
frappe.model.set_value(d.doctype, d.name,
|
||||
"source_warehouse", frm.doc.source_warehouse);
|
||||
});
|
||||
}
|
||||
let transaction_controller = new erpnext.TransactionController();
|
||||
transaction_controller.autofill_warehouse(frm.doc.required_items, "source_warehouse", frm.doc.source_warehouse);
|
||||
},
|
||||
|
||||
refresh: function(frm) {
|
||||
|
@ -643,6 +643,7 @@ erpnext.patches.v12_0.set_default_shopify_app_type
|
||||
erpnext.patches.v12_0.set_cwip_and_delete_asset_settings
|
||||
erpnext.patches.v12_0.set_expense_account_in_landed_cost_voucher_taxes
|
||||
erpnext.patches.v12_0.replace_accounting_with_accounts_in_home_settings
|
||||
erpnext.patches.v12_0.set_automatically_process_deferred_accounting_in_accounts_settings
|
||||
erpnext.patches.v12_0.set_payment_entry_status
|
||||
erpnext.patches.v12_0.update_owner_fields_in_acc_dimension_custom_fields
|
||||
erpnext.patches.v12_0.add_export_type_field_in_party_master
|
||||
|
@ -0,0 +1,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
frappe.reload_doc("accounts", "doctype", "accounts_settings")
|
||||
|
||||
frappe.db.set_value("Accounts Settings", None, "automatically_process_deferred_accounting_entry", 1)
|
@ -253,6 +253,13 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
}
|
||||
},
|
||||
|
||||
rejected_warehouse: function(doc, cdt) {
|
||||
// trigger autofill_warehouse only if parent rejected_warehouse field is triggered
|
||||
if (["Purchase Invoice", "Purchase Receipt"].includes(cdt)) {
|
||||
this.autofill_warehouse(doc.items, "rejected_warehouse", doc.rejected_warehouse);
|
||||
}
|
||||
},
|
||||
|
||||
category: function(doc, cdt, cdn) {
|
||||
// should be the category field of tax table
|
||||
if(cdt != doc.doctype) {
|
||||
|
@ -1903,21 +1903,16 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
||||
},
|
||||
|
||||
set_reserve_warehouse: function() {
|
||||
this.autofill_warehouse("reserve_warehouse");
|
||||
this.autofill_warehouse(this.frm.doc.supplied_items, "reserve_warehouse", this.frm.doc.set_reserve_warehouse);
|
||||
},
|
||||
|
||||
set_warehouse: function() {
|
||||
this.autofill_warehouse("warehouse");
|
||||
this.autofill_warehouse(this.frm.doc.items, "warehouse", this.frm.doc.set_warehouse);
|
||||
},
|
||||
|
||||
autofill_warehouse : function (warehouse_field) {
|
||||
// set warehouse in all child table rows
|
||||
var me = this;
|
||||
let warehouse = (warehouse_field === "warehouse") ? me.frm.doc.set_warehouse : me.frm.doc.set_reserve_warehouse;
|
||||
let child_table = (warehouse_field === "warehouse") ? me.frm.doc.items : me.frm.doc.supplied_items;
|
||||
let doctype = (warehouse_field === "warehouse") ? (me.frm.doctype + " Item") : (me.frm.doctype + " Item Supplied");
|
||||
|
||||
if(warehouse) {
|
||||
autofill_warehouse : function (child_table, warehouse_field, warehouse) {
|
||||
if (warehouse && child_table && child_table.length) {
|
||||
let doctype = child_table[0].doctype;
|
||||
$.each(child_table || [], function(i, item) {
|
||||
frappe.model.set_value(doctype, item.name, warehouse_field, warehouse);
|
||||
});
|
||||
|
@ -46,7 +46,7 @@ doctypes_with_dimensions.forEach((doctype) => {
|
||||
if(frm.doc.company && Object.keys(default_dimensions || {}).length > 0
|
||||
&& default_dimensions[frm.doc.company]) {
|
||||
|
||||
let default_dimension = default_dimensions[frm.doc.company][dimension['document_type']];
|
||||
let default_dimension = default_dimensions[frm.doc.company][dimension['fieldname']];
|
||||
|
||||
if(default_dimension) {
|
||||
if (frappe.meta.has_field(doctype, dimension['fieldname'])) {
|
||||
|
@ -429,7 +429,7 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
||||
if (doc.has_serial_no && doc.serial_no) {
|
||||
args['serial_no'] = doc.serial_no
|
||||
}
|
||||
|
||||
|
||||
return frappe.call({
|
||||
method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
|
||||
args: args,
|
||||
|
@ -101,17 +101,6 @@ frappe.ui.form.on("Delivery Note", {
|
||||
})
|
||||
}, __('Create'));
|
||||
}
|
||||
},
|
||||
|
||||
to_warehouse: function(frm) {
|
||||
if(frm.doc.to_warehouse) {
|
||||
["items", "packed_items"].forEach(doctype => {
|
||||
frm.doc[doctype].forEach(d => {
|
||||
frappe.model.set_value(d.doctype, d.name,
|
||||
"target_warehouse", frm.doc.to_warehouse);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@ -287,6 +276,14 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend(
|
||||
frappe.ui.form.is_saving = false;
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
to_warehouse: function() {
|
||||
let packed_items_table = this.frm.doc["packed_items"];
|
||||
this.autofill_warehouse(this.frm.doc["items"], "target_warehouse", this.frm.doc.to_warehouse);
|
||||
if (packed_items_table && packed_items_table.length) {
|
||||
this.autofill_warehouse(packed_items_table, "target_warehouse", this.frm.doc.to_warehouse);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -875,39 +875,17 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({
|
||||
if(!row.t_warehouse) row.t_warehouse = this.frm.doc.to_warehouse;
|
||||
},
|
||||
|
||||
source_mandatory: ["Material Issue", "Material Transfer", "Send to Subcontractor",
|
||||
"Material Transfer for Manufacture", "Send to Warehouse", "Receive at Warehouse"],
|
||||
target_mandatory: ["Material Receipt", "Material Transfer", "Send to Subcontractor",
|
||||
"Material Transfer for Manufacture", "Send to Warehouse", "Receive at Warehouse"],
|
||||
|
||||
from_warehouse: function(doc) {
|
||||
var me = this;
|
||||
this.set_warehouse_if_different("s_warehouse", doc.from_warehouse, function(row) {
|
||||
return me.source_mandatory.indexOf(me.frm.doc.purpose)!==-1;
|
||||
});
|
||||
this.set_warehouse_in_children(doc.items, "s_warehouse", doc.from_warehouse);
|
||||
},
|
||||
|
||||
to_warehouse: function(doc) {
|
||||
var me = this;
|
||||
this.set_warehouse_if_different("t_warehouse", doc.to_warehouse, function(row) {
|
||||
return me.target_mandatory.indexOf(me.frm.doc.purpose)!==-1;
|
||||
});
|
||||
this.set_warehouse_in_children(doc.items, "t_warehouse", doc.to_warehouse);
|
||||
},
|
||||
|
||||
set_warehouse_if_different: function(fieldname, value, condition) {
|
||||
var changed = false;
|
||||
for (var i=0, l=(this.frm.doc.items || []).length; i<l; i++) {
|
||||
var row = this.frm.doc.items[i];
|
||||
if (row[fieldname] != value) {
|
||||
if (condition && !condition(row)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
frappe.model.set_value(row.doctype, row.name, fieldname, value, "Link");
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
refresh_field("items");
|
||||
set_warehouse_in_children: function(child_table, warehouse_field, warehouse) {
|
||||
let transaction_controller = new erpnext.TransactionController();
|
||||
transaction_controller.autofill_warehouse(child_table, warehouse_field, warehouse);
|
||||
},
|
||||
|
||||
items_on_form_rendered: function(doc, grid_row) {
|
||||
|
@ -3,6 +3,14 @@
|
||||
|
||||
frappe.query_reports["Stock Balance"] = {
|
||||
"filters": [
|
||||
{
|
||||
"fieldname": "company",
|
||||
"label": __("Company"),
|
||||
"fieldtype": "Link",
|
||||
"width": "80",
|
||||
"options": "Company",
|
||||
"default": frappe.defaults.get_default("company")
|
||||
},
|
||||
{
|
||||
"fieldname":"from_date",
|
||||
"label": __("From Date"),
|
||||
@ -26,12 +34,6 @@ frappe.query_reports["Stock Balance"] = {
|
||||
"width": "80",
|
||||
"options": "Item Group"
|
||||
},
|
||||
{
|
||||
"fieldname":"brand",
|
||||
"label": __("Brand"),
|
||||
"fieldtype": "Link",
|
||||
"options": "Brand"
|
||||
},
|
||||
{
|
||||
"fieldname": "item_code",
|
||||
"label": __("Item"),
|
||||
@ -84,5 +86,18 @@ frappe.query_reports["Stock Balance"] = {
|
||||
"label": __('Show Stock Ageing Data'),
|
||||
"fieldtype": 'Check'
|
||||
},
|
||||
]
|
||||
],
|
||||
|
||||
"formatter": function (value, row, column, data, default_formatter) {
|
||||
value = default_formatter(value, row, column, data);
|
||||
|
||||
if (column.fieldname == "out_qty" && data && data.out_qty > 0) {
|
||||
value = "<span style='color:red'>" + value + "</span>";
|
||||
}
|
||||
else if (column.fieldname == "in_qty" && data && data.in_qty > 0) {
|
||||
value = "<span style='color:green'>" + value + "</span>";
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
@ -1,24 +1,26 @@
|
||||
{
|
||||
"add_total_row": 1,
|
||||
"creation": "2014-10-10 17:58:11.577901",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"idx": 2,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2018-08-14 15:24:41.395557",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Balance",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 1,
|
||||
"ref_doctype": "Stock Ledger Entry",
|
||||
"report_name": "Stock Balance",
|
||||
"report_type": "Script Report",
|
||||
"add_total_row": 1,
|
||||
"creation": "2014-10-10 17:58:11.577901",
|
||||
"disable_prepared_report": 0,
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"idx": 2,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2020-04-30 13:46:14.680354",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Balance",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 1,
|
||||
"query": "",
|
||||
"ref_doctype": "Stock Ledger Entry",
|
||||
"report_name": "Stock Balance",
|
||||
"report_type": "Script Report",
|
||||
"roles": [
|
||||
{
|
||||
"role": "Stock User"
|
||||
},
|
||||
},
|
||||
{
|
||||
"role": "Accounts Manager"
|
||||
}
|
||||
|
@ -94,8 +94,6 @@ def get_columns(filters):
|
||||
{"label": _("Item"), "fieldname": "item_code", "fieldtype": "Link", "options": "Item", "width": 100},
|
||||
{"label": _("Item Name"), "fieldname": "item_name", "width": 150},
|
||||
{"label": _("Item Group"), "fieldname": "item_group", "fieldtype": "Link", "options": "Item Group", "width": 100},
|
||||
{"label": _("Brand"), "fieldname": "brand", "fieldtype": "Link", "options": "Brand", "width": 90},
|
||||
{"label": _("Description"), "fieldname": "description", "width": 140},
|
||||
{"label": _("Warehouse"), "fieldname": "warehouse", "fieldtype": "Link", "options": "Warehouse", "width": 100},
|
||||
{"label": _("Stock UOM"), "fieldname": "stock_uom", "fieldtype": "Link", "options": "UOM", "width": 90},
|
||||
{"label": _("Balance Qty"), "fieldname": "bal_qty", "fieldtype": "Float", "width": 100, "convertible": "qty"},
|
||||
@ -132,6 +130,9 @@ def get_conditions(filters):
|
||||
else:
|
||||
frappe.throw(_("'To Date' is required"))
|
||||
|
||||
if filters.get("company"):
|
||||
conditions += " and sle.company = %s" % frappe.db.escape(filters.get("company"))
|
||||
|
||||
if filters.get("warehouse"):
|
||||
warehouse_details = frappe.db.get_value("Warehouse",
|
||||
filters.get("warehouse"), ["lft", "rgt"], as_dict=1)
|
||||
@ -233,8 +234,6 @@ def get_items(filters):
|
||||
if filters.get("item_code"):
|
||||
conditions.append("item.name=%(item_code)s")
|
||||
else:
|
||||
if filters.get("brand"):
|
||||
conditions.append("item.brand=%(brand)s")
|
||||
if filters.get("item_group"):
|
||||
conditions.append(get_item_group_condition(filters.get("item_group")))
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
DocType: Account,Accounts,དངུལ་རྩིས།
|
||||
DocType: Pricing Rule,Buying,ཉོ་བ།
|
||||
Accounts,དངུལ་རྩིས།,
|
||||
Buying,ཉོ་བ།,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,27 +1,28 @@
|
||||
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Åbning'
|
||||
DocType: Call Log,Lead,Bly
|
||||
apps/erpnext/erpnext/config/selling.py,Default settings for selling transactions.,Standardindstillinger for at sælge transaktioner.
|
||||
DocType: Timesheet,% Amount Billed,% Beløb Billed
|
||||
DocType: Purchase Order,% Billed,% Billed
|
||||
,Lead Id,Bly Id
|
||||
apps/erpnext/erpnext/accounts/doctype/payment_order/payment_order.py,{0} {1} created,{0} {1} creado
|
||||
apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html,'Total','Total'
|
||||
DocType: Selling Settings,Selling Settings,Salg af indstillinger
|
||||
apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py,Selling Amount,Selling Beløb
|
||||
DocType: Item Default,Default Selling Cost Center,Standard Selling Cost center
|
||||
apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py,90-Above,90-Above
|
||||
DocType: Pricing Rule,Selling,Selling
|
||||
DocType: Sales Order,% Delivered,% Leveres
|
||||
DocType: Lead,Lead Owner,Bly Owner
|
||||
apps/erpnext/erpnext/controllers/stock_controller.py,{0} {1}: Cost Center is mandatory for Item {2},{0} {1}: Udgiftområde er obligatorisk for varen {2}
|
||||
apps/erpnext/erpnext/config/accounts.py,Tax template for selling transactions.,Skat skabelon til at sælge transaktioner.
|
||||
apps/erpnext/erpnext/controllers/accounts_controller.py, or ,o
|
||||
DocType: Sales Order,% of materials billed against this Sales Order,% Af materialer faktureret mod denne Sales Order
|
||||
DocType: SMS Center,All Lead (Open),Alle Bly (Open)
|
||||
apps/erpnext/erpnext/templates/includes/footer/footer_extension.html,Get Updates,Hent opdateringer
|
||||
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,'Update Stock' can not be checked because items are not delivered via {0},"'Opdater lager' kan ikke markeres, varerne ikke leveres via {0}"
|
||||
apps/erpnext/erpnext/patches/v4_0/create_price_list_if_missing.py,Standard Selling,Standard Selling
|
||||
,Lead Details,Bly Detaljer
|
||||
DocType: Selling Settings,Settings for Selling Module,Indstillinger for Selling modul
|
||||
DocType: Call Log,Lead Name,Bly navn
|
||||
DocType: Rename Tool,"Attach .csv file with two columns, one for the old name and one for the new name","Vedhæfte .csv fil med to kolonner, en for det gamle navn og et til det nye navn"
|
||||
'Opening','Åbning',
|
||||
'Total','Total',
|
||||
'Update Stock' can not be checked because items are not delivered via {0},"'Opdater lager' kan ikke markeres, varerne ikke leveres via {0}",
|
||||
90-Above,90-Above,
|
||||
Default settings for selling transactions.,Standardindstillinger for at sælge transaktioner.,
|
||||
Get Updates,Hent opdateringer,
|
||||
Half Day,Half Day,
|
||||
Half Yearly,Halvdelen Årlig,
|
||||
Lead,Bly,
|
||||
Lead Owner,Bly Owner,
|
||||
Selling,Selling,
|
||||
Selling Amount,Selling Beløb,
|
||||
Standard Selling,Standard Selling,
|
||||
Tax template for selling transactions.,Skat skabelon til at sælge transaktioner.,
|
||||
{0} {1} created,{0} {1} creado,
|
||||
{0} {1}: Cost Center is mandatory for Item {2},{0} {1}: Udgiftområde er obligatorisk for varen {2},
|
||||
% Billed,% Billed,
|
||||
Lead Name,Bly navn,
|
||||
% Amount Billed,% Beløb Billed,
|
||||
% Delivered,% Leveres,
|
||||
% of materials billed against this Sales Order,% Af materialer faktureret mod denne Sales Order,
|
||||
Selling Settings,Salg af indstillinger,
|
||||
Settings for Selling Module,Indstillinger for Selling modul,
|
||||
All Lead (Open),Alle Bly (Open),
|
||||
Default Selling Cost Center,Standard Selling Cost center,
|
||||
"Attach .csv file with two columns, one for the old name and one for the new name","Vedhæfte .csv fil med to kolonner, en for det gamle navn og et til det nye navn",
|
||||
Lead Details,Bly Detaljer,
|
||||
Lead Id,Bly Id,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
DocType: Patient,Married,既婚
|
||||
Married,既婚,
|
||||
|
|
@ -1,2 +1 @@
|
||||
apps/erpnext/erpnext/controllers/accounts_controller.py, or ,uor
|
||||
apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py,90-Above,90-Above
|
||||
90-Above,90-Above,
|
||||
|
|
@ -1,44 +1,43 @@
|
||||
apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html,Cheques Required,Checks Required
|
||||
apps/erpnext/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py,Row #{0}: Clearance date {1} cannot be before Cheque Date {2},Row #{0}: Clearance date {1} cannot be before Check Date {2}
|
||||
apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py,"Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Leave cannot be applied/canceled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}"
|
||||
apps/erpnext/erpnext/support/doctype/warranty_claim/warranty_claim.py,Cancel Material Visit {0} before cancelling this Warranty Claim,Cancel Material Visit {0} before canceling this Warranty Claim
|
||||
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py,"Appointment cancelled, Please review and cancel the invoice {0}","Appointment canceled, Please review and cancel the invoice {0}"
|
||||
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Outstanding Cheques and Deposits to clear,Outstanding Checks and Deposits to clear
|
||||
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py,Appointment cancelled,Appointment canceled
|
||||
DocType: Payment Entry,Cheque/Reference Date,Check/Reference Date
|
||||
DocType: Cheque Print Template,Scanned Cheque,Scanned Check
|
||||
DocType: Cheque Print Template,Cheque Size,Check Size
|
||||
apps/erpnext/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.py,Maintenance Status has to be Cancelled or Completed to Submit,Maintenance Status has to be Canceled or Completed to Submit
|
||||
apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py,'Entries' cannot be empty,'Entries' can not be empty
|
||||
apps/erpnext/erpnext/setup/doctype/company/company.py,"Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency.","Cannot change company's default currency, because there are existing transactions. Transactions must be canceled to change the default currency."
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Maintenance Visit {0} must be canceled before cancelling this Sales Order
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Sales Invoice {0} must be cancelled before cancelling this Sales Order,Sales Invoice {0} must be canceled before cancelling this Sales Order
|
||||
DocType: Bank Reconciliation Detail,Cheque Date,Check Date
|
||||
apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.py,"Stopped Work Order cannot be cancelled, Unstop it first to cancel","Stopped Work Order cannot be canceled, Unstop it first to cancel"
|
||||
apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py,Material Request {0} is cancelled or stopped,Material Request {0} is canceled or stopped
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Closed order cannot be cancelled. Unclose to cancel.,Closed order cannot be canceled. Unclose to cancel.
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Maintenance Schedule {0} must be cancelled before cancelling this Sales Order,Maintenance Schedule {0} must be canceled before cancelling this Sales Order
|
||||
DocType: Accounts Settings,Unlink Payment on Cancellation of Invoice,Unlink Payment on Cancelation of Invoice
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Delivery Notes {0} must be cancelled before cancelling this Sales Order,Delivery Notes {0} must be canceled before cancelling this Sales Order
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Work Order {0} must be cancelled before cancelling this Sales Order,Work Order {0} must be canceled before cancelling this Sales Order
|
||||
apps/erpnext/erpnext/config/accounts.py,Setup cheque dimensions for printing,Setup check dimensions for printing
|
||||
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Cheques and Deposits incorrectly cleared,Checks and Deposits incorrectly cleared
|
||||
apps/erpnext/erpnext/stock/doctype/material_request/material_request.py,{0} {1} is cancelled so the action cannot be completed,{0} {1} is canceled so the action cannot be completed
|
||||
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py,Packing Slip(s) cancelled,Packing Slip(s) canceled
|
||||
DocType: Payment Entry,Cheque/Reference No,Check/Reference No
|
||||
apps/erpnext/erpnext/assets/doctype/asset/asset.py,"Asset cannot be cancelled, as it is already {0}","Asset cannot be canceled, as it is already {0}"
|
||||
DocType: Cheque Print Template,Cheque Print Template,Check Print Template
|
||||
apps/erpnext/erpnext/controllers/selling_controller.py,{0} {1} is cancelled or closed,{0} {1} is canceled or closed
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Quotation {0} is cancelled,Quotation {0} is canceled
|
||||
apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py,Timesheet {0} is already completed or cancelled,Timesheet {0} is already completed or canceled
|
||||
apps/erpnext/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.py,Payment Cancelled. Please check your GoCardless Account for more details,Payment Canceled. Please check your GoCardless Account for more details
|
||||
apps/erpnext/erpnext/stock/doctype/item/item.py,Item {0} is cancelled,Item {0} is canceled
|
||||
DocType: Serial No,Is Cancelled,Is Canceled
|
||||
apps/erpnext/erpnext/stock/doctype/material_request/material_request.py,{0} {1} is cancelled or stopped,{0} {1} is canceled or stopped
|
||||
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Colour,Color
|
||||
DocType: Bank Reconciliation Detail,Cheque Number,Check Number
|
||||
apps/erpnext/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.py,Cancel Material Visits {0} before cancelling this Maintenance Visit,Cancel Material Visits {0} before canceling this Maintenance Visit
|
||||
DocType: Employee,Cheque,Check
|
||||
DocType: Cheque Print Template,Cheque Height,Check Height
|
||||
DocType: Cheque Print Template,Cheque Width,Check Width
|
||||
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Wire Transfer,Wire Transfer
|
||||
'Entries' cannot be empty,'Entries' can not be empty,
|
||||
"Asset cannot be cancelled, as it is already {0}","Asset cannot be canceled, as it is already {0}",
|
||||
Cancel Material Visit {0} before cancelling this Warranty Claim,Cancel Material Visit {0} before canceling this Warranty Claim,
|
||||
Cancel Material Visits {0} before cancelling this Maintenance Visit,Cancel Material Visits {0} before canceling this Maintenance Visit,
|
||||
"Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency.","Cannot change company's default currency, because there are existing transactions. Transactions must be canceled to change the default currency.",
|
||||
Cheque,Check,
|
||||
Cheque/Reference No,Check/Reference No,
|
||||
Cheques Required,Checks Required,
|
||||
Cheques and Deposits incorrectly cleared,Checks and Deposits incorrectly cleared,
|
||||
Closed order cannot be cancelled. Unclose to cancel.,Closed order cannot be canceled. Unclose to cancel.,
|
||||
Colour,Color,
|
||||
Delivery Notes {0} must be cancelled before cancelling this Sales Order,Delivery Notes {0} must be canceled before cancelling this Sales Order,
|
||||
Item {0} is cancelled,Item {0} is canceled,
|
||||
"Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Leave cannot be applied/canceled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}",
|
||||
Maintenance Schedule {0} must be cancelled before cancelling this Sales Order,Maintenance Schedule {0} must be canceled before cancelling this Sales Order,
|
||||
Maintenance Status has to be Cancelled or Completed to Submit,Maintenance Status has to be Canceled or Completed to Submit,
|
||||
Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Maintenance Visit {0} must be canceled before cancelling this Sales Order,
|
||||
Material Request {0} is cancelled or stopped,Material Request {0} is canceled or stopped,
|
||||
Outstanding Cheques and Deposits to clear,Outstanding Checks and Deposits to clear,
|
||||
Packing Slip(s) cancelled,Packing Slip(s) canceled,
|
||||
Payment Cancelled. Please check your GoCardless Account for more details,Payment Canceled. Please check your GoCardless Account for more details,
|
||||
Quotation {0} is cancelled,Quotation {0} is canceled,
|
||||
Row #{0}: Clearance date {1} cannot be before Cheque Date {2},Row #{0}: Clearance date {1} cannot be before Check Date {2},
|
||||
Sales Invoice {0} must be cancelled before cancelling this Sales Order,Sales Invoice {0} must be canceled before cancelling this Sales Order,
|
||||
Setup cheque dimensions for printing,Setup check dimensions for printing,
|
||||
"Stopped Work Order cannot be cancelled, Unstop it first to cancel","Stopped Work Order cannot be canceled, Unstop it first to cancel",
|
||||
Timesheet {0} is already completed or cancelled,Timesheet {0} is already completed or canceled,
|
||||
Wire Transfer,Wire Transfer,
|
||||
Work Order {0} must be cancelled before cancelling this Sales Order,Work Order {0} must be canceled before cancelling this Sales Order,
|
||||
{0} {1} is cancelled or closed,{0} {1} is canceled or closed,
|
||||
{0} {1} is cancelled or stopped,{0} {1} is canceled or stopped,
|
||||
{0} {1} is cancelled so the action cannot be completed,{0} {1} is canceled so the action cannot be completed,
|
||||
Cancelled,Canceled,
|
||||
Unlink Payment on Cancellation of Invoice,Unlink Payment on Cancelation of Invoice,
|
||||
Cheque Number,Check Number,
|
||||
Cheque Date,Check Date,
|
||||
Cheque Print Template,Check Print Template,
|
||||
Cheque Size,Check Size,
|
||||
Cheque Width,Check Width,
|
||||
Cheque Height,Check Height,
|
||||
Scanned Cheque,Scanned Check,
|
||||
Cheque/Reference Date,Check/Reference Date,
|
||||
Is Cancelled,Is Canceled,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,6 @@
|
||||
DocType: Fee Structure,Components,Componentes
|
||||
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Employee {0} on Half day on {1},"Empleado {0}, media jornada el día {1}"
|
||||
DocType: Purchase Invoice Item,Item,Producto
|
||||
DocType: Payment Entry,Deductions or Loss,Deducciones o Pérdidas
|
||||
DocType: Cheque Print Template,Cheque Size,Tamaño de Cheque
|
||||
Employee {0} on Half day on {1},"Empleado {0}, media jornada el día {1}",
|
||||
Item,Producto,
|
||||
Communication,Comunicacion,
|
||||
Components,Componentes,
|
||||
Cheque Size,Tamaño de Cheque,
|
||||
Deductions or Loss,Deducciones o Pérdidas,
|
||||
|
|
@ -1,31 +1,29 @@
|
||||
DocType: Assessment Plan,Grading Scale,Escala de Calificación
|
||||
apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py,Guardian1 Mobile No,Número de Móvil de Guardián 1
|
||||
apps/erpnext/erpnext/accounts/report/profitability_analysis/profitability_analysis.py,Gross Profit / Loss,Ganancia / Pérdida Bruta
|
||||
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Cheques and Deposits incorrectly cleared,Los cheques y depósitos resueltos de forma incorrecta
|
||||
DocType: Assessment Group,Parent Assessment Group,Grupo de Evaluación Padre
|
||||
DocType: Student,Guardians,Guardianes
|
||||
DocType: Fee Schedule,Fee Schedule,Programa de Tarifas
|
||||
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,Get Items from Product Bundle,Obtener Ítems de Paquete de Productos
|
||||
apps/erpnext/erpnext/stock/doctype/material_request/material_request.js,BOM does not contain any stock item,BOM no contiene ningún ítem de stock
|
||||
DocType: Homepage,Company Tagline for website homepage,Lema de la empresa para la página de inicio del sitio web
|
||||
DocType: Delivery Note,% Installed,% Instalado
|
||||
DocType: Student,Guardian Details,Detalles del Guardián
|
||||
apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py,Guardian1 Name,Nombre de Guardián 1
|
||||
DocType: Grading Scale Interval,Grade Code,Grado de Código
|
||||
DocType: Fee Schedule,Fee Structure,Estructura de Tarifas
|
||||
DocType: Purchase Order,Get Items from Open Material Requests,Obtener Ítems de Solicitudes Abiertas de Materiales
|
||||
,Batch Item Expiry Status,Estatus de Expiración de Lote de Ítems
|
||||
DocType: Guardian,Guardian Interests,Intereses del Guardián
|
||||
DocType: Guardian,Guardian Name,Nombre del Guardián
|
||||
apps/erpnext/erpnext/selling/doctype/product_bundle/product_bundle.py,Child Item should not be a Product Bundle. Please remove item `{0}` and save,Artículo hijo no debe ser un paquete de productos. Por favor remover el artículo `` {0} y guardar
|
||||
DocType: BOM Scrap Item,Basic Amount (Company Currency),Monto Base (Divisa de Compañía)
|
||||
DocType: Grading Scale,Grading Scale Name,Nombre de Escala de Calificación
|
||||
apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py,Guardian2 Mobile No,Número de Móvil de Guardián 2
|
||||
apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py,Guardian2 Name,Nombre de Guardián 2
|
||||
DocType: Stock Entry,Customer or Supplier Details,Detalle de cliente o proveedor
|
||||
DocType: Course Scheduling Tool,Course Scheduling Tool,Herramienta de Programación de cursos
|
||||
DocType: Shopping Cart Settings,Checkout Settings,Ajustes de Finalización de Pedido
|
||||
DocType: Guardian Interest,Guardian Interest,Interés del Guardián
|
||||
apps/erpnext/erpnext/templates/includes/cart/cart_dropdown.html,Checkout,Finalizando pedido
|
||||
DocType: Guardian Student,Guardian Student,Guardián del Estudiante
|
||||
DocType: BOM Operation,Base Hour Rate(Company Currency),Tarifa Base por Hora (Divisa de Compañía)
|
||||
BOM does not contain any stock item,BOM no contiene ningún ítem de stock,
|
||||
Checkout,Finalizando pedido,
|
||||
Cheques and Deposits incorrectly cleared,Los cheques y depósitos resueltos de forma incorrecta,
|
||||
Child Item should not be a Product Bundle. Please remove item `{0}` and save,Artículo hijo no debe ser un paquete de productos. Por favor remover el artículo `` {0} y guardar,
|
||||
Get Items from Product Bundle,Obtener Ítems de Paquete de Productos,
|
||||
Gross Profit / Loss,Ganancia / Pérdida Bruta,
|
||||
Guardian1 Mobile No,Número de Móvil de Guardián 1,
|
||||
Guardian1 Name,Nombre de Guardián 1,
|
||||
Guardian2 Mobile No,Número de Móvil de Guardián 2,
|
||||
Guardian2 Name,Nombre de Guardián 2,
|
||||
Get Items from Open Material Requests,Obtener Ítems de Solicitudes Abiertas de Materiales,
|
||||
Parent Assessment Group,Grupo de Evaluación Padre,
|
||||
Grading Scale,Escala de Calificación,
|
||||
Course Scheduling Tool,Herramienta de Programación de cursos,
|
||||
Fee Schedule,Programa de Tarifas,
|
||||
Fee Structure,Estructura de Tarifas,
|
||||
Grading Scale Name,Nombre de Escala de Calificación,
|
||||
Grade Code,Grado de Código,
|
||||
Guardian Name,Nombre del Guardián,
|
||||
Guardian Interests,Intereses del Guardián,
|
||||
Guardian Interest,Interés del Guardián,
|
||||
Guardian Student,Guardián del Estudiante,
|
||||
Guardian Details,Detalles del Guardián,
|
||||
Guardians,Guardianes,
|
||||
Base Hour Rate(Company Currency),Tarifa Base por Hora (Divisa de Compañía),
|
||||
Basic Amount (Company Currency),Monto Base (Divisa de Compañía),
|
||||
Company Tagline for website homepage,Lema de la empresa para la página de inicio del sitio web,
|
||||
Checkout Settings,Ajustes de Finalización de Pedido,
|
||||
Batch Item Expiry Status,Estatus de Expiración de Lote de Ítems,
|
||||
|
|
@ -1,3 +1,3 @@
|
||||
apps/erpnext/erpnext/stock/doctype/item/item.py,Barcode {0} is not a valid {1} code,El código de barras {0} no es un código válido {1}
|
||||
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py,{0} on Half day Leave on {1},{0} Ausente medio día en {1}
|
||||
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py,{0} does not have a Healthcare Practitioner Schedule. Add it in Healthcare Practitioner master,{0} no tiene agenda del profesional médico . Añádelo al médico correspondiente.
|
||||
Barcode {0} is not a valid {1} code,El código de barras {0} no es un código válido {1},
|
||||
Clear filters,Limpiar Filtros,
|
||||
{0} does not have a Healthcare Practitioner Schedule. Add it in Healthcare Practitioner master,{0} no tiene agenda del profesional médico . Añádelo al médico correspondiente.,
|
||||
|
|
@ -1,10 +1,10 @@
|
||||
DocType: Supplier,Block Supplier,Bloque de Proveedor
|
||||
apps/erpnext/erpnext/hr/doctype/retention_bonus/retention_bonus.py,Cannot create Retention Bonus for left Employees,No se puede crear una bonificación de retención para los empleados que se han marchado
|
||||
apps/erpnext/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py,Cancel the journal entry {0} first,Cancelar el ingreso diario {0} primero
|
||||
apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,Cannot transfer Employee with status Left,No se puede transferir Empleado con estado ah salido
|
||||
DocType: Employee Benefit Claim,Benefit Type and Amount,Tipo de beneficio y monto
|
||||
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,Block Invoice,Bloque de Factura
|
||||
DocType: Item,Asset Naming Series,Series de Nombres de Activos
|
||||
,BOM Variance Report,Informe de varianza BOM(Lista de Materiales)
|
||||
apps/erpnext/erpnext/hr/doctype/employee_promotion/employee_promotion.py,Cannot promote Employee with status Left,No se puede promover Empleado con estado ha salido
|
||||
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,Auto repeat document updated,Repetición automática del documento actualizado
|
||||
Auto repeat document updated,Repetición automática del documento actualizado,
|
||||
Block Invoice,Bloque de Factura,
|
||||
Cancel the journal entry {0} first,Cancelar el ingreso diario {0} primero,
|
||||
Cannot create Retention Bonus for left Employees,No se puede crear una bonificación de retención para los empleados que se han marchado,
|
||||
Cannot promote Employee with status Left,No se puede promover Empleado con estado ha salido,
|
||||
Cannot transfer Employee with status Left,No se puede transferir Empleado con estado ah salido,
|
||||
Block Supplier,Bloque de Proveedor,
|
||||
Benefit Type and Amount,Tipo de beneficio y monto,
|
||||
Asset Naming Series,Series de Nombres de Activos,
|
||||
BOM Variance Report,Informe de varianza BOM(Lista de Materiales),
|
||||
|
|
0
erpnext/translations/es_es.csv
Normal file
0
erpnext/translations/es_es.csv
Normal file
|
@ -1,10 +1,11 @@
|
||||
DocType: Instructor Log,Other Details,Otros Detalles
|
||||
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py,{0} does not have a Healthcare Practitioner Schedule. Add it in Healthcare Practitioner master,{0} no tiene agenda del profesional médico . Asígnele al médico
|
||||
DocType: Material Request Item,Lead Time Date,Fecha de la Iniciativa
|
||||
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Lead Time Days,Tiempo de ejecución en días
|
||||
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py,{0} on Half day Leave on {1},{0} en Medio día Permiso en {1}
|
||||
apps/erpnext/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py,Outstanding Amt,Saldo Pendiente
|
||||
DocType: Bank Statement Transaction Invoice Item,Outstanding Amount,Saldo Pendiente
|
||||
DocType: Manufacturing Settings,Other Settings,Otros Ajustes
|
||||
DocType: Payment Entry Reference,Outstanding,Pendiente
|
||||
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py,{0} on Leave on {1},{0} De permiso De permiso {1}
|
||||
Chart Of Accounts,Plan de Cuentas,
|
||||
Item,Producto,
|
||||
Lead Time Days,Tiempo de ejecución en días,
|
||||
Outstanding,Pendiente,
|
||||
Outstanding Amount,Saldo Pendiente,
|
||||
Outstanding Amt,Saldo Pendiente,
|
||||
{0} does not have a Healthcare Practitioner Schedule. Add it in Healthcare Practitioner master,{0} no tiene agenda del profesional médico . Asígnele al médico,
|
||||
Chart of Accounts,Plan de Cuentas,
|
||||
Other details,Otros Detalles,
|
||||
Other Settings,Otros Ajustes,
|
||||
Lead Time Date,Fecha de la Iniciativa,
|
||||
|
|
@ -1,87 +1,44 @@
|
||||
apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js,Please set the Item Code first,"Por favor, primero define el Código del Artículo"
|
||||
DocType: Program Enrollment,School House,Casa Escuela
|
||||
apps/erpnext/erpnext/hr/doctype/vehicle_log/vehicle_log.py,"Service Item,Type,frequency and expense amount are required","El Artículo de Servico, el Tipo, la Frecuencia y la Cantidad de Gasto son requeridos"
|
||||
DocType: Delivery Note,% Installed,% Instalado
|
||||
apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py,Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,"Sólo Solicitudes de Permiso con estado ""Aprobado"" y ""Rechazado"" puede ser presentado"
|
||||
DocType: Salary Structure,Leave Encashment Amount Per Day,Cantidad por día para pago por Ausencia
|
||||
apps/erpnext/erpnext/stock/dashboard/item_dashboard.js,Source and target warehouse must be different,El almacén de origen y el de destino deben ser diferentes
|
||||
DocType: Item,"Example: ABCD.#####. If series is set and Batch No is not mentioned in transactions, then automatic batch number will be created based on this series. If you always want to explicitly mention Batch No for this item, leave this blank. Note: this setting will take priority over the Naming Series Prefix in Stock Settings.","Ejemplo: ABCD.#####. Si se establece una serie y no se especifica un número de lote en las transacciones, se creará un número de lote automático basado en esta serie. Si quiere especificar el número de lote para este artículo en cada transacción, déjelo en blanco. Nota: esta configuración tendrá prioridad sobre el prefijo de la Serie en Configuración de Inventario."
|
||||
apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py,The amount of {0} set in this payment request is different from the calculated amount of all payment plans: {1}. Make sure this is correct before submitting the document.,La cantidad de {0} establecida en esta solicitud de pago es diferente de la cantidad calculada para todos los planes de pago: {1}. Verifique que esto sea correcto antes de enviar el documento.
|
||||
DocType: Lab Test Template,Standard Selling Rate,Tarifa de Venta Estándar
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,"Material Request not created, as quantity for Raw Materials already available.","La Requisición de Material no fue creada, debido a que hay suficiente materia prima disponible."
|
||||
DocType: Subscription Plan,Payment Plan,Plan de pago
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js,Select Items based on Delivery Date,Seleccionar Artículos según la fecha de entrega
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,PO already created for all sales order items,Ya existe una Orden de Compra para todos los artículos de la Órden de Venta
|
||||
DocType: Currency Exchange,Specify Exchange Rate to convert one currency into another,Especificar el Tipo de Cambio para convertir de una divisa a otra
|
||||
DocType: Education Settings,"For Batch based Student Group, the Student Batch will be validated for every Student from the Program Enrollment.","Para grupo de estudiantes por lotes, el lote de estudiantes se validará para cada estudiante de la inscripción del programa."
|
||||
DocType: Timesheet,Total Costing Amount,Monto Total Calculado
|
||||
DocType: Education Settings,"For Course based Student Group, the Course will be validated for every Student from the enrolled Courses in Program Enrollment.","Para Grupo de Estudiantes por Curso, el Curso será validado para cada Estudiante de los Cursos inscritos en la Inscripción del Programa."
|
||||
apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.js,Show Salary Slip,Mostrar Recibo de Nómina
|
||||
apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py,The payment gateway account in plan {0} is different from the payment gateway account in this payment request,La cuenta para pasarela de pago en el plan {0} es diferente de la cuenta de pasarela de pago en en esta petición de pago
|
||||
apps/erpnext/erpnext/selling/doctype/pos_closing_voucher/closing_voucher_details.html,Mode of Payments,Forma de pago
|
||||
DocType: Loyalty Point Entry,Loyalty Point Entry,Entrada de Punto de Lealtad
|
||||
DocType: Leave Policy Detail,Leave Policy Detail,Detalles de política de Licencia
|
||||
apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py,Please enter Account for Change Amount,"Por favor, introduzca la Vuenta para el Cambio Monto"
|
||||
DocType: Purchase Taxes and Charges Template,"Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like ""Shipping"", ""Insurance"", ""Handling"" etc.
|
||||
|
||||
#### Note
|
||||
|
||||
The tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.
|
||||
|
||||
#### Description of Columns
|
||||
|
||||
1. Calculation Type:
|
||||
- This can be on **Net Total** (that is the sum of basic amount).
|
||||
- **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.
|
||||
- **Actual** (as mentioned).
|
||||
2. Account Head: The Account ledger under which this tax will be booked
|
||||
3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.
|
||||
4. Description: Description of the tax (that will be printed in invoices / quotes).
|
||||
5. Rate: Tax rate.
|
||||
6. Amount: Tax amount.
|
||||
7. Total: Cumulative total to this point.
|
||||
8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).
|
||||
9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.
|
||||
10. Add or Deduct: Whether you want to add or deduct the tax.","Plantilla de impuestos que puede aplicarse a todas las operaciones de compra. Esta plantilla puede contener un listado de cuentas de impuestos así como también de otras cuentas de gastos como ""Envío"", ""Seguros"", ""Manejo"", etc.
|
||||
|
||||
#### Nota
|
||||
|
||||
La tasa impositiva que se defina aquí será la tasa de gravamen predeterminada para todos los **Productos**. Si existen **Productos** con diferentes tasas, estas deben ser añadidas a la tabla de **Impuestos del Producto ** dentro del maestro del **Producto**.
|
||||
|
||||
#### Descripción de las Columnas
|
||||
|
||||
1. Tipo de Cálculo:
|
||||
- Este puede ser **Sobre el total neto** (que es la suma de la cantidad básica).
|
||||
- **Sobre la línea anterior total / importe** (para impuestos o cargos acumulados). Si selecciona esta opción, el impuesto se aplica como un porcentaje de la cantidad o total de la fila anterior (de la tabla de impuestos).
|
||||
- **Actual** (como se haya capturado).
|
||||
2. Encabezado de cuenta: La cuenta mayor sobre la que se registrara este gravamen.
|
||||
3. Centro de Costo: Si el impuesto / cargo es un ingreso (como en un envío) o un gasto, debe ser registrado contra un centro de costos.
|
||||
4. Descripción: Descripción del impuesto (que se imprimirán en facturas / cotizaciones).
|
||||
5. Rate: Tasa de impuesto.
|
||||
6. Monto: Monto de impuesto.
|
||||
7. Total: Total acumulado hasta este punto.
|
||||
8. Línea de referencia: Si se basa en ""Línea anterior al total"" se puede seleccionar el número de la fila que será tomado como base para este cálculo (por defecto es la fila anterior).
|
||||
9. Considerar impuesto o cargo para: En esta sección se puede especificar si el impuesto / cargo es sólo para la valoración (no una parte del total) o sólo para el total (no agrega valor al elemento) o para ambos.
|
||||
10. Añadir o deducir: Si usted quiere añadir o deducir el impuesto."
|
||||
DocType: Company,Gain/Loss Account on Asset Disposal,Cuenta de ganancia/pérdida en la disposición de activos
|
||||
apps/erpnext/erpnext/healthcare/doctype/clinical_procedure/clinical_procedure.js,Stock quantity to start procedure is not available in the warehouse. Do you want to record a Stock Transfer,La cantidad de existencias para comenzar el procedimiento no está disponible en el almacén. ¿Desea registrar una transferencia de inventario?
|
||||
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',"Por favor, establezca el filtro de Compañía en blanco si Agrupar Por es 'Compañía'"
|
||||
,Support Hour Distribution,Distribución de Hora de Soporte
|
||||
apps/erpnext/erpnext/education/report/student_batch_wise_attendance/student_batch_wise_attendance.py,Student Group Strength,Fortaleza de Grupo Estudiante
|
||||
DocType: Leave Encashment,Leave Encashment,Cobro de Permiso
|
||||
DocType: Student Group Student,Student Group Student,Alumno de Grupo de Estudiantes
|
||||
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Gain/Loss on Asset Disposal,Ganancia/Pérdida por la venta de activos
|
||||
apps/erpnext/erpnext/education/doctype/assessment_result/assessment_result.js,Score cannot be greater than Maximum Score,Los resultados no puede ser mayor que la Puntuación Máxima
|
||||
apps/erpnext/erpnext/stock/doctype/item/item.py,Cannot change Variant properties after stock transaction. You will have to make a new Item to do this.,No se pueden cambiar las propiedades de Variantes después de la transacción de inventario. Deberá crear un nuevo artículo para hacer esto.
|
||||
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Leave Type {0} cannot be carry-forwarded,Tipo de Permiso {0} no se puede arrastar o trasladar
|
||||
apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py,Please set default account in Expense Claim Type {0},"Por favor, establezca la Cuenta predeterminada en el Tipo de Reembolso de Gastos {0}"
|
||||
DocType: Leave Policy,Leave Policy Details,Detalles de Política de Licencia
|
||||
apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.js,"Company, Payment Account, From Date and To Date is mandatory","Empresa, cuenta de pago, fecha de inicio y fecha final son obligatorios"
|
||||
DocType: Loyalty Point Entry,Loyalty Program,Programa de Lealtad
|
||||
DocType: Stock Entry,Customer or Supplier Details,Detalle de cliente o proveedor
|
||||
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Gross Purchase Amount is mandatory,El Importe Bruto de Compra es obligatorio
|
||||
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Leave Type {0} cannot be allocated since it is leave without pay,Tipo de Permiso {0} no puede ser asignado ya que es un Permiso sin paga
|
||||
apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py,Leave Without Pay does not match with approved Leave Application records,Permiso sin sueldo no coincide con los registros de Solicitud de Permiso aprobadas
|
||||
DocType: Item,Asset Naming Series,Numeración para Activos
|
||||
apps/erpnext/erpnext/assets/doctype/asset/depreciation.py,Please set 'Gain/Loss Account on Asset Disposal' in Company {0},Por favor defina la 'Cuenta de Ganacia/Pérdida por Ventas de Activos' en la empresa {0}
|
||||
apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js,Show unclosed fiscal year's P&L balances,Mostrar saldos de Ganancias y Perdidas de año fiscal sin cerrar
|
||||
Cannot change Variant properties after stock transaction. You will have to make a new Item to do this.,No se pueden cambiar las propiedades de Variantes después de la transacción de inventario. Deberá crear un nuevo artículo para hacer esto.,
|
||||
Cash Flow Statement,Estado de Flujo de Efectivo,
|
||||
Chart of Cost Centers,Gráfico de Centro de costos,
|
||||
"Company, Payment Account, From Date and To Date is mandatory","Empresa, cuenta de pago, fecha de inicio y fecha final son obligatorios",
|
||||
Financial Statements,Estados Financieros,
|
||||
Gain/Loss on Asset Disposal,Ganancia/Pérdida por la venta de activos,
|
||||
Gross Purchase Amount is mandatory,El Importe Bruto de Compra es obligatorio,
|
||||
Leave Encashment,Cobro de Permiso,
|
||||
Leave Type {0} cannot be allocated since it is leave without pay,Tipo de Permiso {0} no puede ser asignado ya que es un Permiso sin paga,
|
||||
Leave Type {0} cannot be carry-forwarded,Tipo de Permiso {0} no se puede arrastar o trasladar,
|
||||
Loyalty Point Entry,Entrada de Punto de Lealtad,
|
||||
Loyalty Program,Programa de Lealtad,
|
||||
"Material Request not created, as quantity for Raw Materials already available.","La Requisición de Material no fue creada, debido a que hay suficiente materia prima disponible.",
|
||||
Mode of Payments,Forma de pago,
|
||||
Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,"Sólo Solicitudes de Permiso con estado ""Aprobado"" y ""Rechazado"" puede ser presentado",
|
||||
PO already created for all sales order items,Ya existe una Orden de Compra para todos los artículos de la Órden de Venta,
|
||||
Please enter Account for Change Amount,"Por favor, introduzca la Vuenta para el Cambio Monto",
|
||||
Please set 'Gain/Loss Account on Asset Disposal' in Company {0},Por favor defina la 'Cuenta de Ganacia/Pérdida por Ventas de Activos' en la empresa {0},
|
||||
Please set Company filter blank if Group By is 'Company',"Por favor, establezca el filtro de Compañía en blanco si Agrupar Por es 'Compañía'",
|
||||
Please set the Item Code first,"Por favor, primero define el Código del Artículo",
|
||||
Score cannot be greater than Maximum Score,Los resultados no puede ser mayor que la Puntuación Máxima,
|
||||
Select Items based on Delivery Date,Seleccionar Artículos según la fecha de entrega,
|
||||
Show Salary Slip,Mostrar Recibo de Nómina,
|
||||
Show unclosed fiscal year's P&L balances,Mostrar saldos de Ganancias y Perdidas de año fiscal sin cerrar,
|
||||
Source and target warehouse must be different,El almacén de origen y el de destino deben ser diferentes,
|
||||
Student Group Strength,Fortaleza de Grupo Estudiante,
|
||||
The amount of {0} set in this payment request is different from the calculated amount of all payment plans: {1}. Make sure this is correct before submitting the document.,La cantidad de {0} establecida en esta solicitud de pago es diferente de la cantidad calculada para todos los planes de pago: {1}. Verifique que esto sea correcto antes de enviar el documento.,
|
||||
The payment gateway account in plan {0} is different from the payment gateway account in this payment request,La cuenta para pasarela de pago en el plan {0} es diferente de la cuenta de pasarela de pago en en esta petición de pago,
|
||||
"Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like ""Shipping"", ""Insurance"", ""Handling"" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.\n10. Add or Deduct: Whether you want to add or deduct the tax.","Plantilla de impuestos que puede aplicarse a todas las operaciones de compra. Esta plantilla puede contener un listado de cuentas de impuestos así como también de otras cuentas de gastos como ""Envío"", ""Seguros"", ""Manejo"", etc. \n\n #### Nota \n\nLa tasa impositiva que se defina aquí será la tasa de gravamen predeterminada para todos los **Productos**. Si existen **Productos** con diferentes tasas, estas deben ser añadidas a la tabla de **Impuestos del Producto ** dentro del maestro del **Producto**.\n\n #### Descripción de las Columnas \n\n 1. Tipo de Cálculo: \n - Este puede ser **Sobre el total neto** (que es la suma de la cantidad básica).\n - **Sobre la línea anterior total / importe** (para impuestos o cargos acumulados). Si selecciona esta opción, el impuesto se aplica como un porcentaje de la cantidad o total de la fila anterior (de la tabla de impuestos).\n - **Actual** (como se haya capturado).\n 2. Encabezado de cuenta: La cuenta mayor sobre la que se registrara este gravamen. \n 3. Centro de Costo: Si el impuesto / cargo es un ingreso (como en un envío) o un gasto, debe ser registrado contra un centro de costos.\n 4. Descripción: Descripción del impuesto (que se imprimirán en facturas / cotizaciones).\n 5. Rate: Tasa de impuesto.\n 6. Monto: Monto de impuesto.\n 7. Total: Total acumulado hasta este punto.\n 8. Línea de referencia: Si se basa en ""Línea anterior al total"" se puede seleccionar el número de la fila que será tomado como base para este cálculo (por defecto es la fila anterior).\n 9. Considerar impuesto o cargo para: En esta sección se puede especificar si el impuesto / cargo es sólo para la valoración (no una parte del total) o sólo para el total (no agrega valor al elemento) o para ambos.\n 10. Añadir o deducir: Si usted quiere añadir o deducir el impuesto.",
|
||||
Payment Plan,Plan de pago,
|
||||
"For Batch based Student Group, the Student Batch will be validated for every Student from the Program Enrollment.","Para grupo de estudiantes por lotes, el lote de estudiantes se validará para cada estudiante de la inscripción del programa.",
|
||||
"For Course based Student Group, the Course will be validated for every Student from the enrolled Courses in Program Enrollment.","Para Grupo de Estudiantes por Curso, el Curso será validado para cada Estudiante de los Cursos inscritos en la Inscripción del Programa.",
|
||||
School House,Casa Escuela,
|
||||
Student Group Student,Alumno de Grupo de Estudiantes,
|
||||
Leave Policy Details,Detalles de Política de Licencia,
|
||||
Leave Policy Detail,Detalles de política de Licencia,
|
||||
Leave Encashment Amount Per Day,Cantidad por día para pago por Ausencia,
|
||||
Total Costing Amount,Monto Total Calculado,
|
||||
Gain/Loss Account on Asset Disposal,Cuenta de ganancia/pérdida en la disposición de activos,
|
||||
Specify Exchange Rate to convert one currency into another,Especificar el Tipo de Cambio para convertir de una divisa a otra,
|
||||
Standard Selling Rate,Tarifa de Venta Estándar,
|
||||
Asset Naming Series,Numeración para Activos,
|
||||
"Example: ABCD.#####. If series is set and Batch No is not mentioned in transactions, then automatic batch number will be created based on this series. If you always want to explicitly mention Batch No for this item, leave this blank. Note: this setting will take priority over the Naming Series Prefix in Stock Settings.","Ejemplo: ABCD.#####. Si se establece una serie y no se especifica un número de lote en las transacciones, se creará un número de lote automático basado en esta serie. Si quiere especificar el número de lote para este artículo en cada transacción, déjelo en blanco. Nota: esta configuración tendrá prioridad sobre el prefijo de la Serie en Configuración de Inventario.",
|
||||
Support Hour Distribution,Distribución de Hora de Soporte,
|
||||
|
|
@ -1,16 +1,17 @@
|
||||
DocType: Tax Rule,Tax Rule,Regla Fiscal
|
||||
DocType: POS Profile,Account for Change Amount,Cuenta para el Cambio de Monto
|
||||
apps/erpnext/erpnext/stock/doctype/material_request/material_request.js,Bill of Materials,Lista de Materiales
|
||||
apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py,'Update Stock' cannot be checked for fixed asset sale,"""Actualización de Existencia' no puede ser escogida para venta de activo fijo"
|
||||
DocType: Purchase Invoice,Tax ID,RUC
|
||||
DocType: BOM Item,Basic Rate (Company Currency),Taza Base (Divisa de la Empresa)
|
||||
DocType: Timesheet Detail,Bill,Factura
|
||||
DocType: Activity Cost,Billing Rate,Monto de Facturación
|
||||
apps/erpnext/erpnext/config/help.py,Opening Accounting Balance,Apertura de Saldos Contables
|
||||
apps/erpnext/erpnext/accounts/doctype/tax_rule/tax_rule.py,Tax Rule Conflicts with {0},Regla Fiscal en conflicto con {0}
|
||||
DocType: Tax Rule,Billing County,Municipio de Facturación
|
||||
DocType: Sales Invoice Timesheet,Billing Hours,Horas de Facturación
|
||||
DocType: Timesheet,Billing Details,Detalles de Facturación
|
||||
DocType: Tax Rule,Billing State,Región de Facturación
|
||||
DocType: Purchase Order Item,Billed Amt,Monto Facturado
|
||||
DocType: Item Tax Template Detail,Tax Rate,Tasa de Impuesto
|
||||
'Update Stock' cannot be checked for fixed asset sale,"""Actualización de Existencia' no puede ser escogida para venta de activo fijo",
|
||||
Bill,Factura,
|
||||
Bill of Materials,Lista de Materiales,
|
||||
Opening Accounting Balance,Apertura de Saldos Contables,
|
||||
Tax ID,RUC,
|
||||
Tax Rate,Tasa de Impuesto,
|
||||
Tax Rule Conflicts with {0},Regla Fiscal en conflicto con {0},
|
||||
Tax Id,RUC,
|
||||
Account for Change Amount,Cuenta para el Cambio de Monto,
|
||||
Billing Hours,Horas de Facturación,
|
||||
Tax Rule,Regla Fiscal,
|
||||
Billing County,Municipio de Facturación,
|
||||
Billing State,Región de Facturación,
|
||||
Billed Amt,Monto Facturado,
|
||||
Basic Rate (Company Currency),Taza Base (Divisa de la Empresa),
|
||||
Billing Rate,Monto de Facturación,
|
||||
Billing Details,Detalles de Facturación,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,14 +1,14 @@
|
||||
DocType: Production Plan Item,Ordered Qty,Quantité commandée
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Cost Center {2} does not belong to Company {3},{0} {1}: Le Centre de Coûts {2} ne fait pas partie de la Société {3}
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Either debit or credit amount is required for {2},{0} {1}: Soit un montant au débit ou crédit est nécessaire pour {2}
|
||||
DocType: Purchase Invoice Item,Price List Rate (Company Currency),Taux de la Liste de Prix (Devise de la Compagnie)
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Customer is required against Receivable account {2},{0} {1}: Client est requis envers un compte à recevoir {2}
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Accounting Entry for {2} can only be made in currency: {3},{0} {1}: L'entrée comptable pour {2} ne peut être faite qu'en devise: {3}
|
||||
DocType: Purchase Invoice Item,Price List Rate,Taux de la Liste de Prix
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Supplier is required against Payable account {2},{0} {1}: Fournisseur est requis envers un compte à payer {2}
|
||||
DocType: Stock Settings,Auto insert Price List rate if missing,Insertion automatique du taux à la Liste de Prix si manquant
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Account {2} does not belong to Company {3},{0} {1}: Le compte {2} ne fait pas partie de la Société {3}
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry,{0} {1}: Le compte {2} de type 'Profit et Perte' n'est pas admis dans une Entrée d'Ouverture
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Account {2} is inactive,{0} {1}: Le compte {2} est inactif
|
||||
DocType: Journal Entry,Difference (Dr - Cr),Différence (Dt - Ct )
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py,{0} {1}: Account {2} cannot be a Group,{0} {1}: Le compte {2} ne peut pas être un Groupe
|
||||
Ordered Qty,Quantité commandée,
|
||||
Price List Rate,Taux de la Liste de Prix,
|
||||
{0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry,{0} {1}: Le compte {2} de type 'Profit et Perte' n'est pas admis dans une Entrée d'Ouverture,
|
||||
{0} {1}: Account {2} cannot be a Group,{0} {1}: Le compte {2} ne peut pas être un Groupe,
|
||||
{0} {1}: Account {2} does not belong to Company {3},{0} {1}: Le compte {2} ne fait pas partie de la Société {3},
|
||||
{0} {1}: Account {2} is inactive,{0} {1}: Le compte {2} est inactif,
|
||||
{0} {1}: Accounting Entry for {2} can only be made in currency: {3},{0} {1}: L'entrée comptable pour {2} ne peut être faite qu'en devise: {3},
|
||||
{0} {1}: Cost Center {2} does not belong to Company {3},{0} {1}: Le Centre de Coûts {2} ne fait pas partie de la Société {3},
|
||||
{0} {1}: Customer is required against Receivable account {2},{0} {1}: Client est requis envers un compte à recevoir {2},
|
||||
{0} {1}: Either debit or credit amount is required for {2},{0} {1}: Soit un montant au débit ou crédit est nécessaire pour {2},
|
||||
{0} {1}: Supplier is required against Payable account {2},{0} {1}: Fournisseur est requis envers un compte à payer {2},
|
||||
Difference (Dr - Cr),Différence (Dt - Ct ),
|
||||
Price List Rate (Company Currency),Taux de la Liste de Prix (Devise de la Compagnie),
|
||||
Auto insert Price List rate if missing,Insertion automatique du taux à la Liste de Prix si manquant,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,6 @@
|
||||
apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py,{0} {1} is not submitted,{0} {1} Ntiremezwa
|
||||
apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html,'Total','Byose'
|
||||
apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py,{0} {1} must be submitted,{0} {1} Isabwe Kwemezwa
|
||||
DocType: POS Profile,[Select],[Hitamo]
|
||||
'Total','Byose',
|
||||
{0} is mandatory,{0} ningombwa,
|
||||
{0} {1} is not submitted,{0} {1} Ntiremezwa,
|
||||
{0} {1} must be submitted,{0} {1} Isabwe Kwemezwa,
|
||||
{0} is required,{0} ningombwa,
|
||||
[Select],[Hitamo],
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user