Skip to content

Commit

Permalink
feat: Merge taxes from mapped docs
Browse files Browse the repository at this point in the history
  • Loading branch information
deepeshgarg007 committed Nov 26, 2023
1 parent 477d9fa commit d94a94b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 7 deletions.
12 changes: 7 additions & 5 deletions erpnext/public/js/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -843,7 +843,7 @@ erpnext.utils.map_current_doc = function(opts) {
freeze_message: __("Mapping {0} ...", [opts.source_doctype]),
callback: function(r) {
if(!r.exc) {
var doc = frappe.model.sync(r.message);
frappe.model.sync(r.message);
cur_frm.dirty();
cur_frm.refresh();
}
Expand All @@ -870,6 +870,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,
Expand All @@ -883,10 +888,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();
},
Expand Down
43 changes: 41 additions & 2 deletions erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
Original file line number Diff line number Diff line change
Expand Up @@ -1009,8 +1009,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)
Expand All @@ -1027,6 +1058,10 @@ def set_missing_values(source, target):
)
doc.run_method("onload")
doc.run_method("set_missing_values")

if args.get("merge_taxes"):
merge_taxes(source.get("taxes") or [], doc)

doc.run_method("calculate_taxes_and_totals")
doc.set_payment_schedule()

Expand Down Expand Up @@ -1090,7 +1125,11 @@ def get_pending_qty(item_row):
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"),
},
},
target_doc,
set_missing_values,
Expand Down

0 comments on commit d94a94b

Please sign in to comment.