diff --git a/erpnext/accounts/doctype/journal_entry/test_records.json b/erpnext/accounts/doctype/journal_entry/test_records.json index 5077305cf22..73777d4008c 100644 --- a/erpnext/accounts/doctype/journal_entry/test_records.json +++ b/erpnext/accounts/doctype/journal_entry/test_records.json @@ -81,7 +81,6 @@ }, { "account": "Sales - _TC", - "cost_center": "_Test Cost Center - _TC", "credit_in_account_currency": 400.0, "debit_in_account_currency": 0.0, "doctype": "Journal Entry Account", diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index 4c7b2534fcc..35c3828d5b9 100755 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -737,7 +737,7 @@ erpnext.utils.map_current_doc = function(opts) { }, callback: function(r) { if(!r.exc) { - var doc = frappe.model.sync(r.message); + frappe.model.sync(r.message); cur_frm.dirty(); cur_frm.refresh(); } @@ -764,6 +764,11 @@ erpnext.utils.map_current_doc = function(opts) { target: opts.target, date_field: opts.date_field || undefined, setters: opts.setters, + data_fields: [{ + fieldname: 'merge_taxes', + fieldtype: 'Check', + label: __('Merge taxes from multiple documents'), + }], get_query: opts.get_query, add_filters_group: 1, allow_child_item_selection: opts.allow_child_item_selection, @@ -777,10 +782,7 @@ erpnext.utils.map_current_doc = function(opts) { return; } opts.source_name = values; - if (opts.allow_child_item_selection) { - // args contains filtered child docnames - opts.args = args; - } + opts.args = args; d.dialog.hide(); _map(); }, diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index f35dc136990..032e2fec822 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -970,8 +970,39 @@ def get_item_wise_returned_qty(pr_doc): ) +def merge_taxes(source_taxes, target_doc): + from erpnext.accounts.doctype.pos_invoice_merge_log.pos_invoice_merge_log import ( + update_item_wise_tax_detail, + ) + + existing_taxes = target_doc.get("taxes") or [] + idx = 1 + for tax in source_taxes: + found = False + for t in existing_taxes: + if t.account_head == tax.account_head and t.cost_center == tax.cost_center: + t.tax_amount = flt(t.tax_amount) + flt(tax.tax_amount_after_discount_amount) + t.base_tax_amount = flt(t.base_tax_amount) + flt(tax.base_tax_amount_after_discount_amount) + update_item_wise_tax_detail(t, tax) + found = True + + if not found: + tax.charge_type = "Actual" + tax.idx = idx + idx += 1 + tax.included_in_print_rate = 0 + tax.dont_recompute_tax = 1 + tax.row_id = "" + tax.tax_amount = tax.tax_amount_after_discount_amount + tax.base_tax_amount = tax.base_tax_amount_after_discount_amount + tax.item_wise_tax_detail = tax.item_wise_tax_detail + existing_taxes.append(tax) + + target_doc.set("taxes", existing_taxes) + + @frappe.whitelist() -def make_purchase_invoice(source_name, target_doc=None): +def make_purchase_invoice(source_name, target_doc=None, args=None): from erpnext.accounts.party import get_payment_terms_template doc = frappe.get_doc("Purchase Receipt", source_name) @@ -988,6 +1019,10 @@ def make_purchase_invoice(source_name, target_doc=None): ) doc.run_method("onload") doc.run_method("set_missing_values") + + if args and args.get("merge_taxes"): + merge_taxes(source.get("taxes") or [], doc) + doc.run_method("calculate_taxes_and_totals") doc.set_payment_schedule() @@ -1051,7 +1086,11 @@ def make_purchase_invoice(source_name, target_doc=None): if not doc.get("is_return") else get_pending_qty(d)[0] > 0, }, - "Purchase Taxes and Charges": {"doctype": "Purchase Taxes and Charges", "add_if_empty": True}, + "Purchase Taxes and Charges": { + "doctype": "Purchase Taxes and Charges", + "add_if_empty": True, + "ignore": args.get("merge_taxes") if args else 0, + }, }, target_doc, set_missing_values,