Merge branch 'master' into staging-fixes

This commit is contained in:
Frappe Bot 2018-12-06 09:26:42 +00:00
commit ee5d7e6d0f
10 changed files with 27 additions and 19 deletions

View File

@ -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.73' __version__ = '10.1.74'
def get_default_company(user=None): def get_default_company(user=None):
'''Get default company for user''' '''Get default company for user'''

View File

@ -70,12 +70,14 @@ class PeriodClosingVoucher(AccountsController):
net_pl_balance += flt(acc.balance_in_company_currency) net_pl_balance += flt(acc.balance_in_company_currency)
if net_pl_balance: if net_pl_balance:
cost_center = frappe.db.get_value("Company", self.company, "cost_center")
gl_entries.append(self.get_gl_dict({ gl_entries.append(self.get_gl_dict({
"account": self.closing_account_head, "account": self.closing_account_head,
"debit_in_account_currency": abs(net_pl_balance) if net_pl_balance > 0 else 0, "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, "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_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 "credit": abs(net_pl_balance) if net_pl_balance < 0 else 0,
"cost_center": cost_center
})) }))
from erpnext.accounts.general_ledger import make_gl_entries from erpnext.accounts.general_ledger import make_gl_entries

View File

@ -72,6 +72,7 @@ class TestPeriodClosingVoucher(unittest.TestCase):
"company": "_Test Company", "company": "_Test Company",
"fiscal_year": get_fiscal_year(today(), company="_Test Company")[0], "fiscal_year": get_fiscal_year(today(), company="_Test Company")[0],
"posting_date": today(), "posting_date": today(),
"cost_center": "_Test Cost Center - _TC",
"remarks": "test" "remarks": "test"
}) })
pcv.insert() pcv.insert()

View File

@ -21,8 +21,6 @@ class TestPricingRule(unittest.TestCase):
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
test_record = { test_record = {
"doctype": "Pricing Rule", "doctype": "Pricing Rule",
"title": "_Test Pricing Rule", "title": "_Test Pricing Rule",
@ -93,7 +91,7 @@ class TestPricingRule(unittest.TestCase):
args.item_code = "_Test Item 2" args.item_code = "_Test Item 2"
details = get_item_details(args) details = get_item_details(args)
self.assertEqual(details.get("discount_percentage"), 15) self.assertEquals(details.get("discount_percentage"), 15)
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
@ -137,8 +135,8 @@ class TestPricingRule(unittest.TestCase):
"name": None "name": None
}) })
details = get_item_details(args) details = get_item_details(args)
self.assertEqual(details.get("margin_type"), "Percentage") self.assertEquals(details.get("margin_type"), "Percentage")
self.assertEqual(details.get("margin_rate_or_amount"), 10) self.assertEquals(details.get("margin_rate_or_amount"), 10)
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
@ -253,6 +251,7 @@ 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, discount_percentage=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
@ -260,12 +259,11 @@ class TestPricingRule(unittest.TestCase):
si.insert(ignore_permissions=True) si.insert(ignore_permissions=True)
item = si.items[0] item = si.items[0]
self.assertEqual(item.margin_rate_or_amount, 10) self.assertEquals(item.margin_rate_or_amount, 10)
self.assertEqual(item.rate_with_margin, 1100) self.assertEquals(item.rate_with_margin, 1100)
self.assertEqual(item.discount_percentage, 10) self.assertEqual(item.discount_percentage, 10)
self.assertEqual(item.discount_amount, 110) self.assertEquals(item.discount_amount, 110)
self.assertEqual(item.rate, 990) self.assertEquals(item.rate, 990)
def make_pricing_rule(**args): def make_pricing_rule(**args):
args = frappe._dict(args) args = frappe._dict(args)
@ -295,4 +293,4 @@ def make_pricing_rule(**args):
applicable_for = doc.applicable_for.replace(' ', '_').lower() applicable_for = doc.applicable_for.replace(' ', '_').lower()
if args.get(applicable_for): if args.get(applicable_for):
doc.db_set(applicable_for, args.get(applicable_for)) doc.db_set(applicable_for, args.get(applicable_for))

View File

@ -65,6 +65,7 @@ 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: 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"))
item.discount_amount = item.rate_with_margin - item.rate item.discount_amount = item.rate_with_margin - item.rate
@ -647,4 +648,4 @@ def get_rounded_tax_amount(itemised_tax, precision):
# Rounding based on tax_amount precision # Rounding based on tax_amount precision
for taxes in itemised_tax.values(): for taxes in itemised_tax.values():
for tax_account in taxes: for tax_account in taxes:
taxes[tax_account]["tax_amount"] = flt(taxes[tax_account]["tax_amount"], precision) taxes[tax_account]["tax_amount"] = flt(taxes[tax_account]["tax_amount"], precision)

View File

@ -38,6 +38,12 @@ frappe.ui.form.on("Assessment Result", {
frappe.ui.form.on("Assessment Result Detail", { frappe.ui.form.on("Assessment Result Detail", {
score: function(frm, cdt, cdn) { score: function(frm, cdt, cdn) {
var d = locals[cdt][cdn]; var d = locals[cdt][cdn];
if(!d.maximum_score || !frm.doc.grading_scale) {
d.score = "";
frappe.throw(__("Please fill in all the details to generate Assessment Result."));
}
if (d.score > d.maximum_score) { if (d.score > d.maximum_score) {
frappe.throw(__("Score cannot be greater than Maximum Score")); frappe.throw(__("Score cannot be greater than Maximum Score"));
} }

View File

@ -320,7 +320,7 @@ frappe.ui.form.ItemQuickEntryForm = frappe.ui.form.QuickEntryForm.extend({
["attribute_value", "like", e.target.value + "%"] ["attribute_value", "like", e.target.value + "%"]
], ],
fields: ["attribute_value"], fields: ["attribute_value"],
parent: "Item" parent: "Item Attribute"
}, },
callback: function(r) { callback: function(r) {
if (r.message) { if (r.message) {

View File

@ -513,7 +513,7 @@ $.extend(erpnext.item, {
fields: ["attribute_value"], fields: ["attribute_value"],
limit_start: 0, limit_start: 0,
limit_page_length: 500, limit_page_length: 500,
parent: "Item", parent: "Item Attribute",
order_by: "idx" order_by: "idx"
} }
}).then((r) => { }).then((r) => {
@ -651,7 +651,7 @@ $.extend(erpnext.item, {
frappe.call({ frappe.call({
method:"erpnext.stock.doctype.item.item.get_item_attribute", method:"erpnext.stock.doctype.item.item.get_item_attribute",
args:{ args:{
parent: i, parent: "Item Attribute",
attribute_value: term attribute_value: term
}, },
callback: function(r) { callback: function(r) {

View File

@ -181,7 +181,7 @@ class StockReconciliation(StockController):
frappe.throw(_("Valuation Rate required for Item in row {0}").format(row.idx)) frappe.throw(_("Valuation Rate required for Item in row {0}").format(row.idx))
if ((previous_sle and row.qty == previous_sle.get("qty_after_transaction") if ((previous_sle and row.qty == previous_sle.get("qty_after_transaction")
and row.valuation_rate == previous_sle.get("valuation_rate")) and (row.valuation_rate == previous_sle.get("valuation_rate") or row.qty == 0))
or (not previous_sle and not row.qty)): or (not previous_sle and not row.qty)):
continue continue

View File

@ -178,7 +178,7 @@ class update_entries_after(object):
# rounding as per precision # rounding as per precision
self.stock_value = flt(self.stock_value, self.precision) self.stock_value = flt(self.stock_value, self.precision)
if self.prev_stock_value < 0 and self.stock_value >= 0: if self.prev_stock_value < 0 and self.stock_value >= 0 and sle.voucher_type != 'Stock Reconciliation':
stock_value_difference = sle.actual_qty * self.valuation_rate stock_value_difference = sle.actual_qty * self.valuation_rate
else: else:
stock_value_difference = self.stock_value - self.prev_stock_value stock_value_difference = self.stock_value - self.prev_stock_value