From 16fe53b8c765aee9e4942bd73d3bd6ccb8b2e05b Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 18 Mar 2025 21:20:40 +0530 Subject: [PATCH] fix: not able to make PR against stand alone Debit Note (cherry picked from commit 6a52c30591b8202a73ff87672a54fe9ea21c6ff5) # Conflicts: # erpnext/public/js/controllers/buying.js --- erpnext/public/js/controllers/buying.js | 426 ++++++++++++++++++++++++ 1 file changed, 426 insertions(+) diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index aa7dfbd90d6..e732d2843bc 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -9,9 +9,435 @@ cur_frm.cscript.tax_table = "Purchase Taxes and Charges"; cur_frm.email_field = "contact_email"; +<<<<<<< HEAD erpnext.buying.BuyingController = class BuyingController extends erpnext.TransactionController { setup() { super.setup(); +======= + this.frm.set_query("project", function (doc) { + return { + filters: { + company: doc.company, + }, + }; + }); + + if (this.frm.doc.__islocal + && frappe.meta.has_field(this.frm.doc.doctype, "disable_rounded_total")) { + + var df = frappe.meta.get_docfield(this.frm.doc.doctype, "disable_rounded_total"); + var disable = cint(df.default) || cint(frappe.sys_defaults.disable_rounded_total); + this.frm.set_value("disable_rounded_total", disable); + } + + + // no idea where me is coming from + if(this.frm.get_field('shipping_address')) { + this.frm.set_query("shipping_address", () => { + if(this.frm.doc.customer) { + return { + query: 'frappe.contacts.doctype.address.address.address_query', + filters: { link_doctype: 'Customer', link_name: this.frm.doc.customer } + }; + } else + return erpnext.queries.company_address_query(this.frm.doc) + }); + } + } + + setup_queries(doc, cdt, cdn) { + var me = this; + + if(this.frm.fields_dict.buying_price_list) { + this.frm.set_query("buying_price_list", function() { + return{ + filters: { 'buying': 1 } + } + }); + } + + if(this.frm.fields_dict.tc_name) { + this.frm.set_query("tc_name", function() { + return{ + filters: { 'buying': 1 } + } + }); + } + + me.frm.set_query('supplier', erpnext.queries.supplier); + me.frm.set_query('contact_person', erpnext.queries.contact_query); + me.frm.set_query('supplier_address', erpnext.queries.address_query); + + me.frm.set_query('billing_address', erpnext.queries.company_address_query); + erpnext.accounts.dimensions.setup_dimension_filters(me.frm, me.frm.doctype); + + this.frm.set_query("item_code", "items", function() { + if (me.frm.doc.is_subcontracted) { + var filters = {'supplier': me.frm.doc.supplier}; + if (me.frm.doc.is_old_subcontracting_flow) { + filters["is_sub_contracted_item"] = 1; + } + else { + filters["is_stock_item"] = 0; + } + + return{ + query: "erpnext.controllers.queries.item_query", + filters: filters + } + } + else { + return{ + query: "erpnext.controllers.queries.item_query", + filters: { 'supplier': me.frm.doc.supplier, 'is_purchase_item': 1, 'has_variants': 0} + } + } + }); + + + this.frm.set_query("manufacturer", "items", function(doc, cdt, cdn) { + const row = locals[cdt][cdn]; + return { + query: "erpnext.controllers.queries.item_manufacturer_query", + filters:{ 'item_code': row.item_code } + } + }); + + if(this.frm.fields_dict["items"].grid.get_field('item_code')) { + this.frm.set_query("item_tax_template", "items", function(doc, cdt, cdn) { + return me.set_query_for_item_tax_template(doc, cdt, cdn) + }); + } + } + + refresh(doc) { + frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'supplier', doctype: 'Supplier'}; + + this.frm.toggle_display("supplier_name", + (this.frm.doc.supplier_name && this.frm.doc.supplier_name!==this.frm.doc.supplier)); + + if(this.frm.doc.docstatus==0 && + (this.frm.doctype==="Purchase Order" || this.frm.doctype==="Material Request")) { + this.set_from_product_bundle(); + } + + this.toggle_subcontracting_fields(); + super.refresh(); + } + + toggle_subcontracting_fields() { + if (['Purchase Receipt', 'Purchase Invoice'].includes(this.frm.doc.doctype)) { + this.frm.fields_dict.supplied_items.grid.update_docfield_property('consumed_qty', + 'read_only', this.frm.doc.__onload && this.frm.doc.__onload.backflush_based_on === 'BOM'); + + this.frm.set_df_property('supplied_items', 'cannot_add_rows', 1); + this.frm.set_df_property('supplied_items', 'cannot_delete_rows', 1); + } + } + + supplier() { + var me = this; + erpnext.utils.get_party_details(this.frm, null, null, function(){ + me.apply_price_list(); + }); + } + + company(){ + if(!frappe.meta.has_field(this.frm.doc.doctype, "billing_address")) return; + + frappe.call({ + method: "erpnext.setup.doctype.company.company.get_billing_shipping_address", + args: { + name: this.frm.doc.company, + billing_address:this.frm.doc.billing_address, + shipping_address: this.frm.doc.shipping_address + }, + callback: (r) => { + this.frm.set_value("billing_address", r.message.primary_address || ""); + + if(!frappe.meta.has_field(this.frm.doc.doctype, "shipping_address")) return; + this.frm.set_value("shipping_address", r.message.shipping_address || ""); + }, + }); + } + + supplier_address() { + erpnext.utils.get_address_display(this.frm); + erpnext.utils.set_taxes_from_address(this.frm, "supplier_address", "supplier_address", "supplier_address"); + } + + buying_price_list() { + this.apply_price_list(); + } + + discount_percentage(doc, cdt, cdn) { + var item = frappe.get_doc(cdt, cdn); + item.discount_amount = 0.0; + this.price_list_rate(doc, cdt, cdn); + } + + discount_amount(doc, cdt, cdn) { + var item = frappe.get_doc(cdt, cdn); + item.discount_percentage = 0.0; + this.price_list_rate(doc, cdt, cdn); + } + + qty(doc, cdt, cdn) { + if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && doc.update_stock)) { + this.calculate_received_qty(doc, cdt, cdn) + } + super.qty(doc, cdt, cdn); + } + + rejected_qty(doc, cdt, cdn) { + this.calculate_received_qty(doc, cdt, cdn) + } + + calculate_received_qty(doc, cdt, cdn){ + var item = frappe.get_doc(cdt, cdn); + frappe.model.round_floats_in(item, ["qty", "rejected_qty"]); + + if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["qty", "rejected_qty"])){ return } + + let received_qty = flt(item.qty + item.rejected_qty, precision("received_qty", item)); + let received_stock_qty = flt(item.conversion_factor, precision("conversion_factor", item)) * flt(received_qty); + + frappe.model.set_value(cdt, cdn, "received_qty", received_qty); + frappe.model.set_value(cdt, cdn, "received_stock_qty", received_stock_qty); + } + + batch_no(doc, cdt, cdn) { + super.batch_no(doc, cdt, cdn); + } + + validate_negative_quantity(cdt, cdn, item, fieldnames){ + if(!item || !fieldnames) { return } + + var is_negative_qty = false; + for(var i = 0; i{0} is invalid", [row.manufacturer_part_no]), + title: __("Invalid Part Number") + } + frappe.throw(msg); + } + } + ); + } + } + + add_serial_batch_bundle(doc, cdt, cdn) { + let item = locals[cdt][cdn]; + let me = this; + let fields = ["has_batch_no", "has_serial_no"]; + + frappe.db.get_value("Item", item.item_code, fields) + .then((r) => { + if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) { + fields.forEach((field) => { + item[field] = r.message[field]; + }); + + item.type_of_transaction = item.qty > 0 ? "Inward" : "Outward"; + item.is_rejected = false; + + new erpnext.SerialBatchPackageSelector( + me.frm, item, (r) => { + if (r) { + let qty = Math.abs(r.total_qty); + if (doc.is_return) { + qty = qty * -1; + } + + let update_values = { + "serial_and_batch_bundle": r.name, + "use_serial_batch_fields": 0, + "qty": qty / flt(item.conversion_factor || 1, precision("conversion_factor", item)) + } + + if (r.warehouse) { + update_values["warehouse"] = r.warehouse; + } + + frappe.model.set_value(item.doctype, item.name, update_values); + } + } + ); + } + }); + } + + add_serial_batch_for_rejected_qty(doc, cdt, cdn) { + let item = locals[cdt][cdn]; + let me = this; + let fields = ["has_batch_no", "has_serial_no"]; + + frappe.db.get_value("Item", item.item_code, fields) + .then((r) => { + if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) { + fields.forEach((field) => { + item[field] = r.message[field]; + }); + + item.type_of_transaction = !doc.is_return > 0 ? "Inward" : "Outward"; + item.is_rejected = true; + + new erpnext.SerialBatchPackageSelector( + me.frm, item, (r) => { + if (r) { + let qty = Math.abs(r.total_qty); + if (doc.is_return) { + qty = qty * -1; + } + + let update_values = { + "rejected_serial_and_batch_bundle": r.name, + "use_serial_batch_fields": 0, + "rejected_qty": qty / flt(item.conversion_factor || 1, precision("conversion_factor", item)) + } + + if (r.warehouse) { + update_values["rejected_warehouse"] = r.warehouse; + } + + frappe.model.set_value(item.doctype, item.name, update_values); + } + } + ); + } + }); + } + }; +>>>>>>> 6a52c30591 (fix: not able to make PR against stand alone Debit Note) } onload(doc, cdt, cdn) {