Merge branch 'staging-fixes' of https://github.com/frappe/erpnext.git into Item-Tax-Template
# Conflicts:
# erpnext/patches.txt
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index bfdf451..d28dc93 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -206,6 +206,10 @@
stock_not_billed_account = self.get_company_default("stock_received_but_not_billed")
stock_items = self.get_stock_items()
+ asset_items = [d.is_fixed_asset for d in self.items if d.is_fixed_asset]
+ if len(asset_items) > 0:
+ asset_received_but_not_billed = self.get_company_default("asset_received_but_not_billed")
+
if self.update_stock:
self.validate_item_code()
self.validate_warehouse()
@@ -226,7 +230,8 @@
item.expense_account = warehouse_account[item.warehouse]["account"]
else:
item.expense_account = stock_not_billed_account
-
+ elif item.is_fixed_asset and d.pr_detail:
+ item.expense_account = asset_received_but_not_billed
elif not item.expense_account and for_validate:
throw(_("Expense account is mandatory for item {0}").format(item.item_code or item.item_name))
@@ -360,7 +365,10 @@
def get_gl_entries(self, warehouse_account=None):
self.auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
- self.stock_received_but_not_billed = self.get_company_default("stock_received_but_not_billed")
+ if self.auto_accounting_for_stock:
+ self.stock_received_but_not_billed = self.get_company_default("stock_received_but_not_billed")
+ else:
+ self.stock_received_but_not_billed = None
self.expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
self.negative_expense_to_be_booked = 0.0
gl_entries = []
diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
index 1ec0abc..13424db 100644
--- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
+++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
@@ -35,16 +35,22 @@
def get_entries(filters):
conditions = get_conditions(filters)
- journal_entries = frappe.db.sql("""select "Journal Entry", jv.name, jv.posting_date,
- jv.cheque_no, jv.clearance_date, jvd.against_account, (jvd.debit - jvd.credit)
- from `tabJournal Entry Account` jvd, `tabJournal Entry` jv
- where jvd.parent = jv.name and jv.docstatus=1 and jvd.account = %(account)s {0}
- order by posting_date DESC, jv.name DESC""".format(conditions), filters, as_list=1)
+ journal_entries = frappe.db.sql("""SELECT
+ "Journal Entry", jv.name, jv.posting_date, jv.cheque_no, jv.clearance_date, jvd.against_account,
+ if((jvd.debit - jvd.credit) < 0, (jvd.debit - jvd.credit) * -1, (jvd.debit - jvd.credit))
+ FROM
+ `tabJournal Entry Account` jvd, `tabJournal Entry` jv
+ WHERE
+ jvd.parent = jv.name and jv.docstatus=1 and jvd.account = %(account)s {0}
+ order by posting_date DESC, jv.name DESC""".format(conditions), filters, as_list=1)
- payment_entries = frappe.db.sql("""select "Payment Entry", name, posting_date,
- reference_no, clearance_date, party, if(paid_from=%(account)s, paid_amount, received_amount)
- from `tabPayment Entry`
- where docstatus=1 and (paid_from = %(account)s or paid_to = %(account)s) {0}
- order by posting_date DESC, name DESC""".format(conditions), filters, as_list=1)
+ payment_entries = frappe.db.sql("""SELECT
+ "Payment Entry", name, posting_date, reference_no, clearance_date, party,
+ if(paid_from=%(account)s, paid_amount, received_amount)
+ FROM
+ `tabPayment Entry`
+ WHERE
+ docstatus=1 and (paid_from = %(account)s or paid_to = %(account)s) {0}
+ order by posting_date DESC, name DESC""".format(conditions), filters, as_list=1)
return sorted(journal_entries + payment_entries, key=lambda k: k[2] or getdate(nowdate()))
\ No newline at end of file
diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py
index d855873..65629d2 100644
--- a/erpnext/assets/doctype/asset/test_asset.py
+++ b/erpnext/assets/doctype/asset/test_asset.py
@@ -9,6 +9,7 @@
from erpnext.assets.doctype.asset.depreciation import post_depreciation_entries, scrap_asset, restore_asset
from erpnext.assets.doctype.asset.asset import make_sales_invoice, make_purchase_invoice
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
+from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice as make_invoice
class TestAsset(unittest.TestCase):
def setUp(self):
@@ -494,6 +495,15 @@
self.assertEqual(gle, expected_gle)
+ def test_expense_head(self):
+ pr = make_purchase_receipt(item_code="Macbook Pro",
+ qty=2, rate=200000.0, location="Test Location")
+
+ doc = make_invoice(pr.name)
+
+ self.assertEquals('Asset Received But Not Billed - _TC', doc.items[0].expense_account)
+
+
def create_asset_data():
if not frappe.db.exists("Asset Category", "Computers"):
create_asset_category()
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 513270f..e26d9fb 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -604,13 +604,14 @@
advance.account_currency)
if advance.account_currency == self.currency:
- order_total = self.grand_total
- formatted_order_total = fmt_money(order_total, precision=self.precision("grand_total"),
- currency=advance.account_currency)
+ order_total = self.get("rounded_total") or self.grand_total
+ precision = "rounded_total" if self.get("rounded_total") else "grand_total"
else:
- order_total = self.base_grand_total
- formatted_order_total = fmt_money(order_total, precision=self.precision("base_grand_total"),
- currency=advance.account_currency)
+ order_total = self.get("base_rounded_total") or self.base_grand_total
+ precision = "base_rounded_total" if self.get("base_rounded_total") else "base_grand_total"
+
+ formatted_order_total = fmt_money(order_total, precision=self.precision(precision),
+ currency=advance.account_currency)
if self.currency == self.company_currency and advance_paid > order_total:
frappe.throw(_("Total advance ({0}) against Order {1} cannot be greater than the Grand Total ({2})")
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 3ab6752..bf7e32a 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -12,7 +12,7 @@
source_link = "https://github.com/frappe/erpnext"
develop_version = '12.x.x-develop'
-staging_version = '11.0.3-beta.33'
+staging_version = '11.0.3-beta.34'
error_report_email = "support@erpnext.com"
diff --git a/erpnext/hr/utils.py b/erpnext/hr/utils.py
index f35eb59..0226201 100644
--- a/erpnext/hr/utils.py
+++ b/erpnext/hr/utils.py
@@ -54,6 +54,9 @@
where parenttype='User' and role=%s''', activity.role)
users = users + user_list
+ if "Administrator" in users:
+ users.remove("Administrator")
+
# assign the task the users
if users:
self.assign_task_to_users(task, set(users))
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
old mode 100755
new mode 100644
index 917176a..bd4ed3e
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -581,3 +581,4 @@
erpnext.patches.v11_0.set_missing_gst_hsn_code
erpnext.patches.v11_0.rename_bom_wo_fields
erpnext.patches.v11_0.move_item_tax_to_item_tax_template
+erpnext.patches.v11_0.rename_additional_salary_component_additional_salary
diff --git a/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py b/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py
new file mode 100644
index 0000000..8fa876d
--- /dev/null
+++ b/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py
@@ -0,0 +1,10 @@
+import frappe
+
+# this patch should have been included with this PR https://github.com/frappe/erpnext/pull/14302
+
+def execute():
+ if frappe.db.table_exists("Additional Salary Component"):
+ if not frappe.db.table_exists("Additional Salary"):
+ frappe.rename_doc("DocType", "Additional Salary Component", "Additional Salary")
+
+ frappe.delete_doc('DocType', "Additional Salary Component")
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 04b270f..f86be14 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -283,7 +283,7 @@
out.conversion_factor = 1.0
else:
out.conversion_factor = args.conversion_factor or \
- get_conversion_factor(item.item_code, args.uom).get("conversion_factor") or 1.0
+ get_conversion_factor(item.item_code, args.uom).get("conversion_factor")
args.conversion_factor = out.conversion_factor
out.stock_qty = out.qty * out.conversion_factor
@@ -706,7 +706,7 @@
if not conversion_factor:
stock_uom = frappe.db.get_value("Item", item_code, "stock_uom")
conversion_factor = get_uom_conv_factor(uom, stock_uom)
- return {"conversion_factor": conversion_factor}
+ return {"conversion_factor": conversion_factor or 1.0}
@frappe.whitelist()
def get_projected_qty(item_code, warehouse):