feat: Merge taxes from mapped docs (#38346)

feat: Merge taxes from mapped docs (#38346)

* feat: Merge taxes from mapped docs

* chore: ci failures

(cherry picked from commit 9b1c22250f1da37a563ba0885fbbd732b176816c)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
This commit is contained in:
mergify[bot] 2023-12-28 08:28:02 +05:30 committed by GitHub
parent 3caabf23a5
commit 4e2304818b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 7 deletions

View File

@ -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();
}
@ -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,
@ -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();
},

View File

@ -1121,8 +1121,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)
@ -1139,6 +1170,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()
@ -1202,7 +1237,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,