Merge pull request #14108 from ESS-LLP/tax_deduction
Variable tax deduction
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
old mode 100644
new mode 100755
index c07b851..2146ace
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -1051,6 +1051,7 @@
item_name: obj.name === obj.item_name ? "" : obj.item_name,
item_image: obj.image,
item_stock: __('Stock Qty') + ": " + me.get_actual_qty(obj),
+ item_uom: obj.stock_uom,
color: frappe.get_palette(obj.item_name),
abbr: frappe.get_abbr(obj.item_name)
})).tooltip().appendTo($wrap);
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 88e7f78..658107b 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -82,7 +82,7 @@
}
if (frm.doc.status != 'Fully Depreciated') {
frm.add_custom_button(__("Asset Adjustment"), function() {
- frm.trigger("create_asset_maintenance");
+ frm.trigger("create_asset_adjustment");
}, __("Make"));
}
@@ -233,6 +233,22 @@
})
},
+ create_asset_adjustment: function(frm) {
+ frappe.call({
+ args: {
+ "asset": frm.doc.name,
+ "asset_category": frm.doc.asset_category,
+ "company": frm.doc.company
+ },
+ method: "erpnext.assets.doctype.asset.asset.create_asset_adjustment",
+ freeze: 1,
+ callback: function(r) {
+ var doclist = frappe.model.sync(r.message);
+ frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
+ }
+ })
+ },
+
calculate_depreciation: function(frm) {
frappe.db.get_value("Asset Settings", {'name':"Asset Settings"}, 'schedule_based_on_fiscal_year', (data) => {
if (data.schedule_based_on_fiscal_year == 1) {
@@ -329,6 +345,42 @@
"reqd": 1
},
{
+ "label": __("Select Serial No"),
+ "fieldname": "serial_nos",
+ "fieldtype": "Link",
+ "options": "Serial No",
+ "get_query": function () {
+ return {
+ filters: {
+ 'asset': frm.doc.name
+ }
+ }
+ },
+ "onchange": function() {
+ let val = this.get_value();
+ if (val) {
+ let serial_nos = dialog.get_value("serial_no") || val;
+ if (serial_nos) {
+ serial_nos = serial_nos.split('\n');
+ serial_nos.push(val);
+
+ const unique_sn = serial_nos.filter(function(elem, index, self) {
+ return index === self.indexOf(elem);
+ });
+
+ dialog.set_value("serial_no", unique_sn.join('\n'));
+ dialog.set_value("serial_nos", "");
+ }
+ }
+ }
+ },
+ {
+ "label": __("Serial No"),
+ "fieldname": "serial_no",
+ "read_only": 1,
+ "fieldtype": "Small Text"
+ },
+ {
"label": __("Date"),
"fieldname": "transfer_date",
"fieldtype": "Datetime",
@@ -349,8 +401,9 @@
args: {
"asset": frm.doc.name,
"transaction_date": args.transfer_date,
- "source_warehouse": frm.doc.location,
- "target_warehouse": args.target_location,
+ "source_location": frm.doc.location,
+ "target_location": args.target_location,
+ "serial_no": args.serial_no,
"company": frm.doc.company
}
},
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 75e8088..1069db6 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -422,9 +422,23 @@
return asset_maintenance
@frappe.whitelist()
+def create_asset_adjustment(asset, asset_category, company):
+ asset_maintenance = frappe.new_doc("Asset Adjustment")
+ asset_maintenance.update({
+ "asset": asset,
+ "company": company,
+ "asset_category": asset_category
+ })
+ return asset_maintenance
+
+@frappe.whitelist()
def transfer_asset(args):
import json
args = json.loads(args)
+
+ if args.get('serial_no'):
+ args['quantity'] = len(args.get('serial_no').split('\n'))
+
movement_entry = frappe.new_doc("Asset Movement")
movement_entry.update(args)
movement_entry.insert()
diff --git a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.js b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.js
index 11c02e1..346a2f1 100644
--- a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.js
+++ b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.js
@@ -2,6 +2,18 @@
// For license information, please see license.txt
frappe.ui.form.on('Asset Adjustment', {
+ setup: function(frm) {
+ frm.add_fetch('company', 'cost_center', 'cost_center');
+ frm.set_query('cost_center', function() {
+ return {
+ filters: {
+ company: frm.doc.company,
+ is_group: 0
+ }
+ }
+ });
+ },
+
asset: function(frm) {
frm.trigger("set_current_asset_value");
},
@@ -11,7 +23,6 @@
},
set_current_asset_value: function(frm) {
- debugger
if (frm.doc.finance_book && frm.doc.asset) {
frm.call({
method: "erpnext.assets.doctype.asset_adjustment.asset_adjustment.get_current_asset_value",
diff --git a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.json b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.json
index faa36ef..3f4f77c 100644
--- a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.json
+++ b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.json
@@ -41,6 +41,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -72,6 +73,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -103,6 +105,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -134,6 +137,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -165,6 +169,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -194,6 +199,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -203,7 +209,7 @@
"collapsible": 0,
"columns": 0,
"fieldname": "date",
- "fieldtype": "Datetime",
+ "fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
@@ -224,6 +230,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -254,6 +261,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -284,6 +292,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -314,6 +323,39 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "cost_center",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Cost Center",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Cost Center",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
"unique": 0
},
{
@@ -344,6 +386,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
+ "translatable": 0,
"unique": 0
}
],
@@ -357,7 +400,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-05-11 21:45:03.459696",
+ "modified": "2018-05-17 11:12:38.110774",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Adjustment",
@@ -366,7 +409,6 @@
"permissions": [
{
"amend": 1,
- "apply_user_permissions": 0,
"cancel": 1,
"create": 1,
"delete": 1,
@@ -386,7 +428,6 @@
},
{
"amend": 1,
- "apply_user_permissions": 0,
"cancel": 1,
"create": 1,
"delete": 1,
@@ -406,7 +447,6 @@
},
{
"amend": 1,
- "apply_user_permissions": 0,
"cancel": 1,
"create": 1,
"delete": 1,
diff --git a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.py b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.py
index 6b4b752..af806e4 100644
--- a/erpnext/assets/doctype/asset_adjustment/asset_adjustment.py
+++ b/erpnext/assets/doctype/asset_adjustment/asset_adjustment.py
@@ -16,12 +16,14 @@
def on_submit(self):
self.make_depreciation_entry()
- self.reschedule_depreciations()
+ self.reschedule_depreciations(self.new_asset_value)
def on_cancel(self):
if self.journal_entry:
frappe.throw(_("Cancel the journal entry {0} first").format(self.journal_entry))
+ self.reschedule_depreciations(self.current_asset_value)
+
def set_difference_amount(self):
self.difference_amount = flt(self.current_asset_value - self.new_asset_value)
@@ -47,12 +49,13 @@
je.append("accounts", {
"account": accumulated_depreciation_account,
"credit_in_account_currency": self.difference_amount,
+ "cost_center": depreciation_cost_center or self.cost_center
})
je.append("accounts", {
"account": depreciation_expense_account,
"debit_in_account_currency": self.difference_amount,
- "cost_center": depreciation_cost_center
+ "cost_center": depreciation_cost_center or self.cost_center
})
je.flags.ignore_permissions = True
@@ -60,11 +63,11 @@
self.db_set("journal_entry", je.name)
- def reschedule_depreciations(self):
+ def reschedule_depreciations(self, asset_value):
asset = frappe.get_doc('Asset', self.asset)
for d in asset.finance_books:
- d.value_after_depreciation = self.new_asset_value
+ d.value_after_depreciation = asset_value
if d.depreciation_method in ("Straight Line", "Manual"):
end_date = max([s.schedule_date for s in asset.schedules if cint(s.finance_book_id) == d.idx])
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index b68f24a..adab972 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -635,8 +635,8 @@
frappe.throw(_("Row #{0}: Asset {1} does not linked to Item {2}")
.format(d.idx, d.asset, d.item_code))
- elif asset.docstatus != 1:
- frappe.throw(_("Row #{0}: Asset {1} must be submitted").format(d.idx, d.asset))
+ # elif asset.docstatus != 1:
+# frappe.throw(_("Row #{0}: Asset {1} must be submitted").format(d.idx, d.asset))
elif self.doctype == "Purchase Invoice":
# if asset.status != "Submitted":
diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.py b/erpnext/hr/doctype/employee_transfer/employee_transfer.py
index b58d334..6cdd22f 100644
--- a/erpnext/hr/doctype/employee_transfer/employee_transfer.py
+++ b/erpnext/hr/doctype/employee_transfer/employee_transfer.py
@@ -14,7 +14,7 @@
if frappe.get_value("Employee", self.employee, "status") == "Left":
frappe.throw(_("Cannot transfer Employee with status Left"))
if self.new_company and self.company == self.new_company:
- frappe.throw_("New Company must be different from current company")
+ frappe.throw(_("New Company must be different from current company"))
def before_submit(self):
if getdate(self.transfer_date) > getdate():
diff --git a/erpnext/public/js/pos/pos_item.html b/erpnext/public/js/pos/pos_item.html
old mode 100644
new mode 100755
index f6ef5a4..52f3cf6
--- a/erpnext/public/js/pos/pos_item.html
+++ b/erpnext/public/js/pos/pos_item.html
@@ -25,7 +25,7 @@
{% } %}
</div>
<span class="price-info">
- {{item_price}}
+ {{item_price}} / {{item_uom}}
</span>
</a>
</div>