Merge branch 'staging-fixes' into staging
This commit is contained in:
commit
6647ea270c
@ -5,7 +5,7 @@ import frappe
|
|||||||
from erpnext.hooks import regional_overrides
|
from erpnext.hooks import regional_overrides
|
||||||
from frappe.utils import getdate
|
from frappe.utils import getdate
|
||||||
|
|
||||||
__version__ = '10.1.71'
|
__version__ = '10.1.72'
|
||||||
|
|
||||||
def get_default_company(user=None):
|
def get_default_company(user=None):
|
||||||
'''Get default company for user'''
|
'''Get default company for user'''
|
||||||
|
@ -11,11 +11,17 @@ from erpnext.stock.get_item_details import get_item_details
|
|||||||
from frappe import MandatoryError
|
from frappe import MandatoryError
|
||||||
|
|
||||||
class TestPricingRule(unittest.TestCase):
|
class TestPricingRule(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
frappe.db.sql("delete from `tabPricing Rule`")
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
frappe.db.sql("delete from `tabPricing Rule`")
|
||||||
|
|
||||||
def test_pricing_rule_for_discount(self):
|
def test_pricing_rule_for_discount(self):
|
||||||
from erpnext.stock.get_item_details import get_item_details
|
from erpnext.stock.get_item_details import get_item_details
|
||||||
from frappe import MandatoryError
|
from frappe import MandatoryError
|
||||||
|
|
||||||
frappe.db.sql("delete from `tabPricing Rule`")
|
|
||||||
|
|
||||||
test_record = {
|
test_record = {
|
||||||
"doctype": "Pricing Rule",
|
"doctype": "Pricing Rule",
|
||||||
@ -89,14 +95,10 @@ class TestPricingRule(unittest.TestCase):
|
|||||||
details = get_item_details(args)
|
details = get_item_details(args)
|
||||||
self.assertEqual(details.get("discount_percentage"), 15)
|
self.assertEqual(details.get("discount_percentage"), 15)
|
||||||
|
|
||||||
frappe.db.sql("delete from `tabPricing Rule`")
|
|
||||||
|
|
||||||
def test_pricing_rule_for_margin(self):
|
def test_pricing_rule_for_margin(self):
|
||||||
from erpnext.stock.get_item_details import get_item_details
|
from erpnext.stock.get_item_details import get_item_details
|
||||||
from frappe import MandatoryError
|
from frappe import MandatoryError
|
||||||
|
|
||||||
frappe.db.sql("delete from `tabPricing Rule`")
|
|
||||||
|
|
||||||
test_record = {
|
test_record = {
|
||||||
"doctype": "Pricing Rule",
|
"doctype": "Pricing Rule",
|
||||||
"title": "_Test Pricing Rule",
|
"title": "_Test Pricing Rule",
|
||||||
@ -111,14 +113,14 @@ class TestPricingRule(unittest.TestCase):
|
|||||||
"company": "_Test Company"
|
"company": "_Test Company"
|
||||||
}
|
}
|
||||||
frappe.get_doc(test_record.copy()).insert()
|
frappe.get_doc(test_record.copy()).insert()
|
||||||
|
|
||||||
item_price = frappe.get_doc({
|
item_price = frappe.get_doc({
|
||||||
"doctype": "Item Price",
|
"doctype": "Item Price",
|
||||||
"price_list": "_Test Price List 2",
|
"price_list": "_Test Price List 2",
|
||||||
"item_code": "_Test FG Item 2",
|
"item_code": "_Test FG Item 2",
|
||||||
"price_list_rate": 100
|
"price_list_rate": 100
|
||||||
})
|
})
|
||||||
|
|
||||||
item_price.insert(ignore_permissions=True)
|
item_price.insert(ignore_permissions=True)
|
||||||
|
|
||||||
args = frappe._dict({
|
args = frappe._dict({
|
||||||
@ -138,14 +140,10 @@ class TestPricingRule(unittest.TestCase):
|
|||||||
self.assertEqual(details.get("margin_type"), "Percentage")
|
self.assertEqual(details.get("margin_type"), "Percentage")
|
||||||
self.assertEqual(details.get("margin_rate_or_amount"), 10)
|
self.assertEqual(details.get("margin_rate_or_amount"), 10)
|
||||||
|
|
||||||
frappe.db.sql("delete from `tabPricing Rule`")
|
|
||||||
|
|
||||||
def test_pricing_rule_for_variants(self):
|
def test_pricing_rule_for_variants(self):
|
||||||
from erpnext.stock.get_item_details import get_item_details
|
from erpnext.stock.get_item_details import get_item_details
|
||||||
from frappe import MandatoryError
|
from frappe import MandatoryError
|
||||||
|
|
||||||
frappe.db.sql("delete from `tabPricing Rule`")
|
|
||||||
|
|
||||||
if not frappe.db.exists("Item", "Test Variant PRT"):
|
if not frappe.db.exists("Item", "Test Variant PRT"):
|
||||||
frappe.get_doc({
|
frappe.get_doc({
|
||||||
"doctype": "Item",
|
"doctype": "Item",
|
||||||
@ -213,8 +211,6 @@ class TestPricingRule(unittest.TestCase):
|
|||||||
self.assertEqual(details.get("discount_percentage"), 17.5)
|
self.assertEqual(details.get("discount_percentage"), 17.5)
|
||||||
|
|
||||||
def test_pricing_rule_for_stock_qty(self):
|
def test_pricing_rule_for_stock_qty(self):
|
||||||
frappe.db.sql("delete from `tabPricing Rule`")
|
|
||||||
|
|
||||||
test_record = {
|
test_record = {
|
||||||
"doctype": "Pricing Rule",
|
"doctype": "Pricing Rule",
|
||||||
"title": "_Test Pricing Rule",
|
"title": "_Test Pricing Rule",
|
||||||
@ -257,25 +253,19 @@ class TestPricingRule(unittest.TestCase):
|
|||||||
self.assertEqual(so.items[0].rate, 100)
|
self.assertEqual(so.items[0].rate, 100)
|
||||||
|
|
||||||
def test_pricing_rule_with_margin_and_discount(self):
|
def test_pricing_rule_with_margin_and_discount(self):
|
||||||
frappe.delete_doc_if_exists('Pricing Rule', '_Test Pricing Rule')
|
make_pricing_rule(selling=1, margin_type="Percentage", margin_rate_or_amount=10, discount_percentage=10)
|
||||||
make_pricing_rule(selling=1, margin_type="Percentage", margin_rate_or_amount=10)
|
|
||||||
si = create_sales_invoice(do_not_save=True)
|
si = create_sales_invoice(do_not_save=True)
|
||||||
si.items[0].price_list_rate = 1000
|
si.items[0].price_list_rate = 1000
|
||||||
si.payment_schedule = []
|
si.payment_schedule = []
|
||||||
si.insert(ignore_permissions=True)
|
si.insert(ignore_permissions=True)
|
||||||
|
|
||||||
item = si.items[0]
|
item = si.items[0]
|
||||||
self.assertEqual(item.rate, 1100)
|
|
||||||
self.assertEqual(item.margin_rate_or_amount, 10)
|
self.assertEqual(item.margin_rate_or_amount, 10)
|
||||||
|
self.assertEqual(item.rate_with_margin, 1100)
|
||||||
# With discount
|
|
||||||
item.discount_percentage = 10
|
|
||||||
si.payment_schedule = []
|
|
||||||
si.save()
|
|
||||||
item = si.items[0]
|
|
||||||
self.assertEqual(item.rate, 990)
|
|
||||||
self.assertEqual(item.discount_percentage, 10)
|
self.assertEqual(item.discount_percentage, 10)
|
||||||
frappe.db.sql("delete from `tabPricing Rule`")
|
self.assertEqual(item.discount_amount, 110)
|
||||||
|
self.assertEqual(item.rate, 990)
|
||||||
|
|
||||||
|
|
||||||
def make_pricing_rule(**args):
|
def make_pricing_rule(**args):
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
|
@ -42,6 +42,13 @@ frappe.query_reports["Consolidated Financial Statement"] = {
|
|||||||
"default": "Balance Sheet",
|
"default": "Balance Sheet",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "presentation_currency",
|
||||||
|
"label": __("Currency"),
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"options": erpnext.get_presentation_currency_list(),
|
||||||
|
"default": frappe.defaults.get_user_default("Currency")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldname":"accumulated_in_group_company",
|
"fieldname":"accumulated_in_group_company",
|
||||||
"label": __("Accumulated Values in Group Company"),
|
"label": __("Accumulated Values in Group Company"),
|
||||||
|
@ -5,6 +5,7 @@ from __future__ import unicode_literals
|
|||||||
import frappe, erpnext
|
import frappe, erpnext
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import flt, cint
|
from frappe.utils import flt, cint
|
||||||
|
from erpnext.accounts.report.utils import get_currency, convert_to_presentation_currency
|
||||||
from erpnext.accounts.report.financial_statements import get_fiscal_year_data, sort_accounts
|
from erpnext.accounts.report.financial_statements import get_fiscal_year_data, sort_accounts
|
||||||
from erpnext.accounts.report.balance_sheet.balance_sheet import (get_provisional_profit_loss,
|
from erpnext.accounts.report.balance_sheet.balance_sheet import (get_provisional_profit_loss,
|
||||||
check_opening_balance, get_chart_data)
|
check_opening_balance, get_chart_data)
|
||||||
@ -48,7 +49,7 @@ def get_balance_sheet_data(fiscal_year, companies, columns, filters):
|
|||||||
data.extend(liability or [])
|
data.extend(liability or [])
|
||||||
data.extend(equity or [])
|
data.extend(equity or [])
|
||||||
|
|
||||||
company_currency = frappe.db.get_value("Company", filters.company, "default_currency")
|
company_currency = get_company_currency(filters)
|
||||||
provisional_profit_loss, total_credit = get_provisional_profit_loss(asset, liability, equity,
|
provisional_profit_loss, total_credit = get_provisional_profit_loss(asset, liability, equity,
|
||||||
companies, filters.get('company'), company_currency, True)
|
companies, filters.get('company'), company_currency, True)
|
||||||
|
|
||||||
@ -59,7 +60,7 @@ def get_balance_sheet_data(fiscal_year, companies, columns, filters):
|
|||||||
"account_name": "'" + _("Unclosed Fiscal Years Profit / Loss (Credit)") + "'",
|
"account_name": "'" + _("Unclosed Fiscal Years Profit / Loss (Credit)") + "'",
|
||||||
"account": "'" + _("Unclosed Fiscal Years Profit / Loss (Credit)") + "'",
|
"account": "'" + _("Unclosed Fiscal Years Profit / Loss (Credit)") + "'",
|
||||||
"warn_if_negative": True,
|
"warn_if_negative": True,
|
||||||
"currency": frappe.get_cached_value('Company', filters.company, "default_currency")
|
"currency": company_currency
|
||||||
}
|
}
|
||||||
for company in companies:
|
for company in companies:
|
||||||
unclosed[company] = opening_balance
|
unclosed[company] = opening_balance
|
||||||
@ -92,7 +93,7 @@ def get_profit_loss_data(fiscal_year, companies, columns, filters):
|
|||||||
return data, None, chart
|
return data, None, chart
|
||||||
|
|
||||||
def get_income_expense_data(companies, fiscal_year, filters):
|
def get_income_expense_data(companies, fiscal_year, filters):
|
||||||
company_currency = frappe.get_cached_value('Company', filters.company, "default_currency")
|
company_currency = get_company_currency(filters)
|
||||||
income = get_data(companies, "Income", "Credit", fiscal_year, filters, True)
|
income = get_data(companies, "Income", "Credit", fiscal_year, filters, True)
|
||||||
|
|
||||||
expense = get_data(companies, "Expense", "Debit", fiscal_year, filters, True)
|
expense = get_data(companies, "Expense", "Debit", fiscal_year, filters, True)
|
||||||
@ -107,7 +108,7 @@ def get_cash_flow_data(fiscal_year, companies, filters):
|
|||||||
income, expense, net_profit_loss = get_income_expense_data(companies, fiscal_year, filters)
|
income, expense, net_profit_loss = get_income_expense_data(companies, fiscal_year, filters)
|
||||||
|
|
||||||
data = []
|
data = []
|
||||||
company_currency = frappe.get_cached_value('Company', filters.company, "default_currency")
|
company_currency = get_company_currency(filters)
|
||||||
|
|
||||||
for cash_flow_account in cash_flow_accounts:
|
for cash_flow_account in cash_flow_accounts:
|
||||||
section_data = []
|
section_data = []
|
||||||
@ -185,6 +186,7 @@ def get_columns(companies):
|
|||||||
"fieldname": company,
|
"fieldname": company,
|
||||||
"label": company,
|
"label": company,
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
|
"options": "currency",
|
||||||
"width": 150
|
"width": 150
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -216,7 +218,8 @@ def get_data(companies, root_type, balance_must_be, fiscal_year, filters=None, i
|
|||||||
return out
|
return out
|
||||||
|
|
||||||
def get_company_currency(filters=None):
|
def get_company_currency(filters=None):
|
||||||
return frappe.get_cached_value('Company', filters.get('company'), "default_currency")
|
return (filters.get('presentation_currency')
|
||||||
|
or frappe.get_cached_value('Company', filters.company, "default_currency"))
|
||||||
|
|
||||||
def calculate_values(accounts_by_name, gl_entries_by_account, companies, fiscal_year, filters):
|
def calculate_values(accounts_by_name, gl_entries_by_account, companies, fiscal_year, filters):
|
||||||
for entries in gl_entries_by_account.values():
|
for entries in gl_entries_by_account.values():
|
||||||
@ -328,28 +331,42 @@ def set_gl_entries_by_account(from_date, to_date, root_lft, root_rgt, filters, g
|
|||||||
filters.get('company'), ["lft", "rgt"])
|
filters.get('company'), ["lft", "rgt"])
|
||||||
|
|
||||||
additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters)
|
additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters)
|
||||||
|
companies = frappe.db.sql(""" select name, default_currency from `tabCompany`
|
||||||
gl_entries = frappe.db.sql("""select gl.posting_date, gl.account, gl.debit, gl.credit, gl.is_opening, gl.company,
|
where lft >= %(company_lft)s and rgt <= %(company_rgt)s""", {
|
||||||
gl.fiscal_year, gl.debit_in_account_currency, gl.credit_in_account_currency, gl.account_currency,
|
|
||||||
acc.account_name, acc.account_number
|
|
||||||
from `tabGL Entry` gl, `tabAccount` acc where acc.name = gl.account and gl.company in
|
|
||||||
(select name from `tabCompany` where lft >= %(company_lft)s and rgt <= %(company_rgt)s)
|
|
||||||
{additional_conditions} and gl.posting_date <= %(to_date)s and acc.lft >= %(lft)s and acc.rgt <= %(rgt)s
|
|
||||||
order by gl.account, gl.posting_date""".format(additional_conditions=additional_conditions),
|
|
||||||
{
|
|
||||||
"from_date": from_date,
|
|
||||||
"to_date": to_date,
|
|
||||||
"lft": root_lft,
|
|
||||||
"rgt": root_rgt,
|
|
||||||
"company_lft": company_lft,
|
"company_lft": company_lft,
|
||||||
"company_rgt": company_rgt,
|
"company_rgt": company_rgt,
|
||||||
},
|
}, as_dict=1)
|
||||||
as_dict=True)
|
|
||||||
|
|
||||||
for entry in gl_entries:
|
currency_info = frappe._dict({
|
||||||
key = entry.account_number or entry.account_name
|
'report_date': to_date,
|
||||||
validate_entries(key, entry, accounts_by_name)
|
'presentation_currency': filters.get('presentation_currency')
|
||||||
gl_entries_by_account.setdefault(key, []).append(entry)
|
})
|
||||||
|
|
||||||
|
for d in companies:
|
||||||
|
gl_entries = frappe.db.sql("""select gl.posting_date, gl.account, gl.debit, gl.credit, gl.is_opening, gl.company,
|
||||||
|
gl.fiscal_year, gl.debit_in_account_currency, gl.credit_in_account_currency, gl.account_currency,
|
||||||
|
acc.account_name, acc.account_number
|
||||||
|
from `tabGL Entry` gl, `tabAccount` acc where acc.name = gl.account and gl.company = %(company)s
|
||||||
|
{additional_conditions} and gl.posting_date <= %(to_date)s and acc.lft >= %(lft)s and acc.rgt <= %(rgt)s
|
||||||
|
order by gl.account, gl.posting_date""".format(additional_conditions=additional_conditions),
|
||||||
|
{
|
||||||
|
"from_date": from_date,
|
||||||
|
"to_date": to_date,
|
||||||
|
"lft": root_lft,
|
||||||
|
"rgt": root_rgt,
|
||||||
|
"company": d.name
|
||||||
|
},
|
||||||
|
as_dict=True)
|
||||||
|
|
||||||
|
if filters and filters.get('presentation_currency') != d.default_currency:
|
||||||
|
currency_info['company'] = d.name
|
||||||
|
currency_info['company_currency'] = d.default_currency
|
||||||
|
convert_to_presentation_currency(gl_entries, currency_info)
|
||||||
|
|
||||||
|
for entry in gl_entries:
|
||||||
|
key = entry.account_number or entry.account_name
|
||||||
|
validate_entries(key, entry, accounts_by_name)
|
||||||
|
gl_entries_by_account.setdefault(key, []).append(entry)
|
||||||
|
|
||||||
return gl_entries_by_account
|
return gl_entries_by_account
|
||||||
|
|
||||||
|
@ -65,12 +65,13 @@ class calculate_taxes_and_totals(object):
|
|||||||
|
|
||||||
if item.doctype in ['Quotation Item', 'Sales Order Item', 'Delivery Note Item', 'Sales Invoice Item']:
|
if item.doctype in ['Quotation Item', 'Sales Order Item', 'Delivery Note Item', 'Sales Invoice Item']:
|
||||||
item.rate_with_margin, item.base_rate_with_margin = self.calculate_margin(item)
|
item.rate_with_margin, item.base_rate_with_margin = self.calculate_margin(item)
|
||||||
|
if flt(item.rate_with_margin) > 0:
|
||||||
item.rate = flt(item.rate_with_margin * (1.0 - (item.discount_percentage / 100.0)), item.precision("rate"))\
|
item.rate = flt(item.rate_with_margin * (1.0 - (item.discount_percentage / 100.0)), item.precision("rate"))
|
||||||
if item.rate_with_margin > 0 else item.rate
|
item.discount_amount = item.rate_with_margin - item.rate
|
||||||
|
elif flt(item.price_list_rate) > 0:
|
||||||
|
item.discount_amount = item.price_list_rate - item.rate
|
||||||
|
|
||||||
item.net_rate = item.rate
|
item.net_rate = item.rate
|
||||||
item.discount_amount = item.price_list_rate - item.rate
|
|
||||||
item.amount = flt(item.rate * item.qty, item.precision("amount"))
|
item.amount = flt(item.rate * item.qty, item.precision("amount"))
|
||||||
item.net_amount = item.amount
|
item.net_amount = item.amount
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ app_license = "GNU General Public License (v3)"
|
|||||||
source_link = "https://github.com/frappe/erpnext"
|
source_link = "https://github.com/frappe/erpnext"
|
||||||
|
|
||||||
develop_version = '12.x.x-develop'
|
develop_version = '12.x.x-develop'
|
||||||
staging_version = '11.0.3-beta.22'
|
staging_version = '11.0.3-beta.23'
|
||||||
|
|
||||||
error_report_email = "support@erpnext.com"
|
error_report_email = "support@erpnext.com"
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ class EmployeeAdvanceOverPayment(frappe.ValidationError):
|
|||||||
|
|
||||||
class EmployeeAdvance(Document):
|
class EmployeeAdvance(Document):
|
||||||
def onload(self):
|
def onload(self):
|
||||||
self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value('Accounts Settings',
|
self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value('Accounts Settings',
|
||||||
'make_payment_via_journal_entry')
|
'make_payment_via_journal_entry')
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
@ -47,7 +47,7 @@ class EmployeeAdvance(Document):
|
|||||||
paid_amount = frappe.db.sql("""
|
paid_amount = frappe.db.sql("""
|
||||||
select ifnull(sum(debit_in_account_currency), 0) as paid_amount
|
select ifnull(sum(debit_in_account_currency), 0) as paid_amount
|
||||||
from `tabGL Entry`
|
from `tabGL Entry`
|
||||||
where against_voucher_type = 'Employee Advance'
|
where against_voucher_type = 'Employee Advance'
|
||||||
and against_voucher = %s
|
and against_voucher = %s
|
||||||
and party_type = 'Employee'
|
and party_type = 'Employee'
|
||||||
and party = %s
|
and party = %s
|
||||||
@ -67,7 +67,7 @@ class EmployeeAdvance(Document):
|
|||||||
select sum(ifnull(allocated_amount, 0))
|
select sum(ifnull(allocated_amount, 0))
|
||||||
from `tabExpense Claim Advance`
|
from `tabExpense Claim Advance`
|
||||||
where employee_advance = %s and docstatus=1 and allocated_amount > 0
|
where employee_advance = %s and docstatus=1 and allocated_amount > 0
|
||||||
""", self.name)[0][0]
|
""", self.name)[0][0] or 0
|
||||||
|
|
||||||
if claimed_amount:
|
if claimed_amount:
|
||||||
frappe.db.set_value("Employee Advance", self.name, "claimed_amount", flt(claimed_amount))
|
frappe.db.set_value("Employee Advance", self.name, "claimed_amount", flt(claimed_amount))
|
||||||
|
@ -36,8 +36,8 @@ def execute():
|
|||||||
where dt_item.name in ({rows_name})
|
where dt_item.name in ({rows_name})
|
||||||
""".format(dt=dt, rows_name=", ".join(['%s']*len(transaction_rows_name))), tuple(transaction_rows_name))
|
""".format(dt=dt, rows_name=", ".join(['%s']*len(transaction_rows_name))), tuple(transaction_rows_name))
|
||||||
|
|
||||||
for t in transactions:
|
parent = set([d.name for d in transactions])
|
||||||
print(t.name)
|
for t in list(parent):
|
||||||
trans_doc = frappe.get_doc(dt, t.name)
|
trans_doc = frappe.get_doc(dt, t)
|
||||||
hsnwise_tax = get_itemised_tax_breakup_html(trans_doc)
|
hsnwise_tax = get_itemised_tax_breakup_html(trans_doc)
|
||||||
frappe.db.set_value(dt, t.name, "other_charges_calculation", hsnwise_tax, update_modified=False)
|
frappe.db.set_value(dt, t, "other_charges_calculation", hsnwise_tax, update_modified=False)
|
@ -13,8 +13,8 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
|
|||||||
+ flt(effective_item_rate) * ( flt(item.margin_rate_or_amount) / 100);
|
+ flt(effective_item_rate) * ( flt(item.margin_rate_or_amount) / 100);
|
||||||
} else {
|
} else {
|
||||||
item.rate_with_margin = flt(effective_item_rate) + flt(item.margin_rate_or_amount);
|
item.rate_with_margin = flt(effective_item_rate) + flt(item.margin_rate_or_amount);
|
||||||
item.base_rate_with_margin = flt(item.rate_with_margin) * flt(this.frm.doc.conversion_rate);
|
|
||||||
}
|
}
|
||||||
|
item.base_rate_with_margin = flt(item.rate_with_margin) * flt(this.frm.doc.conversion_rate);
|
||||||
|
|
||||||
item.rate = flt(item.rate_with_margin , precision("rate", item));
|
item.rate = flt(item.rate_with_margin , precision("rate", item));
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
|||||||
item.margin_rate_or_amount = 0;
|
item.margin_rate_or_amount = 0;
|
||||||
item.rate_with_margin = 0;
|
item.rate_with_margin = 0;
|
||||||
}
|
}
|
||||||
|
item.base_rate_with_margin = item.rate_with_margin * flt(this.frm.doc.conversion_rate);
|
||||||
|
|
||||||
cur_frm.cscript.set_gross_profit(item);
|
cur_frm.cscript.set_gross_profit(item);
|
||||||
cur_frm.cscript.calculate_taxes_and_totals();
|
cur_frm.cscript.calculate_taxes_and_totals();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_events_in_timeline": 0,
|
||||||
"allow_guest_to_view": 0,
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
@ -15,6 +16,7 @@
|
|||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -38,13 +40,15 @@
|
|||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 1,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 1
|
"unique": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_in_quick_entry": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -72,6 +76,7 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
|
"translatable": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -85,7 +90,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-12-10 20:55:23.814039",
|
"modified": "2018-11-13 06:03:09.814357",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Item Barcode",
|
"name": "Item Barcode",
|
||||||
@ -99,5 +104,6 @@
|
|||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 0
|
"track_seen": 0,
|
||||||
|
"track_views": 0
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user