fix: customer/supplier quick entry dialog (#33496)
* fix: readonly primary contact fields.
* refactor: supplier and customer quick entry form into common class.
diff --git a/erpnext/public/js/erpnext.bundle.js b/erpnext/public/js/erpnext.bundle.js
index 14a088e..7b230af 100644
--- a/erpnext/public/js/erpnext.bundle.js
+++ b/erpnext/public/js/erpnext.bundle.js
@@ -13,6 +13,7 @@
import "./agriculture/ternary_plot";
import "./templates/item_quick_entry.html";
import "./utils/item_quick_entry";
+import "./utils/contact_address_quick_entry";
import "./utils/customer_quick_entry";
import "./utils/supplier_quick_entry";
import "./call_popup/call_popup";
diff --git a/erpnext/public/js/utils/contact_address_quick_entry.js b/erpnext/public/js/utils/contact_address_quick_entry.js
new file mode 100644
index 0000000..adabf08
--- /dev/null
+++ b/erpnext/public/js/utils/contact_address_quick_entry.js
@@ -0,0 +1,100 @@
+frappe.provide('frappe.ui.form');
+
+frappe.ui.form.ContactAddressQuickEntryForm = class ContactAddressQuickEntryForm extends frappe.ui.form.QuickEntryForm {
+ constructor(doctype, after_insert, init_callback, doc, force) {
+ super(doctype, after_insert, init_callback, doc, force);
+ this.skip_redirect_on_error = true;
+ }
+
+ render_dialog() {
+ this.mandatory = this.mandatory.concat(this.get_variant_fields());
+ super.render_dialog();
+ }
+
+ insert() {
+ /**
+ * Using alias fieldnames because the doctype definition define "email_id" and "mobile_no" as readonly fields.
+ * Therefor, resulting in the fields being "hidden".
+ */
+ const map_field_names = {
+ "email_address": "email_id",
+ "mobile_number": "mobile_no",
+ };
+
+ Object.entries(map_field_names).forEach(([fieldname, new_fieldname]) => {
+ this.dialog.doc[new_fieldname] = this.dialog.doc[fieldname];
+ delete this.dialog.doc[fieldname];
+ });
+
+ return super.insert();
+ }
+
+ get_variant_fields() {
+ var variant_fields = [{
+ fieldtype: "Section Break",
+ label: __("Primary Contact Details"),
+ collapsible: 1
+ },
+ {
+ label: __("Email Id"),
+ fieldname: "email_address",
+ fieldtype: "Data",
+ options: "Email",
+ },
+ {
+ fieldtype: "Column Break"
+ },
+ {
+ label: __("Mobile Number"),
+ fieldname: "mobile_number",
+ fieldtype: "Data"
+ },
+ {
+ fieldtype: "Section Break",
+ label: __("Primary Address Details"),
+ collapsible: 1
+ },
+ {
+ label: __("Address Line 1"),
+ fieldname: "address_line1",
+ fieldtype: "Data"
+ },
+ {
+ label: __("Address Line 2"),
+ fieldname: "address_line2",
+ fieldtype: "Data"
+ },
+ {
+ label: __("ZIP Code"),
+ fieldname: "pincode",
+ fieldtype: "Data"
+ },
+ {
+ fieldtype: "Column Break"
+ },
+ {
+ label: __("City"),
+ fieldname: "city",
+ fieldtype: "Data"
+ },
+ {
+ label: __("State"),
+ fieldname: "state",
+ fieldtype: "Data"
+ },
+ {
+ label: __("Country"),
+ fieldname: "country",
+ fieldtype: "Link",
+ options: "Country"
+ },
+ {
+ label: __("Customer POS Id"),
+ fieldname: "customer_pos_id",
+ fieldtype: "Data",
+ hidden: 1
+ }];
+
+ return variant_fields;
+ }
+}
diff --git a/erpnext/public/js/utils/customer_quick_entry.js b/erpnext/public/js/utils/customer_quick_entry.js
index d2c5c72..b253208 100644
--- a/erpnext/public/js/utils/customer_quick_entry.js
+++ b/erpnext/public/js/utils/customer_quick_entry.js
@@ -1,81 +1,3 @@
frappe.provide('frappe.ui.form');
-frappe.ui.form.CustomerQuickEntryForm = class CustomerQuickEntryForm extends frappe.ui.form.QuickEntryForm {
- constructor(doctype, after_insert, init_callback, doc, force) {
- super(doctype, after_insert, init_callback, doc, force);
- this.skip_redirect_on_error = true;
- }
-
- render_dialog() {
- this.mandatory = this.mandatory.concat(this.get_variant_fields());
- super.render_dialog();
- }
-
- get_variant_fields() {
- var variant_fields = [{
- fieldtype: "Section Break",
- label: __("Primary Contact Details"),
- collapsible: 1
- },
- {
- label: __("Email Id"),
- fieldname: "email_id",
- fieldtype: "Data"
- },
- {
- fieldtype: "Column Break"
- },
- {
- label: __("Mobile Number"),
- fieldname: "mobile_no",
- fieldtype: "Data"
- },
- {
- fieldtype: "Section Break",
- label: __("Primary Address Details"),
- collapsible: 1
- },
- {
- label: __("Address Line 1"),
- fieldname: "address_line1",
- fieldtype: "Data"
- },
- {
- label: __("Address Line 2"),
- fieldname: "address_line2",
- fieldtype: "Data"
- },
- {
- label: __("ZIP Code"),
- fieldname: "pincode",
- fieldtype: "Data"
- },
- {
- fieldtype: "Column Break"
- },
- {
- label: __("City"),
- fieldname: "city",
- fieldtype: "Data"
- },
- {
- label: __("State"),
- fieldname: "state",
- fieldtype: "Data"
- },
- {
- label: __("Country"),
- fieldname: "country",
- fieldtype: "Link",
- options: "Country"
- },
- {
- label: __("Customer POS Id"),
- fieldname: "customer_pos_id",
- fieldtype: "Data",
- hidden: 1
- }];
-
- return variant_fields;
- }
-}
+frappe.ui.form.CustomerQuickEntryForm = frappe.ui.form.ContactAddressQuickEntryForm;
diff --git a/erpnext/public/js/utils/supplier_quick_entry.js b/erpnext/public/js/utils/supplier_quick_entry.js
index 8d591a9..687b014 100644
--- a/erpnext/public/js/utils/supplier_quick_entry.js
+++ b/erpnext/public/js/utils/supplier_quick_entry.js
@@ -1,77 +1,3 @@
frappe.provide('frappe.ui.form');
-frappe.ui.form.SupplierQuickEntryForm = class SupplierQuickEntryForm extends frappe.ui.form.QuickEntryForm {
- constructor(doctype, after_insert, init_callback, doc, force) {
- super(doctype, after_insert, init_callback, doc, force);
- this.skip_redirect_on_error = true;
- }
-
- render_dialog() {
- this.mandatory = this.mandatory.concat(this.get_variant_fields());
- super.render_dialog();
- }
-
- get_variant_fields() {
- var variant_fields = [
- {
- fieldtype: "Section Break",
- label: __("Primary Contact Details"),
- collapsible: 1
- },
- {
- label: __("Email Id"),
- fieldname: "email_id",
- fieldtype: "Data"
- },
- {
- fieldtype: "Column Break"
- },
- {
- label: __("Mobile Number"),
- fieldname: "mobile_no",
- fieldtype: "Data"
- },
- {
- fieldtype: "Section Break",
- label: __("Primary Address Details"),
- collapsible: 1
- },
- {
- label: __("Address Line 1"),
- fieldname: "address_line1",
- fieldtype: "Data"
- },
- {
- label: __("Address Line 2"),
- fieldname: "address_line2",
- fieldtype: "Data"
- },
- {
- label: __("ZIP Code"),
- fieldname: "pincode",
- fieldtype: "Data"
- },
- {
- fieldtype: "Column Break"
- },
- {
- label: __("City"),
- fieldname: "city",
- fieldtype: "Data"
- },
- {
- label: __("State"),
- fieldname: "state",
- fieldtype: "Data"
- },
- {
- label: __("Country"),
- fieldname: "country",
- fieldtype: "Link",
- options: "Country"
- }
- ];
-
- return variant_fields;
- }
-};
+frappe.ui.form.SupplierQuickEntryForm = frappe.ui.form.ContactAddressQuickEntryForm;